欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STM32定时器的定时周期

程序员文章站 2022-06-08 19:57:34
...

定时器原理框图

STM32定时器的定时周期

计时周期

计时周期由以下几个因素决定:

1,时钟频率。

一般为72MHz。

 

2,预分频系数PSC

STM32定时器的定时周期

计数器的时钟频率CK_CNT等于f CK_PSC /(PSC[15:0]+1)。

如果想要72分频,则PSC寄存器的值应该为71.

 

3,自动重装载寄存器。

STM32定时器的定时周期

这里也要注意:在设置ARR寄存器时,也需要减去一。

如果想要定时1000个周期,则寄存器的值应该设置为999.

 

看手册中的例子:当ARR为0x36时,计数器序列为00~36,共37个值。

STM32定时器的定时周期

 

使用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秒。

STM32定时器的定时周期

 

更改代码,将ARR的值配置为999:

    //设置自动重装载周期值
    TIM_TimeBaseStructure.TIM_Period = 1000 - 1;
 

这次结果就对了:

STM32定时器的定时周期

完美!