61 lines
2.7 KiB
Markdown
61 lines
2.7 KiB
Markdown
# 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](https://github.com/0x1abin/MultiButton)
|
||
- **功能**: 事件驱动型按键驱动,支持单击、双击、长按、连击等事件
|
||
- **文件**:
|
||
- `Drivers/BSP/MultiButton/multi_button.c/.h` — 核心库文件
|
||
- `Drivers/BSP/MultiButton/button_driver.c/.h` — 本项目适配层
|
||
- **定时器**: SysTick 中断中每5ms调用 `button_ticks()`
|
||
- **使用示例**:
|
||
```c
|
||
/* 在回调函数中处理按键事件 */
|
||
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 */` 之间
|