打印
[应用相关]

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

[复制链接]
楼主: 雨果喝水
手机看帖
扫描二维码
随时随地手机跟帖
41
雨果喝水|  楼主 | 2022-4-29 22:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
下图显示了控制电路和向上计数器在一般模式下,不带预分频器时的操作。

使用特权

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

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

使用特权

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

使用特权

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

使用特权

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

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

使用特权

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

使用特权

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

使用特权

评论回复
48
雨果喝水|  楼主 | 2022-4-29 22:45 | 只看该作者
3.4 捕获/比较通道

  每一个捕获/比较通道都是围绕着一个捕获/比较寄存器(包含影子寄存器),包括捕获的输入部分(数字滤波、多路复用和预分频器),和输出部分(比较器和输出控制)。(下面几张图是一个捕获/比较通道概览。)
  输入部分对相应的TIx输入信号采样,并产生一个滤波后的信号TIxF。然后,一个带极性选择的边缘检测器产生一个信号(TIxFPx),它可以作为从模式控制器的输入触发或者作为捕获控制。该信号通过预分频进入捕获寄存器(ICxPS)。

使用特权

评论回复
49
雨果喝水|  楼主 | 2022-4-29 22:45 | 只看该作者
输出部分产生一个中间波形OCxRef(高有效)作为基准,链的末端决定最终输出信号的极性。

使用特权

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

使用特权

评论回复
51
雨果喝水|  楼主 | 2022-4-29 22:47 | 只看该作者
捕获/比较模块由一个预装载寄存器和一个影子寄存器组成。读写过程仅操作预装载寄存器。
在捕获模式下,捕获发生在影子寄存器上,然后再复制到预装载寄存器中。
在比较模式下,预装载寄存器的内容被复制到影子寄存器中,然后影子寄存器的内容和计数器进行比较。

使用特权

评论回复
52
雨果喝水|  楼主 | 2022-4-29 22:47 | 只看该作者
3.5 输入捕获模式

  在输入捕获模式下,当检测到ICx信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄存器(TIMx_CCRx)中。当捕获事件发生时,相应的CCxIF标志(TIMx_SR寄存器)被置’1’,如果使能了中断或者DMA操作,则将产生中断或者DMA操作。如果捕获事件发生时CCxIF标志已经为高,那么重复捕获标志CCxOF(TIMx_SR寄存器)被置’1’。写CCxIF=0可清除CCxIF,或读取存储在TIMx_CCRx寄存器中的捕获数据也可清除CCxIF。写CCxOF=0可清除CCxOF。

使用特权

评论回复
53
雨果喝水|  楼主 | 2022-4-29 22:48 | 只看该作者
以下例子说明如何在TI1 输入的上升沿时捕获计数器的值到TIMx_CCR1 寄存器中,步骤如下:

● 选择有效输入端: TIMx_CCR1 必须连接到TI1 输入,所以写入TIMx_CCR1 寄存器中的CC1S=01 ,只要CC1S不为’00’,通道被配置为输入,并且TM1_CCR1 寄存器变为只读。
● 根据输入信号的特点,配置输入滤波器为所需的带宽(即输入为TIx时,输入滤波器控制位是TIMx_CCMRx寄存器中的ICxF位)。假设输入信号在最多5个内部时钟周期的时间内抖动,我们须配置滤波器的带宽长于5个时钟周期。因此我们可以(以fDTS频率)连续采样8次,以确认在TI1 上一次真实的边沿变换,即在TIMx_CCMR1 寄存器中写入IC1F=0011 。
● 选择TI1 通道的有效转换边沿,在TIMx_CCER寄存器中写入CC1P=0(上升沿)。
● 配置输入预分频器。在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预分频器被禁止(写TIMx_CCMR1 寄存器的IC1PS=00)。
● 设置TIMx_CCER寄存器的CC1E=1 ,允许捕获计数器的值到捕获寄存器中。
● 如果需要,通过设置TIMx_DIER寄存器中的CC1IE位允许相关中断请求,通过设置TIMx_DIER寄存器中的CC1DE位允许DMA请求。
当发生一个输入捕获时:
● 产生有效的电平转换时,计数器的值被传送到TIMx_CCR1 寄存器。
● CC1IF标志被设置(中断标志)。当发生至少2个连续的捕获时,而CC1IF未曾被清除,CC1OF也被置’1’。
● 如设置了CC1IE位,则会产生一个中断。
● 如设置了CC1DE位,则还会产生一个DMA请求。

使用特权

评论回复
54
雨果喝水|  楼主 | 2022-4-29 22:49 | 只看该作者
为了处理捕获溢出,建议在读出捕获溢出标志之前读取数据,这是为了避免丢失在读出捕获溢出标志之后和读取数据之前可能产生的捕获溢出信息。

注:设置TIMx_EGR寄存器中相应的CCxG位,可以通过软件产生输入捕获中断和/或DMA请求。

使用特权

评论回复
55
雨果喝水|  楼主 | 2022-4-29 22:55 | 只看该作者
3.6 PWM输入模式

  该模式是输入捕获模式的一个特例,除下列区别外,操作与输入捕获模式相同:

● 两个ICx信号被映射至同一个TIx输入。
● 这2个ICx信号为边沿有效,但是极性相反。
● 其中一个TIxFP信号被作为触发输入信号,而从模式控制器被配置成复位模式。
例如,你需要测量输入到TI1 上的PWM信号的长度(TIMx_CCR1 寄存器)和占空比(TIMx_CCR2寄存器),具体步骤如下(取决于CK_INT的频率和预分频器的值)
● 选择TIMx_CCR1 的有效输入:置TIMx_CCMR1 寄存器的CC1S=01(选择TI1)。
● 选择TI1FP1 的有效极性(用来捕获数据到TIMx_CCR1 中和清除计数器):置CC1P=0(上升沿有效)。
● 选择TIMx_CCR2的有效输入:置TIMx_CCMR1 寄存器的CC2S=10(选择TI1)。
● 选择TI1FP2的有效极性(捕获数据到TIMx_CCR2):置CC2P=1(下降沿有效)。
● 选择有效的触发输入信号:置TIMx_SMCR寄存器中的TS=101(选择TI1FP1)。
● 配置从模式控制器为复位模式:置TIMx_SMCR中的SMS=100。
● 使能捕获:置TIMx_CCER寄存器中CC1E=1 且CC2E=1 。

由于只有 TI1FP1 和 TI2FP2 连到了从模式控制器,所以 PWM 输入模式只能使用 TIMx_CH1/TIMx_CH2信号。

使用特权

评论回复
56
雨果喝水|  楼主 | 2022-4-29 22:55 | 只看该作者
3.7 强置输出模式

  在输出模式(TIMx_CCMRx寄存器中 CCxS=00)下,输出比较信号(OCxREF和相应的OCx)能够直接由软件强置为有效或无效状态,而不依赖于输出比较寄存器和计数器间的比较结果。
  置TIMx_CCMRx寄存器中相应的OCxM=101 ,即可强置输出比较信号(OCxREF/OCx)为有效状态。这样OCxREF被强置为高电平(OCxREF始终为高电平有效),同时OCx得到CCxP极性位相反的值。
  例如: CCxP=0(OCx高电平有效),则OCx被强置为高电平。
  置TIMx_CCMRx寄存器中的OCxM=100,可强置OCxREF信号为低。
  该模式下,在TIMx_CCRx影子寄存器和计数器之间的比较仍然在进行,相应的标志也会被修改。因此仍然会产生相应的中断和DMA请求。这将会在下面的输出比较模式一节中介绍。

使用特权

评论回复
57
雨果喝水|  楼主 | 2022-4-29 22:56 | 只看该作者
3.8 输出比较模式

  此项功能是用来控制一个输出波形,或者指示一段给定的的时间已经到时。

  当计数器与捕获/比较寄存器的内容相同时,输出比较功能做如下操作:

● 将输出比较模式(TIMx_CCMRx寄存器中的OCxM位)和输出极性(TIMx_CCER寄存器中的CCxP位)定义的值输出到对应的引脚上。在比较匹配时,输出引脚可以保持它的电平(OCxM=000)、被设置成有效电平(OCxM=001)、被设置成无效电平(OCxM=010)或进行翻转(OCxM=011)。
● 设置中断状态寄存器中的标志位(TIMx_SR寄存器中的CCxIF位)。
● 若设置了相应的中断屏蔽(TIMx_DIER寄存器中的CCxIE位),则产生一个中断。
● 若设置了相应的使能位(TIMx_DIER寄存器中的CCxDE位, TIMx_CR2寄存器中的CCDS位选择DMA请求功能),则产生一个DMA请求。

使用特权

评论回复
58
雨果喝水|  楼主 | 2022-4-29 22:56 | 只看该作者
TIMx_CCMRx中的OCxPE位选择TIMx_CCRx寄存器是否需要使用预装载寄存器。
  在输出比较模式下,更新事件UEV对OCxREF和OCx输出没有影响。
  同步的精度可以达到计数器的一个计数周期。输出比较模式(在单脉冲模式下)也能用来输出一个单脉冲。
  输出比较模式的配置步骤:

1. 选择计数器时钟(内部,外部,预分频器)
2. 将相应的数据写入TIMx_ARR和TIMx_CCRx寄存器中
3. 如果要产生一个中断请求和/或一个DMA请求,设置CCxIE位和/或CCxDE位。
4. 选择输出模式,例如当计数器CNT与CCRx匹配时翻转OCx的输出引脚, CCRx预装载未用,开启 OCx输出且高电平有效,则必须设置OCxM=’011’、 OCxPE=’0’、 CCxP=’0’和CCxE=’1’。
5. 设置TIMx_CR1 寄存器的CEN位启动计数器

  TIMx_CCRx寄存器能够在任何时候通过软件进行更新以控制输出波形,条件是未使用预装载寄存器(OCxPE=’0’,否则TIMx_CCRx影子寄存器只能在发生下一次更新事件时被更新)。下图给
出了一个例子。

使用特权

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

使用特权

评论回复
60
雨果喝水|  楼主 | 2022-4-29 23:00 | 只看该作者
3.9 PWM 模式

脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。

  在TIMx_CCMRx寄存器中的OCxM位写入’110’(PWM模式1)或’111’(PWM模式2),能够独立地设置每个OCx输出通道产生一路PWM。必须设置TIMx_CCMRx寄存器OCxPE位以使能相应的预装载寄存器,最后还要设置TIMx_CR1 寄存器的ARPE位, (在向上计数或中心对称模式中)使能自动重装载的预装载寄存器。

  仅当发生一个更新事件的时候,预装载寄存器才能被传送到影子寄存器,因此在计数器开始计数之前,必须通过设置TIMx_EGR寄存器中的UG位来初始化所有的寄存器。
  OCx的极性可以通过软件在TIMx_CCER寄存器中的CCxP位设置,它可以设置为高电平有效或低电平有效。 TIMx_CCER寄存器中的CCxE位控制OCx输出使能。

  在PWM模式(模式1 或模式2)下, TIMx_CNT和TIMx_CCRx始终在进行比较, (依据计数器的计数方向 ) 以确 定是否符合 TIMx_CCRx≤ TIMx_CNT 或者 TIMx_CNT ≤ TIMx_CCRx 。然而为了与
OCREF_CLR的功能(在下一个PWM周期之前,ETR信号上的一个外部事件能够清除OCxREF)一致,OCxREF信号只能在下述条件下产生:

● 当比较的结果改变
● 当输出比较模式(TIMx_CCMRx寄存器中的OCxM位)从“冻结” (无比较, OCxM=’000’)切换到某个PWM模式(OCxM=’110’或’111’)

  这样在运行中可以通过软件强置PWM输出。根据TIMx_CR1 寄存器中 CMS位的状态,定时器能够产生边沿对齐的PWM信号或中央对齐的PWM信号。

使用特权

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

本版积分规则