1. 项目概述与核心需求
在嵌入式系统开发中,如何利用低成本硬件实现高精度时钟显示一直是个有趣的话题。最近我完成了一个基于STM32F103C8T6和ILI9341 TFT屏的表盘时钟项目,它不仅实现了传统钟表的模拟显示效果,还具备RTC实时时钟和按键调时功能。这个项目特别适合作为嵌入式开发的入门实践,涵盖了SPI通信、图形绘制、RTC配置等多个关键知识点。
项目核心需求包括:
- 通过STM32的SPI接口驱动2.4寸ILI9341 TFT屏(320×240分辨率)
- 绘制包含12小时刻度和60分钟刻度的圆形表盘
- 实现时针、分针、秒针的平滑转动(精度±1秒)
- 基于STM32内部RTC模块实现时间保持(支持掉电走时)
- 通过三个按键实现时间设置功能(时/分/秒调整)
这个时钟的设计难点在于如何高效地在资源有限的STM32F103C8T6(仅64KB Flash和20KB RAM)上实现流畅的图形显示,同时保证时间精度。下面我将详细分享从硬件选型到软件实现的完整过程。
2. 硬件设计与关键组件选型
2.1 核心组件选型解析
选择适合的硬件组件是项目成功的基础。经过多次对比测试,我最终确定了以下配置方案:
主控芯片:STM32F103C8T6(Cortex-M3内核,72MHz主频)
- 选择理由:性价比极高(约10元/片),具备丰富外设(SPI、RTC等),社区资源丰富
- 关键参数:64KB Flash用于存储程序,20KB RAM用于运行时数据,完全满足本项目需求
显示屏:2.4寸ILI9341 TFT屏(320×240,16位色)
- 接口类型:SPI(相比并行接口节省引脚)
- 功耗:典型工作电流约50mA(3.3V供电)
- 特别注意:市场上ILI9341有不同版本,需确认支持SPI模式
RTC时钟源:STM32内部RTC+32.768kHz晶振
- 精度:常温下约±20ppm(即每天误差约±1.7秒)
- 优势:无需外接RTC芯片,简化电路设计
- 注意点:必须使用负载电容匹配的晶振(通常6pF)
按键电路:3个轻触按键(设置、加、减)
- 电路设计:上拉电阻(10kΩ)+ 软件消抖
- 布局建议:按键间距至少5mm,防止误触
电源方案:
- 输入:5V/1A DC(或3.7V锂电池+升压模块)
- 转换:AMS1117-3.3V LDO为MCU和TFT屏供电
- 实测功耗:全速运行约120mA(含TFT屏背光)
2.2 硬件连接细节与注意事项
硬件连接的正确性直接影响项目成败。以下是经过验证的可靠连接方案:
ILI9341 SPI接口连接:
| TFT引脚 | STM32引脚 | 注意事项 |
|---|---|---|
| SCK | PA5 | SPI1时钟线,需配置为复用推挽输出 |
| MOSI | PA7 | SPI1数据线,主机输出 |
| CS | PA4 | 片选信号,低电平有效 |
| DC | PA3 | 数据/命令选择(1=数据,0=命令) |
| RST | PA2 | 复位信号,低电平有效(上电需保持至少10ms低电平) |
| VCC | 3.3V | 必须稳定,建议加100μF+0.1μF去耦电容 |
| GND | GND | 确保共地 |
RTC晶振连接:
- OSC32_IN → PC14
- OSC32_OUT → PC15
- 关键点:晶振走线尽可能短,外壳接地,匹配电容选用6pF(具体值需参考晶振规格)
按键电路连接:
| 按键功能 | STM32引脚 | 电路设计 |
|---|---|---|
| 设置(SET) | PB0 | 10kΩ上拉,按键接地 |
| 加(ADD) | PB1 | 同上 |
| 减(SUB) | PB2 | 同上 |
重要提示:TFT屏的背光通常需要单独供电,部分屏幕背光电流较大(
