Files
STM32F103/AGENTS.md

61 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 */` 之间