软件SPI可以驱动屏幕

This commit is contained in:
2026-07-14 14:44:07 +08:00
parent 3577003fb6
commit 0a5c478a42
53 changed files with 9354 additions and 87 deletions

View File

@@ -1,26 +1,43 @@
# STM32F103C8T6 Project
# STM32F103C8T6 项目
## Project Type
STM32CubeMX-generated project using **Keil MDK-ARM V5.32** toolchain.
## 项目类型
STM32CubeMX 生成的项目,使用 **Keil MDK-ARM V5.32** 工具链。
## Key Files
- `STM32F103C8T6/STM32F103C8T6.ioc` — CubeMX configuration (pinout, clock, peripherals)
- `STM32F103C8T6/Core/Src/main.c`Application entry point
- `STM32F103C8T6/MDK-ARM/STM32F103C8T6.uvprojx` — Keil project file
## 关键文件
- `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 驱动
## Hardware Configuration
## 硬件配置
- **MCU**: STM32F103C8T6 (LQFP48, 72MHz, 64KB Flash, 20KB RAM)
- **Clock**: HSE 8MHz → PLL ×9 = 72MHz SYSCLK
- **Peripherals**:
- USART1: PA9 (TX), PA10 (RX) — Async mode
- LED: PC13 (active low, pull-up)
- Keys: PB3 (KEY1), PB4 (KEY2), PB5 (KEY3), PC14 (KEY4), PC15 (KEY5) — Pull-down
- LCD: PB12 (RST), PB13 (SCL), PB15 (SDA) — GPIO output, pull-up
- **时钟**: 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
## Code Conventions
- Custom code must be placed within `/* USER CODE BEGIN */` and `/* USER CODE END */` markers
- Code outside these markers will be overwritten by CubeMX code generation
- HAL library is used (defined `USE_HAL_DRIVER` and `STM32F103xB`)
## 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`
@@ -33,7 +50,11 @@ STM32CubeMX-generated project using **Keil MDK-ARM V5.32** toolchain.
- **大括号**: 所有if/for/while必须加大括号左大括号同行右大括号单独行
- **禁止**: goto、递归、可变参数函数、注释掉的代码提交
## Important Notes
- `Drivers/` directory contains HAL driver source — do not edit directly
- Regenerate code via CubeMX `.ioc` file, not manually editing HAL files
- Keil build output goes to `MDK-ARM/STM32F103C8T6/` (already gitignored)
## 语言要求
- 所有文档、注释、提交信息必须使用**中文**
## 重要说明
- `Drivers/` 目录包含 HAL 驱动源码 — 禁止直接修改
- 通过 CubeMX `.ioc` 文件重新生成代码,禁止手动修改 HAL 文件
- Keil 构建输出在 `MDK-ARM/STM32F103C8T6/`(已 gitignore
- CubeMX 生成的代码中,自定义代码必须放在 `/* USER CODE BEGIN */` 和 `/* USER CODE END */` 之间