{"adoption": {"forks": 445, "observed_at": "2026-08-28T04:09:01.268770+00:00", "stars": 4841}, "canonical_url": "https://ross.abutalabs.com/products/bare-metal-programming-guide", "card": {"archived": false, "artifact_type": "learning-resource", "description": "A bare metal programming guide (ARM microcontrollers)", "domain": ["embedded-systems", "tutorials", "developer-tools", "hardware"], "enriched": true, "function": ["developer-tools", "embedded", "documentation", "cli", "gui"], "health_score": 74, "homepage": null, "language": "C", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["cpq/bare-metal-programming-guide"], "name": "cpq/bare-metal-programming-guide", "platform": ["embedded", "cross-platform", "cli"], "pushed_at": "2026-07-03T05:44:31+00:00", "repo": "cpq/bare-metal-programming-guide", "stars": 4841, "tags": ["bare-metal", "stm32", "arm-cortex-m", "gcc", "microcontrollers", "embedded-web-server", "gpio", "uart", "cmsis", "tutorial"], "topics": ["baremetal", "gcc", "make", "stm32", "arm", "cmsis", "ethernet", "gpio", "tutorial", "uart", "irq", "embedded-web-server", "embedded-webserver", "webserver"], "urls": [], "use_cases": ["learn bare-metal embedded programming on ARM microcontrollers", "understand how embedded frameworks like Cube and Arduino work under the hood", "set up a GCC + Make toolchain for STM32 without an IDE", "implement UART command line interfaces on microcontrollers", "build an embedded web server with a device dashboard UI", "use littlefs to store data in flash memory on an MCU", "learn GPIO, interrupts, and peripheral programming from datasheets"], "what_it_is": "An open-source tutorial guide teaching bare-metal ARM microcontroller programming using only GCC and datasheets, without frameworks. It includes progressively complete source code and template projects (blinky, CLI, littlefs, embedded web server) for several STM32 Nucleo boards.", "when_to_avoid": ["you need a production framework or HAL with broad chip support", "you want rapid prototyping with Arduino-style convenience", "you target non-ARM or non-STM32 hardware not covered by the guide"], "when_to_choose": ["you want to learn microcontroller fundamentals without vendor frameworks", "you prefer working directly from datasheets with GCC and Make", "you need minimal bare-metal template projects for STM32 boards", "you want to understand what frameworks like Cube or Keil abstract away"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/bare-metal-programming-guide", "repo": "cpq/bare-metal-programming-guide", "role": "main", "score": 73}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.268770+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:18:27.780024+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a0f8a710f35901d8ca06a631d4b73159030a6fa711b8091b45879b62da96ac6e", "fetched_at": "2026-08-28T04:09:01.268770+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cpq/bare-metal-programming-guide"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.268770+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:18:27.780024+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a0f8a710f35901d8ca06a631d4b73159030a6fa711b8091b45879b62da96ac6e", "fetched_at": "2026-08-28T04:09:01.268770+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cpq/bare-metal-programming-guide"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:18:27.780024+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a0f8a710f35901d8ca06a631d4b73159030a6fa711b8091b45879b62da96ac6e", "fetched_at": "2026-08-28T04:09:01.268770+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cpq/bare-metal-programming-guide"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.268770+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.268770+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.268770+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:18:27.780024+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a0f8a710f35901d8ca06a631d4b73159030a6fa711b8091b45879b62da96ac6e", "fetched_at": "2026-08-28T04:09:01.268770+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cpq/bare-metal-programming-guide"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.268770+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.268770+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:18:27.780024+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a0f8a710f35901d8ca06a631d4b73159030a6fa711b8091b45879b62da96ac6e", "fetched_at": "2026-08-28T04:09:01.268770+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cpq/bare-metal-programming-guide"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.268770+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.268770+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.268770+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:18:27.780024+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a0f8a710f35901d8ca06a631d4b73159030a6fa711b8091b45879b62da96ac6e", "fetched_at": "2026-08-28T04:09:01.268770+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cpq/bare-metal-programming-guide"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.268770+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:01.268770+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:18:27.780024+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a0f8a710f35901d8ca06a631d4b73159030a6fa711b8091b45879b62da96ac6e", "fetched_at": "2026-08-28T04:09:01.268770+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cpq/bare-metal-programming-guide"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:18:27.780024+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a0f8a710f35901d8ca06a631d4b73159030a6fa711b8091b45879b62da96ac6e", "fetched_at": "2026-08-28T04:09:01.268770+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cpq/bare-metal-programming-guide"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:18:27.780024+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a0f8a710f35901d8ca06a631d4b73159030a6fa711b8091b45879b62da96ac6e", "fetched_at": "2026-08-28T04:09:01.268770+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cpq/bare-metal-programming-guide"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:18:27.780024+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a0f8a710f35901d8ca06a631d4b73159030a6fa711b8091b45879b62da96ac6e", "fetched_at": "2026-08-28T04:09:01.268770+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cpq/bare-metal-programming-guide"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 90, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1448, "days_push": 61, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 73, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}