Create, modify, and manage STM32F1 microcontroller projects adhering strictly to the general engineering rules. Trigger this skill ALWAYS when the user mentions STM32, STM32F1, Cortex-M3, bare-metal C, embedded systems, Keil, MDK, standard peripheral library, OLED, LED, timer, interrupts, or when they ask to create a new module/project. Use this skill proactively for any embedded C file generation.
This skill provides comprehensive rules for STM32F1 Microcontroller development, specifically for AI Agents helping users with Electronic Design Contest training or Embedded C programming. Use these rules strictly when writing, refactoring, or generating code, and when managing project files.
.c 和 .h 文件。严格遵循以下目录结构:
工程名/ ← 工程根目录
├── compile_flags.txt ← clangd 配置(IDE 智能提示用)
├── User/
│ ├── main.c ← 用户主程序
│ ├── 工程名.uvprojx ← Keil 工程文件
│ └── Objects/, Listings/ ← 编译产物目录
├── APP/
│ ├── 模块名/ ← 每个模块必须独立存放于子文件夹
│ │ ├── 模块名.c
│ │ └── 模块名.h
└── Lib/ ← STM32 标准库 (Core, STM32F10x_StdPeriph_Driver)
APP/ 下新建模块时,必须创建一个以模块名为名的子文件夹(如 APP/OLED/oled.c 和 oled.h)。模块文件夹名建议与内部 .c/.h 头文件名对应。User/工程名.uvprojx 和根目录的 compile_flags.txt,将新模块的路径添加进去。
.uvprojx XML 文本!这会导致大概率报错废毁!python <这篇规则所在的物理目录>/assets/scripts/add_module.py <Project.uvprojx相对/绝对路径> <..\\APP\\模块名\\对应.c> <..\\APP\\模块名> ,交由脚本自动完成无损注入。不要使用写死的路径,请利用命令寻找这个 python 脚本。assets/Lib/ 完整复刻至项目根目录 Lib/ 中。assets/APP/delay/、assets/APP/Usart/、assets/APP/OLED/ 等按需完整复刻至项目 APP/ 内。compile_flags.txt 及 .uvprojx。if, for, while)后必须加空格。( 之间不得加空格。>, +, = 等) 两侧必须加空格。!, &, ++ 等) 与操作数之间不得加空格。(uint8_t)var。. 和 -> 前后不得加空格。snake_case),如 sys_tick。仅循环变量允许用单字母。PascalCase),推荐 模块名_动作 格式,如 LED_Init()。MAX_BUFFER_SIZE。<stdint.h> 的标准类型,如 uint8_t, uint16_t, int32_t。严禁直接使用 int, short, char 等定义数值(除非指代真实字符或简单计数)。struct, enum 建议使用大驼峰并以 _t 结尾(如 Clock_t)。#ifndef, #define, #endif 保护,宏名建议类似于 __FILENAME_H__。TIM3_IRQHandler。中断函数忌复杂逻辑(例如严禁使用 printf、delay 操作)。/stm32 触发指引工作流当用户通过 /stm32 触发使用本 skill 或要求新建项目时,必须严格按以下顺序进行交互:
.uvprojx / .uvoptx)和 compile_flags.txt:绝对禁止你凭空生成这些复杂的 XML/配置 文件!你必须直接从本 Skill 绑定的 assets/Template/ 下将对应的模板工程原原本本地拷贝过去,然后重命名为用户要求的工程名。assets/Lib/ 复制过去。compile_flags.txt)状态STM32F10X_MD,USE_STDPERIPH_DRIVER 以及将 Debug 替换为实际调试器如 J-Link/ST-Link 并勾选 Reset and Run 等)。涉及到复用或新建带有硬件引脚依赖的代码模块(如 OLED、按键、串口等)时:
128x64 分辨率的(如常规的 0.96寸 或 1.3寸 SSD1306)。当你为用户配置 OLED 功能时,必须向用户确认“您的屏幕是常见的 0.96寸 / 1.3寸 还是其他特殊尺寸?”。若尺寸或分辨率不同,你必须主动为其修改底层驱动文件中的 OLED_GRAM 大小及 Init 初始化序列参数,不可直接盲目套用。为了确保不交付存在低级语法错误的半成品,在你为主程序生成代码、修改了现有工程结构或导入了新模块模块文件后,你必须执行“自动编译验证测试”:
C:\Keil_v5\UV4\UV4.exe -b User\Project.uvprojx -j0 -o build_log.txt )。build_log.txt。cannot open source input file、undefined symbol 等 Error 级情况),你严禁立刻中止并将报错情况丢给用户。你必须基于报错行号在后台自动自我修复相关 .h / .c 和配置问题,然后再次发起 -b 编译,如此循环。直到日志里刷出 0 Errors 提示,或者尝试穷尽时,才能向用户汇报你所撰写功能的落地完成度!PyTorch深度学习模式与最佳实践,用于构建稳健、高效且可复现的训练流程、模型架构和数据加载。