1. STM32智能手表系统架构解析
这个基于STM32的智能手表系统采用了经典的中断驱动+状态机设计模式,完美体现了嵌入式系统"低功耗、高实时性"的核心思想。整个系统围绕TIM2定时器构建,以1ms为基准时钟,实现了按键扫描、时钟更新、游戏逻辑等多任务协同工作。
系统架构分为三个核心层次:
- 硬件驱动层:OLED显示、定时器、按键等外设初始化
- 中断服务层:TIM2定时中断处理高频任务
- 应用逻辑层:主循环中的状态机管理页面切换
1.1 定时器系统设计原理
TIM2定时器的配置是整个系统的心跳来源。在STM32中,定时器的时钟频率由APB1总线决定(默认72MHz),通过预分频器(PSC)和自动重载寄存器(ARR)实现精确计时。
计算过程:
- 系统时钟:72MHz
- 预分频系数:720 → 定时器时钟=72MHz/720=100kHz
- 计数周期:100 → 定时周期=100kHz/100=1ms
关键细节:
c复制TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1; // 实际写入PSC寄存器的是719
TIM_TimeBaseInitStructure.TIM_Period = 100 - 1; // 实际写入ARR寄存器的是99
这里必须减1是因为STM32的计数器从0开始计数,当计数器值等于ARR时触发更新事件。所以实际计数次数是ARR+1次。
1.2 中断优先级配置技巧
NVIC中断控制器配置采用了分组2模式:
c复制NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 2位抢占优先级,2位响应优先级
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; // 可被更高优先级中断打断
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 同优先级中较高响应顺序
这种配置保证了:
- 定时器中断可以被紧急任务(如硬件故障检测)打断
- 在同优先级中断中,定时器能获得较快响应
- 为其他重要外设(如USART、ADC)保留了足够的优先级
