跳转到主要内容

STM32定时器基本原理

<font size="4" color="blue"><strong>一、STM32定时器</strong></font>

STM32中定时器可分为高级定时器、通用定时器、基本定时器三类,他们都是由一个可编程的16位预分频器(TIMX_PSC)驱动的16位自动装载计数器(TIMX_CNT)构成。这三种定时器的区别如下:

<center><img width="600" src="http://mcu.eetrend.com/files/2021-01/wen_zhang_/100061222-120322-11.png…; alt=""></center><br>

<font size="4" color="blue"><strong>二、通用定时器</strong></font>

<strong>1、通用定时器的功能特点</strong>

① 位于低速的APB1总线上(APB1)

② 16 位向上、向下、向上/向下(中心对齐)计数模式,自动装载计数器(TIMx_CNT)。

③ 16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~65535 之间的任意数值。

④ 4 个独立通道(TIMx_CH1~4),这些通道可以用来作为:
<ul><li>输入捕获 </li>
<li>输出比较</li>
<li>PWM 生成(边缘或中间对齐模式) </li>
<li>单脉冲模式输出 </li></ul>

⑤ 可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外一个定时器)的同步电路。

<strong>2、可产生中断或DMA的事件</strong>

① 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
② 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
③ 输入捕获
④ 输出比较
⑤ 支持针对定位的增量(正交)编码器和霍尔传感器电路
⑥ 触发输入作为外部时钟或者按周期的电流管理

<strong>3、计数器模式</strong>

1、向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件。

2、向下计数模式:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。

3、中央对齐模式(向上/向下计数):计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。

<center><img width="600" src="http://mcu.eetrend.com/files/2021-01/wen_zhang_/100061222-120323-12.png…; alt=""></center><br>

<strong>4、工作过程</strong>

在选定的时钟源(可以是内部的也可以是外部的)和预分频器TIMX_PSC的驱动下,根据设置的计数模式(向上、向下、中央对齐)自动

装载计数器TIMX_CNT开始计数;如果使能了相应的事件(更新事件、触发事件、输入捕获、输出比较)则会产生相应的中断

<ul><li>如果没有开启输入和输出,只使能了计数器计数溢出后自动装载,可以做为一个简单定时器使用,计数器自己开始周期计数</li></ul>
<ul><li>如果开启了通道输入捕获,当检测到ICx信号上相应的边沿后,计数器(CNT)的当前值被锁存到捕获/比较寄存器(TIMx_CCRx)中,通过中断的方式可以读取出来假设为 n1,然后更改输入捕获的信号级性(上升沿或下降沿),当再次检测到ICx信号上相应的边沿后,计数器(CNT)的当前值再次被锁存到捕获/比较寄存器(TIMx_CCRx)中假设为 n2;n2 -n1节可算出电平的持续时间</li></ul>
<ul><li>如果开启了输出控制,可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的PWM信号。</li></ul>
<ul><li>如果选择外部的同步时钟信号(TI1F_ED、TI1FP1、TI2FP2)作为计数器的时钟源,可以用来统计脉冲,实现脉冲频率采集功能</li></ul>

<center><img width="600" src="http://mcu.eetrend.com/files/2021-01/wen_zhang_/100061222-120324-13.png…; alt=""></center><br>

<strong>5、计数器时钟源选择</strong>

<center><img width="600" src="http://mcu.eetrend.com/files/2021-01/wen_zhang_/100061222-120325-14.png…; alt=""></center><br>

内部时钟(CK_INT)

<center><img width="600" src="http://mcu.eetrend.com/files/2021-01/wen_zhang_/100061222-120326-15.png…; alt=""></center><br>

外部时钟模式1:外部输入脚(TIx)

<center><img width="600" src="http://mcu.eetrend.com/files/2021-01/wen_zhang_/100061222-120328-16.png…; alt=""></center><br>

外部时钟模式2:外部触发输入(ETR)

<center><img width="600" src="http://mcu.eetrend.com/files/2021-01/wen_zhang_/100061222-120327-17.png…; alt=""></center><br>

内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器

<strong>6、计数器时基单元</strong>

<center><img width="600" src="http://mcu.eetrend.com/files/filefield_paths/18_0.png&quot; alt=""></center><br>

<strong>7、定时器同步</strong>

<center><img width="600" src="http://mcu.eetrend.com/files/2021-01/wen_zhang_/100061222-120330-19.png…; alt=""></center><br>

所有TIMx定时器在内部相连,用于定时器同步或链接。当一个定时器处于主模式时,它可以对另一个处于从模式的定时器的计数器进行复

位、启动、停止或提供时钟等操作。定时器同步在实际使用中很少使用到,但是在CubeMX配置时会有Trigger Output(TRGO)

Parameters 配置项,所以还是需要搞清楚是干嘛用的。

主/从定时器使用场景:
<ul><li>使用一个定时器作为另一个定时器的预分频器</li>
<li>使用一个定时器使能另一个定时器</li>
<li>使用一个定时器去启动另一个定时器</li>
<li>使用一个定时器作为另一个的预分频器</li>
<li>使用一个外部触发同步地启动2个定时器</li></ul>

在 控制寄存器2(TIMx_CR2)中的MMS[2:0]主模式选择 (Master mode selection):专门选择在主模式下送到从定时器的同步信息

(TRGO)

<center><img width="600" src="http://mcu.eetrend.com/files/2021-01/wen_zhang_/100061222-120331-20.png…; alt=""></center><br>

版权声明:本文为CSDN博主(hurryddd)原创文章,遵循<a href="http://creativecommons.org/licenses/by-sa/4.0/&quot; target="_blank" rel="noopener"> CC 4.0 BY-SA </a>版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_37845735/article/details/105395643