打印
[应用相关]

STM32的通用定时器TIMx系统了解

[复制链接]
楼主: 雨果喝水
手机看帖
扫描二维码
随时随地手机跟帖
21
雨果喝水|  楼主 | 2022-4-29 22:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览

使用特权

评论回复
22
雨果喝水|  楼主 | 2022-4-29 22:30 | 只看该作者

使用特权

评论回复
23
雨果喝水|  楼主 | 2022-4-29 22:31 | 只看该作者

使用特权

评论回复
24
雨果喝水|  楼主 | 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请求),这是为了避免在发生捕获事件并清除计数器时,同时产生更新和捕获中断。

使用特权

评论回复
25
雨果喝水|  楼主 | 2022-4-29 22:33 | 只看该作者
当发生更新事件时,所有的寄存器都被更新,并且(根据URS位的设置)更新标志位(TIMx_SR寄存器中的UIF位)也被设置。

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

注:如果因为计数器溢出而产生更新,自动重装载将在计数器重载入之前被更新,因此下一个周期将是预期的值(计数器被装载为新的值)。

使用特权

评论回复
26
雨果喝水|  楼主 | 2022-4-29 22:34 | 只看该作者
以下是一些计数器在不同时钟频率下的操作的例子:

使用特权

评论回复
27
雨果喝水|  楼主 | 2022-4-29 22:34 | 只看该作者

使用特权

评论回复
28
雨果喝水|  楼主 | 2022-4-29 22:35 | 只看该作者

使用特权

评论回复
29
雨果喝水|  楼主 | 2022-4-29 22:35 | 只看该作者

使用特权

评论回复
30
雨果喝水|  楼主 | 2022-4-29 22:36 | 只看该作者

使用特权

评论回复
31
雨果喝水|  楼主 | 2022-4-29 22:36 | 只看该作者

使用特权

评论回复
32
雨果喝水|  楼主 | 2022-4-29 22:37 | 只看该作者
3.3 时钟选择

计数器时钟可由下列时钟源提供:
● 内部时钟(CK_INT)
● 外部时钟模式1 :外部输入脚(TIx)
● 外部时钟模式2:外部触发输入(ETR)
● 内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1 而作为另一个定时器Timer2的预分频器。

使用特权

评论回复
33
雨果喝水|  楼主 | 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提供。

使用特权

评论回复
34
雨果喝水|  楼主 | 2022-4-29 22:38 | 只看该作者
下图显示了控制电路和向上计数器在一般模式下,不带预分频器时的操作。

使用特权

评论回复
35
雨果喝水|  楼主 | 2022-4-29 22:39 | 只看该作者
3.3.2 外部时钟源模式1

  当TIMx_SMCR寄存器的SMS=111 时,此模式被选中。计数器可以在选定输入端的每个上升沿或下降沿计数。

使用特权

评论回复
36
雨果喝水|  楼主 | 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’,启动计数器

使用特权

评论回复
37
雨果喝水|  楼主 | 2022-4-29 22:41 | 只看该作者
当上升沿出现在TI2,计数器计数一次,且TIF标志被设置。在TI2的上升沿和计数器实际时钟之间的延时,取决于在TI2输入端的重新同步电路。

使用特权

评论回复
38
雨果喝水|  楼主 | 2022-4-29 22:42 | 只看该作者
3.3.3 外部时钟源模式2

  选定此模式的方法为:令TIMx_SMCR寄存器中的ECE=1  
计数器能够在外部触发ETR的每一个上升沿或下降沿计数(下图是外部触发输入的框图)

使用特权

评论回复
39
雨果喝水|  楼主 | 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上升沿计数一次。

使用特权

评论回复
40
雨果喝水|  楼主 | 2022-4-29 22:44 | 只看该作者
在ETR的上升沿和计数器实际时钟之间的延时取决于在ETRP信号端的重新同步电路。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则