STM32——通用计时器
通用计时器框图
1.时钟源
1)内部时钟(CK_INT)
2)外部时钟模式 1:外部输入引脚(TIx),x=1,2(即只能来自于通道 1 或者通道 2)
3)外部时钟模式 2:外部触发输入(ETR)
4)内部触发输入(ITRx):使用一个定时器作为另一定时器的预分频器
1.1.外部时钟模式 1(TI1、TI2)
外部时钟源进入定时器的流程以通道2为例:
1)外部时钟源信号→IO→TIMx_CH1(或者 TIMx_CH2),其中,外部时钟模式 1 下,时钟源信号只能从 CH1 或者 CH2 输入到定时器,CH3 和 CH4 都是不可以的。
2)TI2 首先经过一个滤波器,由 ICF[3:0]位来设置滤波方式,也可以设置不使用滤波器。
3)接着经过边沿检测器,由 CC2P 位来设置检测的边沿,可以上升沿或者下降沿检测。
4)然后经过触发输入选择器,由 TS[4:0]位来选择 TRGI(触发输入信号)的来源。 TI1F_ED、TI1FP1 和 TI2FP2 三个触发输入信号(TRGI),
5)最后经过模式选择器,由 ECE 位和 SMS[2:0]位来选择定时器的时钟源。外部时钟模式 1,ECE 位置 0,SMS[2:0] = 111。
6)CK_PSC 需要经过定时器的预分频器分频后,最终就能到达计数器进行计数了。
1.2.外部时钟模式 2(ETR)
1)外部时钟源信号→IO→TIMx_ETR,需配置 IO 的复用功能,才能使IO 和定时器相连通
2)经过外部触发极性选择器,由 ETP 位来设置上升沿有效还是下降沿有效,选择下降沿有效的话,信号会经过反相器。
3)然后经过外部触发预分频器,由 ETPS[1:0]位来设置预分频系数,系数范围:1、2、4、8。
4)紧接着经过滤波器器,由 ETF[3:0]位来设置滤波方式,也可以设置不使用滤波器。fDTS 由TIMx_CR1 寄存器的 CKD 位设置。
5)从模式选择器,由 ECE 位置 0和 SMS[2:0]位来选择定时器的时钟源
6)CK_PSC 需要经过定时器的预分频器分频后,最终就能到达计数器进行计数了
1.3.内部触发输入(ITRx)
1)内部触发输入是使用一个定时器作为另一个定时器的预分频器,即实现定时器的级联。
TIM1 作为 TIM2 的预分频器,需要完成的配置步骤:
1,TIM1_CR2 寄存器的 MMS[2:0]位设置为 010,即 TIM1 的主模式选择为更新(选择更新事件作为触发输出 (TRGO))。
2.TIM2_SMCR 寄存器的 TS[2:0]位设置为 000,即使用 ITR1 作为内部触发。TS[2:0]位用于配置触发选择,除了 ITR1,还有其他的选择,
3.TIM2_SMCR 寄存器的 SMS[2:0]位设置为 111,即从模式控制器选择外部时钟模式 1。
4,TIM1 和 TIM2 的 CEN 位都要置 1,即启动计数器。
注意:最常用的是内部时钟
2 控制器
控制器包括:从模式控制器、编码器接口和触发控制器(TRGO)。从模式控制器可以控制计数器复位、启动、递增/递减、计数。
3 时基单元
时基单元包括:计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)、自动重载寄存器(TIMx_ARR)。通用定时器的计数模式有三种:递增计数模式、递减计数模式和中心对齐模式。
4 输入捕获
测量输入信号的脉冲宽度、测量 PWM 输入信号的频率和占空比,一般先要设置输入捕获的边沿检测极性,通过上下升沿的检测来达到目的。
1)待测量信号到达 TIMx_CH1 后,这个待测量信号用 TI1 表示,TI1 首先经过一个滤波器,由 ICF[3:0]位来设置滤波方式,也可以设置不使用滤波器。fDTS由 TIMx_CR1 寄存器的 CKD 位设置。
2)接着经过边沿检测器,由 CC1P 位来设置检测的边沿,可以上升沿或者下降沿检测。CC1NP是配置互补通道的边沿检测的,在高级定时器才有,通用定时器没有。
3)然后经过输入捕获映射选择器,由 CC1S[1:0]位来选择把 IC1 映射到 TI1、TI2 还是 TRC。这里我们的待测量信号从通道 1 进来,所以选择 IC1 映射到 TI1 上即可
4)紧接着经过输入捕获 1 预分频器,由 ICPS[1:0]位来设置预分频系数,范围:1、2、4、8。
5)最后需要把 CC1E 位置 1,使能输入捕获,IC1PS 就是分频后的捕获信号
5输入捕获和输出比较公用部分
当上升沿到来时,IC1PS 信号就会触发输入捕获事件发生,计数器的值就会被锁存到捕获/比较影子寄存器里。
6 输出比较
1)首先程序员写 CCR1 寄存器,即写入比较值。这个比较值需要转移到对应的捕获/比较影子寄存器后才会真正生效
2)比较值转移到影子寄存器的条件
CCR1 不在写入操作期间、
CC1S[1:0] = 0 配置为输出、
OC1PE 位置0
3)当 CCR1 寄存器的值转移到其影子寄存器后,新的值就会和计数器的值进行比较
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!