2.7 KiB
2.7 KiB
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 */之间