2024年1月15日发(作者:)

浅析STM32定时器TIM_Period和TIM_Prescaler

By:T7 Date:20180322

At:YSU-B307-2

1. //配置定时器基础结构体

2. TIM_DeInit(TIM2);

3. TIM__Period = (1000-1); //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到1000为1ms

4. TIM__Prescaler =(72-1); //设置用来作为TIMx时钟频率除数的预分频值 1M的计数频率 1US计数

5. TIM__ClockDivision=TIM_CKD_DIV1;//不分频

6. TIM__CounterMode = TIM_CounterMode_Up; //TIM向上计数模式

7. TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

8.

9. TIM_ClearFlag(TIM6, TIM_FLAG_Update); //清除更新中断,免得一打开中断立即产生中断

10. TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE); //打开定时器更新中断

11.

分析这段代码:

TIM__Period = 1000 – 1;

TIM__Prescaler = 72 – 1;

1. 定时时间T = 1000 * 72 / 72000 000 = 1ms

2. TIM_Prescaler = 72 – 1; t = 72 / 72000 000 = 1us,即TIMx->CNT每1us加一次

3. TIM_Period = 1000; 当TIMx->CNT计数值达到1000us(也就是一开始计算的定时时间1ms),进入中断服务函数,msHcCount将自动加一

-可编辑修改-

1. void TIM6_IRQHandler(void) //TIM3中断

2. {

3. if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否

4. {

5. TIM_ClearITPendingBit(TIM6, TIM_IT_Update ); //清除TIMx更新中断标志

6. msHcCount++;

7. }

}

4.当定时器停止工作时,总的定时时间为t =

msHcCount * 1000 + TIMx->CNT 单位是us。

-可编辑修改-

THANKS !!!

致力为企业和个人提供合同协议,策划案计划书,学习课件等等

打造全网一站式需求

欢迎您的下载,资料仅供参考

-可编辑修改-