Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add alexex1993/mcu-skills --skill stm32f411-blackpillgit clone --depth 1 https://github.com/alexex1993/mcu-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/alexex1993/mcu-skills/stm32f411-blackpill)<a href="https://agentmods.dev/skills/alexex1993/mcu-skills/stm32f411-blackpill"><img src="https://agentmods.dev/badge/skills/alexex1993/mcu-skills/stm32f411-blackpill/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/alexex1993/mcu-skills/stm32f411-blackpill"><img src="https://agentmods.dev/badge/skills/alexex1993/mcu-skills/stm32f411-blackpill.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00000 | $0.02581 |
| Opus 5 | $0.00000 | $0.01290 |
| Sonnet 5 | $0.00000 | $0.00516 |
| Haiku 4.5 | $0.00000 | $0.00258 |
Grade A, and why
stm32f411-blackpill scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 12d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 139 lines — stays where its author put it; the contents beside it link to each section on GitHub.
WeAct "Black Pill" — STM32F411CEU6
Board-specific firmware knowledge. The two reference files hold the detail — read the one you need rather than guessing, because most of the failure modes below are silent (the board runs, just wrongly).
reference/board-hardware.md— complete hardware reference: pin map for the 48-pin package with every alternate function, power tree, memory map, boot modes, plus a full development guide (Part II: §12 PlatformIO, §13 bring-up order, §14 peripheral cookbook, §15 F4/M4 gotchas, §16 flashing and recovery, §17 pitfall table).reference/recipes.md— copy-paste-ready code:platformio.ini,board.h, the clock tree, RTC on the LSE crystal, the calibrated temperature sensor, the complete USB CDC stack.template/— a complete working project that builds and flashes, plus a scaffolding script. It is where every recipe was extracted from; seetemplate/README.md.
Orientation
| MCU | STM32F411CEU6, Cortex-M4F, 512 KB flash, 128 KB SRAM, UFQFPN48, 100 MHz max |
| Crystals | HSE 25 MHz on PH0/PH1, LSE 32.768 kHz on PC14/PC15 — both fitted from the factory |
| Working clock tree | PLL M25/N192/P2/Q4 → SYSCLK 96 MHz, HCLK 96, PCLK1 48, PCLK2 96, USB 48 |
| LED / button | PC13 lit = LOW (anode on 3V3) / K1 on PA0 pressed = LOW, needs a pull-up |
| USB | USB-C straight to USB_OTG_FS on PA11/PA12. No USB-serial chip on the board |
| Flashing | ROM DFU over that same USB-C (0483:DF11), entered by hand with BOOT0 + NRST |
| Debug | SWD on the 4-pin header: 3V3, PA13 (SWDIO), PA14 (SWCLK), GND |
| ADC | ADC1 only, 10 external channels (PA0–PA7, PB0, PB1). No DAC. VDDA = VREF+ = the 3V3 LDO |
| Storage | unpopulated SOIC-8 pad underneath for an SPI flash on SPI1 (PA4–PA7) |
Rules that prevent the expensive mistakes
Check these before writing code — each one produces a failure that looks like something else.
- Define
SysTick_Handler()yourself.framework-stm32cubeships nostm32f4xx_it.c, and the startup file's weak handler is an infinite loop. Withoutvoid SysTick_Handler(void) { HAL_IncTick(); }the board boots and then hangs in the firstHAL_Delay()— which reads like a clock problem and is not. This is the single most common way a first project on this board fails. - 96 MHz, not 100. USB_OTG_FS needs exactly 48 MHz off PLLQ, which divides the same VCO as PLLP.
No integer pair gives 100 MHz and 48 MHz together.
PLLM 25 / PLLN 192 / PLLP 2 / PLLQ 4. Set SYSCLK to 100 and USB silently never enumerates. FLASH_LATENCY_3at 96 MHz, andPWR_REGULATOR_VOLTAGE_SCALE1(after__HAL_RCC_PWR_CLK_ENABLE()) because Scale 2 caps at 84 MHz. Too few wait states → hard fault on the first fetch past the clock switch.-DHSE_VALUE=25000000inbuild_flags. CubeF4's default template happens to be 25 MHz already, so it works by luck — until someone drops in a CubeMX-generatedstm32f4xx_hal_conf.hwritten for an 8 MHz board and every baud rate and timer period shifts by 3.125× with no error.- PC13 is lit by a LOW level and sits behind the backup-domain power switch: 3 mA maximum,
GPIO_SPEED_FREQ_LOW, and never as a current source. Same limit applies to PC14/PC15, which are the LSE crystal here anyway. - K1 on PA0 needs
GPIO_PULLUP— not every revision fits an external one, and PA0 is one of only two pins on this package that are not 5 V tolerant (the other is PB5). - Backup domain before RTC:
__HAL_RCC_PWR_CLK_ENABLE()thenHAL_PWR_EnableBkUpAccess(), or the LSE configuration reports success and the clock never starts. Expect the LSE itself to take ~2 s to stabilise on a cold start — that pause is normal, not a hang. HAL_RTC_GetTime()beforeHAL_RTC_GetDate(), always. The F4's calendar sits in shadow registers that unlock only after both are read. Reversed, the date freezes — a bug that first shows up at midnight.- The temperature sensor is ADC channel 18 on the F411, not 16, and it shares that channel with
the VBAT divider. Use
ADC_CHANNEL_TEMPSENSORand never callHAL_ADCEx_EnableVBAT(). F401 examples — which is most Black Pill material online — use channel 16 and return a plausible wrong number. - Any internal ADC channel needs
ADC_SAMPLETIME_480CYCLES(≥ 10 µs per the datasheet). The 3-cycle default reads noise. And use the factory calibration at0x1FFF7A2A/2C/2Erather than the datasheet's typical 2.5 mV/°C — VDDA here is just an LDO output, not a reference. - The USB device library is not in the framework.
framework-stm32cubef4has noSTM32_USB_Device_Library; vendorusbd_core/ctlreq/ioreq/cdcintolib/. And pointUSBD_mallocat a static buffer — ST's default ismalloc()against a 0x200-byte heap, which fails silently and the device never appears.
What ships with it
31 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- assets/IMAGE.md 453 B
- reference/board-hardware.md 35 KB
- reference/recipes.md 39 KB
- template/.gitignore 94 B
- template/include/board.h 1.4 KB
- template/include/README 1.2 KB
- template/include/temp_sensor.h 501 B
- template/include/usb_device.h 244 B
- template/include/usbd_cdc_if.h 382 B
- template/include/usbd_conf.h 1.0 KB
- template/include/usbd_desc.h 137 B
- template/lib/README 1.0 KB
- template/lib/USBDevice/usbd_cdc.c 28 KB
- template/lib/USBDevice/usbd_cdc.h 5.3 KB
- template/lib/USBDevice/usbd_core.c 30 KB
- template/lib/USBDevice/usbd_core.h 5.7 KB
- template/lib/USBDevice/usbd_ctlreq.c 25 KB
- template/lib/USBDevice/usbd_ctlreq.h 2.1 KB
- template/lib/USBDevice/usbd_def.h 16 KB
- template/lib/USBDevice/usbd_ioreq.c 4.9 KB
- template/lib/USBDevice/usbd_ioreq.h 2.4 KB
- template/platformio.ini 1.5 KB
- template/README.md 4.7 KB
- template/src/main.c 12 KB
- template/src/temp_sensor.c 4.4 KB
- template/src/usb_device.c 583 B
- template/src/usbd_cdc_if.c 3.3 KB
- template/src/usbd_conf.c 7.8 KB
- template/src/usbd_desc.c 5.0 KB
- template/variants/minimal/main.c 3.3 KB
- template/variants/new-project.sh 1.5 KB runs code
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 12d ago First seen · 139 lines · 0 tokens per session scan A 4ccaeefc28b4
stm32f411-blackpill is a skill published in the GitHub repository alexex1993/mcu-skills (17 stars, last pushed 2d ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 2,581 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
doca-argp
Use this skill for hands-on DOCA Arg Parser CLI work on a shipped sample or new DOCA-using app — adding / removing / renaming flags; wiring docaargpinit → register params → docaargpstart → docaargpdestroy in order; picking a parameter type from the full public enum (DOCAARGPTYPESTRING, INT, BOOLEAN, DEVICE, DEVICEREP…
holoscan-install-wheel
Install Holoscan SDK Python wheel via pip into a venv. Use for Python installs; not for native C++/apt or Conda installs.
mspm0-skill
Tool-neutral CLI agent rules for TI MSPM0 development with SysConfig, DriverLib, CCS, Keil/uVision, CMake/GCC/OpenOCD, and supported board references. Use when an agent needs to inspect or modify MSPM0 projects, validate SysConfig output, package examples, or work on NUEDC embedded firmware.
arduino-code-generator
Generate Arduino and embedded C++ snippets for sensors, actuators, buses, state machines, timing, data logging, and hardware abstraction. Use when a user requests implementation code and provide the exact board, framework, toolchain, pins, voltage, memory, and library versions first. Bundled templates target UNO…
arduino-project-builder
Build complete Arduino and embedded projects across Arduino IDE, Arduino CLI, PlatformIO, and vendor-specific toolchains. Use when users request an application combining firmware, sensors, actuators, networking, power, or deployment rather than a code snippet. The bundled scaffold targets UNO, ESP32, and Raspberry Pi…
keymap-ai
Expert assistant for ZMK and QMK keyboard firmware configs. Use when auditing or improving a zmk-config or QMK keymap, tuning home row mods or hold-taps, adding smart layers (numword, caps word), configuring trackballs, trackpads, trackpoints, encoders and per-layer input processors, generating keymap-drawer diagrams…