STM32定时器的定时周期
程序员文章站
2022-06-08 19:57:34
...
定时器原理框图
计时周期
计时周期由以下几个因素决定:
1,时钟频率。
一般为72MHz。
2,预分频系数PSC
计数器的时钟频率CK_CNT等于f CK_PSC /(PSC[15:0]+1)。
如果想要72分频,则PSC寄存器的值应该为71.
3,自动重装载寄存器。
这里也要注意:在设置ARR寄存器时,也需要减去一。
如果想要定时1000个周期,则寄存器的值应该设置为999.
看手册中的例子:当ARR为0x36时,计数器序列为00~36,共37个值。
使用Event Recorder验证
定时器配置
主要参数:外设频率72M,72分频后得到1M;定时周期为1000个时钟。
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
//
// 初始化定时器时基
//设置预分频值,分频后为1M
TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1;
//设置自动重装载周期值
TIM_TimeBaseStructure.TIM_Period = 1000;
//设置时钟分割:TDTS=Tck_tim
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
//TIM向上计数模式
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
//初始化时基
TIM_TimeBaseInit(ADC_TIMER_FOR_CURR, &TIM_TimeBaseStructure);
每1000个中断的时间为1秒,记录一次事件。
Event Recorder初始化
使用以下代码初始化:
#include "EventRecorder.h"
// initialize and start Event Recorder
EventRecorderInitialize(EventRecordAll, 1U);
EventRecorderStart();
添加事件记录
EventRecord2(1, 2, 3);
验证结果
计时周期是1.001秒。
更改代码,将ARR的值配置为999:
//设置自动重装载周期值
TIM_TimeBaseStructure.TIM_Period = 1000 - 1;
这次结果就对了:
完美!