STM32设置定时器溢出时间

STM32设置定时器溢出时间

源代码:

/*时基单元初始化*/
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;				//定义结构体变量
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;		//时钟分频,选择不分频,此参数用于配置滤波器时钟,不影响时基单元功能
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;	//计数器模式,选择向上计数
TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1;				//计数周期,即ARR的值
TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1;				//预分频器,即PSC的值
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;			//重复计数器,高级定时器才会用到
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);				//将结构体变量交给TIM_TimeBaseInit,配置TIM2的时基单元

定时器溢出定时时间公式:

image-20260909211304639

已知:
PSC = 7200 - 1 → $PSC+1 = 7200$
ARR = 10000 - 1 → $ARR+1 = 10000$
APB1定时器时钟(STM32F1,TIM2属于APB1):72MHz

image-20260909211407811

定时周期 = 1秒


TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1;      // ARR=9999,计数到9999就溢出
TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1;    // PSC=7199,72M / 7200 = 10000Hz 定时器计数频率

定时器计数频率 72000000 \ 7200 = 10000Hz,也就是1个计数脉冲=0.1ms
需要计数10000次才溢出:10000 * 0.1ms = 1000ms = 1s

这是定时器溢出更新事件的周期,如果你开启更新中断,就会每 1 秒进一次 TIM2 更新中断。


修改成1ms触发一次:

TIM_TimeBaseInitStructure.TIM_Period = 10 - 1;

PSC+1 = 7200
ARR+1 = 10
f_TIM = 72MHz

image-20260909211304639

image-20260909211812628
定时器计数频率:72M / 7200 = 10000 Hz → 1 个计数脉冲 = 0.1ms
ARR+1 = 10,数 10 个脉冲溢出:10 * 0.1ms = 1ms

posted @ 2026-09-09 21:19  Q&25  阅读(12)  评论(0)    收藏  举报