STM32定时器时间设定及计算简单易懂解析

玩了一段时间STM32,没有经过系统学习,对这个定时器定时时间计算理解很懵懂!
如下面定时器初始化代码

void timer7_init(u16 clock,u16 Preiod)//void timer7_init(84,5000)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7,ENABLE); 
    TIM_DeInit(TIM7);
    /*TIM_Period=自动装载值,TIM_Prescaler=预分频值*/
    TIM_TimeBaseStructure.TIM_Period = Preiod - 1;  //5000定时器预分频器
    TIM_TimeBaseStructure.TIM_Prescaler = clock - 1;  //84 预分频值
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //时钟频率不分频
    /*TIM_CounterMode:定时器计数方式,可为向上计数、向下计数以及中心对齐模式*/
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM7,&TIM_TimeBaseStructure);
    TIM_ClearFlag(TIM7,TIM_FLAG_Update);
    TIM_ITConfig(TIM7,TIM_IT_Update,ENABLE);
    TIM_Cmd(TIM7,ENABLE);  
}	

TIM_Period=自动装载值
TIM_Prescaler=预分频值
定时时间计算:
定时时间=(TIM_Period)X(TIM_Prescaler)/Timer clocks(定时器时钟频率)
假如:TIM_Period=5000,TIM_Prescaler=84,Timer clocks=84Mhz
(5000X84)/84=5000us=5ms
对定时器时间设定可以理解为:
假如你需要定时1MS,TIM_Period(自动装载值)设定为1000,也就是1000us,
TIM_Prescaler(预分频值)设定与Timer clocks(定时器时钟频率)相同就行,比如
定时器时钟频率是84,TIM_Prescaler(预分频值)设定为84就行。

物联沃分享整理
物联沃-IOTWORD物联网 » STM32定时器时间设定及计算简单易懂解析

发表评论