Files
STM32F103/AGENTS.md

2.7 KiB
Raw Blame History

STM32F103C8T6 项目

项目类型

STM32CubeMX 生成的项目,使用 Keil MDK-ARM V5.32 工具链。

关键文件

  • STM32F103C8T6/STM32F103C8T6.ioc — CubeMX 配置(引脚、时钟、外设)
  • STM32F103C8T6/Core/Src/main.c — 应用入口
  • STM32F103C8T6/MDK-ARM/STM32F103C8T6.uvprojx — Keil 工程文件
  • STM32F103C8T6/Drivers/BSP/MultiButton/ — MultiButton 按键驱动库
  • STM32F103C8T6/Drivers/BSP/LCD/ — ST7735S LCD 驱动

硬件配置

  • MCU: STM32F103C8T6 (LQFP48, 72MHz, 64KB Flash, 20KB RAM)
  • 时钟: HSE 8MHz → PLL ×9 = 72MHz SYSCLK
  • 外设:
    • USART1: PA9 (TX), PA10 (RX) — 异步模式
    • SPI2: PB13 (SCK), PB15 (MOSI) — 18MHz, DMA1_Channel5
    • LED: PC13 (低电平有效,上拉)
    • 按键: PB3 (KEY1), PB4 (KEY2), PB5 (KEY3), PC14 (KEY4), PC15 (KEY5) — 下拉
    • LCD: PB10 (DC), PB11 (CS), PB12 (RST), PB13 (SCK), PB15 (SDA) — ST7735S 128x160

MultiButton 按键库

  • 来源: 0x1abin/MultiButton
  • 功能: 事件驱动型按键驱动,支持单击、双击、长按、连击等事件
  • 文件:
    • Drivers/BSP/MultiButton/multi_button.c/.h — 核心库文件
    • Drivers/BSP/MultiButton/button_driver.c/.h — 本项目适配层
  • 定时器: SysTick 中断中每5ms调用 button_ticks()
  • 使用示例:
    /* 在回调函数中处理按键事件 */
    static void button_key1_callback(Button* handle, void* user_data) {
        HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
        printf("KEY1: LED翻转\n");
    }
    
    /* 初始化时注册回调 */
    button_attach(&btn_handle, BTN_SINGLE_CLICK, button_key1_callback, NULL);
    

代码规范

  • 遵循: 嵌入式C语言代码规范V1.0.md
  • 缩进: 4个空格禁止Tab
  • 命名:
    • 变量/函数: 小写+下划线,全局变量g_前缀,静态变量s_前缀,指针p_前缀
    • 宏/常量: 大写+下划线,模块名前缀
    • 类型: 小写+下划线+_t后缀
  • 注释: 关键逻辑每行注释,函数必须完整注释(功能/参数/返回值/说明)
  • 大括号: 所有if/for/while必须加大括号左大括号同行右大括号单独行
  • 禁止: goto、递归、可变参数函数、注释掉的代码提交

语言要求

  • 所有文档、注释、提交信息必须使用中文

重要说明

  • Drivers/ 目录包含 HAL 驱动源码 — 禁止直接修改
  • 通过 CubeMX .ioc 文件重新生成代码,禁止手动修改 HAL 文件
  • Keil 构建输出在 MDK-ARM/STM32F103C8T6/(已 gitignore
  • CubeMX 生成的代码中,自定义代码必须放在 /* USER CODE BEGIN *//* USER CODE END */ 之间