浅析STM32定时器TIM-Period和TIM-Prescaler-20180322
- 格式:docx
- 大小:23.96 KB
- 文档页数:3
浅析STM32定时器TIM_Period和TIM_Prescaler
By:T7 Date:20180322
At:YSU-B307-2
1.//配置定时器基础结构体
2.TIM_DeInit(TIM2);
3.TIM_TimeBaseStructure.TIM_Period=(1000-1);//设置在下一个更新事件装入活动
的自动重装载寄存器周期的值计数到1000为1ms
4.TIM_TimeBaseStructure.TIM_Prescaler=(72-1);//设置用来作为TIMx时钟频率除
数的预分频值1M的计数频率1US计数
5.TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//不分频
6.TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//TIM向
上计数模式
7.TIM_TimeBaseInit(TIM6,&TIM_TimeBaseStructure);//根据TIM_TimeBaseInitStr
uct中指定的参数初始化TIMx的时间基数单位
8.
9.TIM_ClearFlag(TIM6,TIM_FLAG_Update);//清除更新中断,免得一打开中断立即
产生中断
10.TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);//打开定时器更新中断
11.
分析这段代码:
TIM_TimeBaseStructure.TIM_Period = 1000 – 1;
TIM_TimeBaseStructure.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 !!!
致力为企业和个人提供合同协议,策划案计划书,学习课件等等
打造全网一站式需求
欢迎您的下载,资料仅供参考