[应用相关] STM32的通用定时器TIMx系统了解

[复制链接]
3518|77
 楼主| 雨果喝水 发表于 2022-4-29 22:29 | 显示全部楼层
 楼主| 雨果喝水 发表于 2022-4-29 22:30 | 显示全部楼层
 楼主| 雨果喝水 发表于 2022-4-29 22:31 | 显示全部楼层
 楼主| 雨果喝水 发表于 2022-4-29 22:32 | 显示全部楼层
3.2.3 中央对齐模式(向上/向下计数)

  在中央对齐模式,计数器从0开始计数到自动加载的值(TIMx_ARR寄存器)−1 ,产生一个计数器溢出事件,然后向下计数到1 并且产生一个计数器下溢事件;然后再从0开始重新计数。
  在这个模式,不能写入TIMx_CR1 中的DIR方向位。它由硬件更新并指示当前的计数方向。可以在每次计数上溢和每次计数下溢时产生更新事件;也可以通过(软件或者使用从模式控制器)设置TIMx_EGR寄存器中的UG位产生更新事件。然后,计数器重新从0开始计数,预分频器也重新从0开始计数。
  设置TIMx_CR1 寄存器中的UDIS位可以禁止UEV事件。这样可以避免在向预装载寄存器中写入新值时更新影子寄存器。因此UDIS位被清为’0’之前不会产生更新事件。然而,计数器仍会根据当前自动重加载的值,继续向上或向下计数。
  此外,如果设置了 TIMx_CR1 寄存器中的URS位(选择更新请求) ,设置UG位将产生一个更新事件UEV但不设置UIF标志(因此不产生中断和DMA请求),这是为了避免在发生捕获事件并清除计数器时,同时产生更新和捕获中断。
 楼主| 雨果喝水 发表于 2022-4-29 22:33 | 显示全部楼层
当发生更新事件时,所有的寄存器都被更新,并且(根据URS位的设置)更新标志位(TIMx_SR寄存器中的UIF位)也被设置。

● 预分频器的缓存器被加载为预装载(TIMx_PSC寄存器)的值。
● 当前的自动加载寄存器被更新为预装载值(TIMx_ARR寄存器中的内容)。

注:如果因为计数器溢出而产生更新,自动重装载将在计数器重载入之前被更新,因此下一个周期将是预期的值(计数器被装载为新的值)。
 楼主| 雨果喝水 发表于 2022-4-29 22:34 | 显示全部楼层
以下是一些计数器在不同时钟频率下的操作的例子:
26353626bf75e77273.png
 楼主| 雨果喝水 发表于 2022-4-29 22:34 | 显示全部楼层
 楼主| 雨果喝水 发表于 2022-4-29 22:35 | 显示全部楼层
 楼主| 雨果喝水 发表于 2022-4-29 22:35 | 显示全部楼层
 楼主| 雨果喝水 发表于 2022-4-29 22:36 | 显示全部楼层
 楼主| 雨果喝水 发表于 2022-4-29 22:36 | 显示全部楼层
 楼主| 雨果喝水 发表于 2022-4-29 22:37 | 显示全部楼层
3.3 时钟选择

计数器时钟可由下列时钟源提供:
● 内部时钟(CK_INT)
● 外部时钟模式1 :外部输入脚(TIx)
● 外部时钟模式2:外部触发输入(ETR)
● 内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1 而作为另一个定时器Timer2的预分频器。
 楼主| 雨果喝水 发表于 2022-4-29 22:38 | 显示全部楼层
3.3.1 内部时钟源(CK_INT)

  如果禁止了从模式控制器(TIMx_SMCR寄存器的SMS=000),则CEN、 DIR(TIMx_CR1 寄存器)和UG位(TIMx_EGR寄存器)是事实上的控制位,并且只能被软件修改(UG位仍被自动清除)。只
要CEN位被写成’1’,预分频器的时钟就由内部时钟CK_INT提供。
 楼主| 雨果喝水 发表于 2022-4-29 22:38 | 显示全部楼层
下图显示了控制电路和向上计数器在一般模式下,不带预分频器时的操作。
79450626bf872bdde1.png
 楼主| 雨果喝水 发表于 2022-4-29 22:39 | 显示全部楼层
3.3.2 外部时钟源模式1

  当TIMx_SMCR寄存器的SMS=111 时,此模式被选中。计数器可以在选定输入端的每个上升沿或下降沿计数。
9151626bf8956a54d.png
 楼主| 雨果喝水 发表于 2022-4-29 22:40 | 显示全部楼层
例如,要配置向上计数器在T12输入端的上升沿计数,使用下列步骤:

1. 配置TIMx_CCMR1 寄存器CC2S=’01’,配置通道2检测TI2输入的上升沿
2. 配置TIMx_CCMR1 寄存器的IC2F[3:0],选择输入滤波器带宽(如果不需要滤波器,保持IC2F=0000)
注: 捕获预分频器不用作触发,所以不需要对它进行配置
3. 配置TIMx_CCER寄存器的CC2P=’0’,选定上升沿极性
4. 配置TIMx_SMCR寄存器的SMS=’111’,选择定时器外部时钟模式1
5. 配置TIMx_SMCR寄存器中的TS=’110’,选定TI2作为触发输入源
6. 设置TIMx_CR1 寄存器的CEN=’1’,启动计数器
 楼主| 雨果喝水 发表于 2022-4-29 22:41 | 显示全部楼层
当上升沿出现在TI2,计数器计数一次,且TIF标志被设置。在TI2的上升沿和计数器实际时钟之间的延时,取决于在TI2输入端的重新同步电路。

61059626bf8f51487a.png
 楼主| 雨果喝水 发表于 2022-4-29 22:42 | 显示全部楼层
3.3.3 外部时钟源模式2

  选定此模式的方法为:令TIMx_SMCR寄存器中的ECE=1  
计数器能够在外部触发ETR的每一个上升沿或下降沿计数(下图是外部触发输入的框图)
5693626bf921ec384.png
 楼主| 雨果喝水 发表于 2022-4-29 22:43 | 显示全部楼层
例如,要配置在ETR下每2个上升沿计数一次的向上计数器,使用下列步骤:
1. 本例中不需要滤波器,置TIMx_SMCR寄存器中的ETF[3:0]=0000
2. 设置预分频器,置TIMx_SMCR寄存器中的ETPS[1:0]=01
3. 设置在ETR的上升沿检测,置TIMx_SMCR寄存器中的ETP=0
4. 开启外部时钟模式2,置TIMx_SMCR寄存器中的ECE=1
5. 启动计数器,置TIMx_CR1 寄存器中的CEN=1

  计数器在每2个ETR上升沿计数一次。
 楼主| 雨果喝水 发表于 2022-4-29 22:44 | 显示全部楼层
在ETR的上升沿和计数器实际时钟之间的延时取决于在ETRP信号端的重新同步电路。
9160626bf9b04653a.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部