embedded-stm32-hal — правило для Cursor: STM32, HAL и DMA
Правило для Cursor, которое задаёт агенту рамки при работе с прошивками на C и C++: STM32 HAL, прерывания, DMA, экономия памяти.
.cursor/rules/embedded-stm32-hal.mdcЧто делает embedded-stm32-hal
Файл описывает, как вести себя в коде микроконтроллеров. Агент держит раздельно board support, драйверы, middleware, прикладную логику и тесты, а сгенерированный CubeMX или вендорный код не смешивает с написанным руками. Аппаратная абстракция прячется за узкими интерфейсами, чтобы логику можно было прогонять без железа.
По периферии требования конкретные: инициализация в одном месте, проверка возвращаемых значений HAL-вызовов, обработка таймаутов и ошибок, никаких блокирующих вызовов на критичном по времени пути. Для UART, SPI, I2C, ADC и захвата таймеров правило советует DMA, но требует задокументировать владение буфером и его время жизни. volatile разрешён только для памяти, которой обмениваются с ISR, или для регистров.
Прерывания должны оставаться короткими, тяжёлую работу агент выносит в главный цикл, задачу RTOS или очередь событий. Динамическое выделение в прерываниях запрещено, а heap в прошивке — только если проект это явно разрешает. Отдельный блок про типичные ошибки: не править сгенерированные файлы, не крутиться вечно на флагах железа, не отдавать один буфер DMA и CPU без синхронизации. Если у вас в проекте есть .ioc или platformio.ini, правило подхватится по globs.
Какие задачи решает
- разложить прошивку на драйверы, middleware и прикладной код
- вынести тяжёлую работу из обработчика прерывания
- настроить DMA для UART, SPI или ADC и не потерять буфер
- проверить возвращаемые значения HAL-вызовов и таймауты
- прогнать логику на хосте без подключённой платы
Примеры запросов агенту
- Проверь этот модуль работы с DMA: где буфер может уйти из-под CPU?
- Перепиши обработчик прерывания, чтобы он остался коротким
- Добавь таймауты в ожидание флагов периферии
Как установить embedded-stm32-hal
Вручную: положить файлы
.cursor/rules/embedded-stm32-hal.mdcВо frontmatter: description, globs, alwaysApply
Вручную: положить файлы
.claude/rules/embedded-stm32-hal.mdПоле paths во frontmatter ограничивает файлы: globs из источника → paths
AGENTS.md
Codex читает AGENTS.md: вставьте текст правила туда
Вручную: положить файлы
.github/instructions/embedded-stm32-hal.instructions.mdПоле applyTo задаёт, к каким файлам применять: globs из источника → applyTo
Вручную: положить файлы
.devin/rules/embedded-stm32-hal.mdВручную: положить файлы
.clinerules/embedded-stm32-hal.mdПо шагам, с командами для каждой платформы: Cursor rules: файлы .mdc, четыре режима и замена .cursorrules
Из того же набора68
Похожие
Рядом в теме «Языки программирования»
Все правила IDE по теме «Языки программирования» →Вопросы о embedded-stm32-hal
Как установить embedded-stm32-hal в Cursor?
Положите файл по пути .cursor/rules/embedded-stm32-hal.mdc в проекте. Cursor подхватит его как правило для файлов, подходящих под globs.
Что делает embedded-stm32-hal?
Задаёт агенту правила для embedded C/C++: структура проекта, работа с STM32 HAL, прерывания, DMA, ограничения по памяти и тестирование на железе.
Для каких файлов применяется правило?
Globs охватывают **/*.c, **/*.h, **/*.cpp, **/*.hpp, **/*.ioc, CMakeLists.txt, Makefile и platformio.ini. Автоприменение выключено, поэтому правило срабатывает по совпадению с этими путями.
Исходный текст
embedded-stm32-hal.mdc · CC0-1.0
--- description: Embedded C/C++ rules for MCU, STM32, HAL, interrupts, DMA, memory constraints, and hardware-focused testing globs: ["**/*.c", "**/*.h", "**/*.cpp", "**/*.hpp", "**/*.ioc", "CMakeLists.txt", "Makefile", "platformio.ini"] alwaysApply: false --- # Embedded MCU, STM32, and HAL Rules ## Project Structure - Keep board support, drivers, middleware, application logic, and tests separate. - Isolate generated CubeMX or vendor code from hand-written application code. - Put hardware abstraction behind narrow interfaces so logic can be tested without hardware. - Document clock tree, pin mappings, peripheral ownership, and interrupt priorities. ## STM32 HAL and Peripherals - Initialize peripherals in one place and avoid hidden reconfiguration. - Check return values from HAL calls and handle timeout/error cases. - Keep blocking HAL calls out of time-critical paths. - Use DMA for high-throughput UART, SPI, I2C, ADC, or timer capture paths when appropriate. - Document buffer ownership and lifetime for DMA operations. - Use `volatile` only for memory shared with ISRs or hardware registers. ## Interrupts and Concurrency - Keep ISRs short and deterministic. - Defer heavy work from interrupts to the main loop, RTOS task, or event queue. - Protect shared data with critical sections, atomics, queues, or RTOS primitives. - Avoid dynamic allocation in interrupts. - Make interrupt priority decisions explicit. ## Memory and Timing - Avoid heap allocation in firmware unless the project explicitly allows it. - Check stack usage for ISRs and RTOS tasks. - Keep lookup tables `const` so they can live in flash. - Use fixed-width integer types for hardware-facing code. - Add timeouts for hardware waits. - Treat watchdog configuration as part of application design, not a late add-on. ## Testing and Debugging - Unit test pure logic on host builds. - Use hardware-in-the-loop tests for peripheral behavior. - Add assertions for impossible hardware states in debug builds. - Use SWD/JTAG, logic analyzers, and serial logs with rate limits. - Keep fault handlers useful: capture reset reason, fault registers, and build version when possible. ## Common Mistakes - Do not modify generated files unless the workflow preserves changes. - Do not busy-wait forever on hardware flags. - Do not share buffers between DMA and CPU without synchronization. - Do not assume peripheral reset state after low-power modes.
© PatrickJS · CC0-1.0 · PatrickJS/awesome-cursorrules