第一章 通俗类比:一分钟理解F4定时中断本质
1.1 生活闹钟类比(1:1对应F4硬件结构)
将STM32F407芯片拟人化,定时器为独立电子闹钟,CPU为主控核心,二者并行工作,无需CPU干预计数,对应结构如下:
•RCC时钟树:宿舍供电电源,给F4全部外设分配工作时钟
•定时器预分频器PSC:闹钟调速齿轮,把168MHz高频时钟降频为低速计数脉冲
•计数器CNT:闹钟秒针,硬件自动累加,无需CPU赋值
•自动重装载值ARR:闹钟响铃阈值,CNT计数到ARR数值立刻触发溢出
•UIF更新中断标志位:闹钟响铃标记,溢出后硬件自动置1
•NVIC嵌套中断控制器:中断调度中心,判断是否放行中断、判定中断优先级
•中断服务函数:CPU暂停主循环,执行的定时专属任务(点灯、计时、数据采集)
1.2 两种定时方式优劣对比(F4开发必懂)


第二章 STM32F407IGH6定时器架构与时钟规则
2.1 F407定时器分类(总线时钟F4独有规则,区别F1)
STM32F407总线分频规则和F1完全不同,这是新手配置定时报错、定时不准的核心原因,芯片默认配置:APB1预分频4、APB2预分频2。
F4硬性时钟倍频规则:若APB分频系数≠1,定时器时钟=对应总线时钟×2;分频系数=1,定时器时钟=总线原生时钟。

本文全程选用TIM2通用定时器(84MHz计数时钟)实操,适配F407IGH6全开发板。
2.2 定时核心:时基单元三大寄存器(中断源头)
所有定时中断,仅依靠PSC、CNT、ARR三个寄存器配合工作,F4通用定时器为16位寄存器,计数范围0~65535。
2.2.1 PSC预分频寄存器(分频减速)
作用:对定时器原始时钟降频,输出平稳计数脉冲,每一个脉冲CNT加1。
F4通用定时计数频率公式:Fcnt=Ftim/PSC+1
公式+1底层原因:寄存器写入数值从0开始计数,写入N实际分频N+1倍。
实操案例:TIM2时钟84MHz,想要100us计数一次,设定PSC=8399,计数频率=84M/(8399+1)=10KHz,每100us计数器自增1。
2.2.2 CNT计数器寄存器(硬件自增)
接收分频后的脉冲,硬件自动累加,全程无需CPU代码干预,支持向上计数、向下计数、中央对齐计数,本课默认使用向上计数模式(最简单常用)。
2.2.3 ARR自动重装载寄存器(溢出阈值)
向上计数模式规则:CNT从0开始累加,当CNT数值=ARR数值时,硬件同步触发三件事:
1.计数器CNT自动清零,重新开始计数
2.硬件自动置位TIM_SR寄存器UIF更新中断标志位
3.向外发起定时器更新中断请求
2.3 F407标准定时周期计算公式(必背)
定时中断溢出周期,也就是多久进一次中断服务函数,专属公式:
T=(PSC+1)×(ARR+1)/Ftim
实操计算:实现500ms定时中断,TIM2时钟84MHz,带入参数PSC=8399,ARR=4999,T=(8400×5000)/84000000=0.5s,每500ms进入一次定时中断。
第三章 F407定时中断八级完整流转(从时钟到代码执行)
全文核心章节,完整还原一次定时中断从上电到执行完毕、返回主循环的全流程,无跳步,直击底层硬件逻辑。
步骤1:RCC开启定时器外设时钟(前置必备)
F4外设默认断电休眠,必须代码开启总线时钟,否则定时器完全不工作。TIM2挂载APB1总线,需要开启APB1定时器时钟:HAL库函数__HAL_RCC_TIM2_CLK_ENABLE();标准库函数RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE)。
步骤2:配置定时器时基参数
配置计数模式、PSC预分频值、ARR重装载值、自动重载缓存。F4建议开启ARR预装载缓存,避免计数中途修改参数产生误中断,保证计数稳定。
步骤3:使能定时器更新中断
配置TIM_DIER中断使能寄存器,打开更新溢出中断开关,允许溢出事件发出中断信号;若不开启,只会置位UIF标志,不会触发中断跳转。
步骤4:配置NVIC中断优先级控制器
F4搭载增强型NVIC控制器,需要分组优先级、设置抢占优先级、子优先级,判定该中断是否可以打断其他中断,优先级配置错误会导致中断无法进入、中断嵌套紊乱。
步骤5:开启定时器计数器
配置TIM_CR1寄存器CEN计数使能位,硬件CNT计数器开始从零自动累加,CPU同步运行while(1)主程序,二者互不干扰。
步骤6:计数溢出,发起中断请求
CNT累加到ARR值,硬件自动清零CNT、置位UIF标志,中断信号送入NVIC,NVIC校验优先级通过后,向内核发送中断跳转指令。
步骤7:内核保存现场,跳转中断服务函数
CPU保存当前主程序寄存器数据(保护现场),暂停主循环代码,跳转到固定地址的定时器中断服务函数,执行用户编写的定时任务。
步骤8:清除中断标志,恢复现场
中断函数内软件清零UIF标志,避免重复触发中断;执行完毕后CPU恢复现场,回到while(1)主程序继续运行,等待下一次计数溢出。
第四章 STM32F407IGH6定时中断全套工程代码
工程配置:Keil5、固件库F4CubeFW、500ms定时中断、中断内翻转LED0,适配正点原子F407开发板。
4.1 HAL库 TIM2定时中断初始化代码(主流初学)

4.2 标准库TIM2中断核心代码

第五章 F407定时中断高频报错问题排查
5.1 中断完全无法进入(排名第一故障)
•故障原因1:未开启RCC定时器总线时钟,外设断电
•故障原因2:未开启TIM更新中断使能,仅开启定时器计数
•故障原因3:NVIC优先级未配置、全局中断关闭
5.2 定时时间不准、闪烁速度异常
•故障原因:套用F1分频公式,忽略F4 APB倍频规则,直接用42MHz计算
•解决办法:APB1分频4,通用定时器时钟固定为84MHz,必须用84MHz代入公式
5.3 进中断后程序死机
•故障原因:中断内未清零UIF标志位,重复进入中断
•禁忌:中断函数内禁止延时函数、printf大数据打印,占用中断时长
第六章 全文总结与学习复盘
6.1 F407定时中断核心要点复盘
1.硬件独立性:定时器属于片上外设,独立内核运行,计数不占用CPU资源
2.时钟核心:F407 APB1分频4,TIM2/3/4计数时钟固定84MHz,区别STM32F1
3.公式核心:定时周期由PSC、ARR共同决定,两个参数均需要+1计算
4.流程核心:开时钟→配时基→开中断→配NVIC→开计数→溢出中断→清标志
6.2 后续学习进阶方向
掌握基础更新中断后,可进阶学习定时器输入捕获、PWM波形输出、定时器DMA联动、多定时器优先级嵌套,适配电机驱动、串口波特率定时、高精度计时F4项目开发。
扫码申领本地嵌入式教学实录全套视频及配套源码