3.9 KiB
3.9 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 驱动st7735s.c/h— 底层驱动(SPI通信、初始化、填充、画点)lcd.c/h— 绘图模块(字符/字符串、线条、矩形、圆形)lcd_data.c/h— ASCII 8×16 字库hz16_data.c/h— CJK 16×16 字库
STM32F103C8T6/Drivers/BSP/AT24C02/— AT24C02 EEPROM 驱动at24c02.c/h— I2C 读写(字节/页/连续,自动跨页)
STM32F103C8T6/User/— 用户应用代码menu.c/h— 菜单系统(LCD参数显示、按键调节、EEPROM存储)
硬件配置
- 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
- I2C1: PB8 (SCL), PB9 (SDA) — AT24C02 EEPROM
- 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
- TIM3: PA6~PB1 四路 1kHz PWM(PA6 CH1, PA7 CH2, PB0 CH3, PB1 CH4)
- TIM4: 仅做 ADC 触发源,TRGO=Update 输出至 ADC1(1kHz,无引脚占用)
- ADC1: IN0
IN3 (PA0PA3), 注入组, TIM4_TRGO 触发
初始化顺序(main.c)
HAL_Init → SystemClock_Config → MX_GPIO → MX_DMA → MX_USART1 → MX_SPI2
→ MX_TIM4 → MX_ADC1 → MX_TIM3 → MX_I2C1
→ button_driver_init() → st7735s_init() → lcd_* draw
→ TIM3 PWM start (PA6~PB1) → TIM4 Base start (TRGO→ADC) → ADC injected start
→ AT24C02 scan → menu_init()
CubeMX 生成代码注意事项
- TIM4_TRGO: CubeMX 已正确生成
TIM_TRGO_UPDATE(tim.c:125),无需手动写寄存器。若从.ioc重新生成,检查sMasterConfig.MasterOutputTrigger是否仍为TIM_TRGO_UPDATE。 - ADC 时钟: CubeMX 已通过 HAL 配置
RCC_ADCPCLK2_DIV6(adc.c:221),无需手动改RCC->CFGR。若重新生成,验证PeriphClkInit.AdcClockSelection是否为RCC_ADCPCLK2_DIV6(必须 ≤14MHz)。 - SPI2 模式: CubeMX 已配置 Mode 3(CPOL=HIGH, CPHA=2EDGE),见
spi.c:45-46。重新生成时确认CLKPolarity=HIGH, CLKPhase=2EDGE。
printf 无 MicroLIB
在 usart.c 的 USER CODE 区通过 #pragma import(__use_no_semihosting) + _sys_exit() + _ttywrch() + struct __FILE + FILE __stdout 实现。Keil 取消勾选 Use MicroLIB 即可。
LCD 字库生成(tools/font_gen.py)
- Python + Pillow,使用
python font_gen.py(Windows 下默认系统 Python) - 仅生成 CJK 字库,ASCII 字库
lcd_data.c已手动维护 - CJK 16×16(按需):
python tools/font_gen.py --cjk --string "你的汉字" --output STM32F103C8T6/Drivers/BSP/LCD/hz16_data- 默认参数:
--font simsun --size 48 --scale 3,Otsu 自适应阈值 - CJK 无等宽替代字体,必须用 simsun
- 默认参数:
- ASCII
_下划线手动设为0x7F(GDI 无法可靠提取)
代码规范
- 遵循:
嵌入式C语言代码规范(V1.0).md - 缩进: 4个空格,禁止Tab
- 命名: 小写+下划线;全局加
g_,静态加s_,指针加p_;宏大写+下划线;类型_t后缀 - 注释: 所有文档、注释、提交信息使用中文
- 禁止: goto、递归、可变参数函数、注释掉的代码提交
- CubeMX 代码: 自定义代码必须在
/* USER CODE BEGIN */和/* USER CODE END */之间;Drivers/下 HAL 源码禁止直接修改