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 首先经过一个滤波器,由 ICF3:0位来设置滤波方式,也可以设置不使用滤波器。

3)接着经过边沿检测器,由 CC2P 位来设置检测的边沿,可以上升沿或者下降沿检测。

4)然后经过触发输入选择器,由 TS4:0位来选择 TRGI(触发输入信号)的来源。 TI1F_ED、TI1FP1 和 TI2FP2 三个触发输入信号(TRGI),

5)最后经过模式选择器,由 ECE 位和 SMS2:0位来选择定时器的时钟源。外部时钟模式 1,ECE 位置 0,SMS2:0 = 111。

6)CK_PSC 需要经过定时器的预分频器分频后,最终就能到达计数器进行计数了。

1.2.外部时钟模式 2(ETR)

1)外部时钟源信号→IO→TIMx_ETR,需配置 IO 的复用功能,才能使IO 和定时器相连通

2)经过外部触发极性选择器,由 ETP 位来设置上升沿有效还是下降沿有效,选择下降沿有效的话,信号会经过反相器。

3)然后经过外部触发预分频器,由 ETPS1:0位来设置预分频系数,系数范围:1、2、4、8。

4)紧接着经过滤波器器,由 ETF3:0位来设置滤波方式,也可以设置不使用滤波器。fDTS 由TIMx_CR1 寄存器的 CKD 位设置。

5)从模式选择器,由 ECE 位置 0和 SMS2:0位来选择定时器的时钟源

6)CK_PSC 需要经过定时器的预分频器分频后,最终就能到达计数器进行计数了

1.3.内部触发输入(ITRx)

1)内部触发输入是使用一个定时器作为另一个定时器的预分频器,即实现定时器的级联。

TIM1 作为 TIM2 的预分频器,需要完成的配置步骤:

1,TIM1_CR2 寄存器的 MMS2:0位设置为 010,即 TIM1 的主模式选择为更新(选择更新事件作为触发输出 (TRGO))。

2.TIM2_SMCR 寄存器的 TS2:0位设置为 000,即使用 ITR1 作为内部触发。TS2:0位用于配置触发选择,除了 ITR1,还有其他的选择,

3.TIM2_SMCR 寄存器的 SMS2:0位设置为 111,即从模式控制器选择外部时钟模式 1。

4,TIM1 和 TIM2 的 CEN 位都要置 1,即启动计数器。

注意:最常用的是内部时钟

2 控制器

控制器包括:从模式控制器、编码器接口和触发控制器(TRGO)。从模式控制器可以控制计数器复位、启动、递增/递减、计数。

3 时基单元

时基单元包括:计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)、自动重载寄存器(TIMx_ARR)。通用定时器的计数模式有三种:递增计数模式、递减计数模式和中心对齐模式。

4 输入捕获

测量输入信号的脉冲宽度、测量 PWM 输入信号的频率和占空比,一般先要设置输入捕获的边沿检测极性,通过上下升沿的检测来达到目的。

1)待测量信号到达 TIMx_CH1 后,这个待测量信号用 TI1 表示,TI1 首先经过一个滤波器,由 ICF3:0位来设置滤波方式,也可以设置不使用滤波器。fDTS由 TIMx_CR1 寄存器的 CKD 位设置。

2)接着经过边沿检测器,由 CC1P 位来设置检测的边沿,可以上升沿或者下降沿检测。CC1NP是配置互补通道的边沿检测的,在高级定时器才有,通用定时器没有。

3)然后经过输入捕获映射选择器,由 CC1S1:0位来选择把 IC1 映射到 TI1、TI2 还是 TRC。这里我们的待测量信号从通道 1 进来,所以选择 IC1 映射到 TI1 上即可

4)紧接着经过输入捕获 1 预分频器,由 ICPS1:0位来设置预分频系数,范围:1、2、4、8。

5)最后需要把 CC1E 位置 1,使能输入捕获,IC1PS 就是分频后的捕获信号

5输入捕获和输出比较公用部分

当上升沿到来时,IC1PS 信号就会触发输入捕获事件发生,计数器的值就会被锁存到捕获/比较影子寄存器里。

6 输出比较

1)首先程序员写 CCR1 寄存器,即写入比较值。这个比较值需要转移到对应的捕获/比较影子寄存器后才会真正生效

2)比较值转移到影子寄存器的条件

CCR1 不在写入操作期间、

CC1S1:0 = 0 配置为输出、

OC1PE 位置0

3)当 CCR1 寄存器的值转移到其影子寄存器后,新的值就会和计数器的值进行比较

相关推荐
Brilliantwxx16 分钟前
【STM32】RTC 完结篇:日期操作、闹钟中断与附录(时间戳 / 闹钟 / NTP)
服务器·c语言·stm32·单片机·嵌入式硬件·实时音视频
深圳老胡20 分钟前
STM32C5 应用阶段开发难点解析:从选型到量产的实战经验
笔记·stm32·单片机·代码规范
李永奉21 分钟前
杰理可视化SDK开发-【BUG】AC7006F8芯片开启一拖二和双麦通话语音算法后,设置触摸音在唤醒语音助手和通话时触摸音没作用问题
单片机·嵌入式硬件·mcu·物联网·电脑·bug
HQB202614 小时前
EG1198|屹晶微电子 120V 内置 MOS 异步降压 DC‑DC(高性价比)
嵌入式硬件·硬件工程
果壳science15 小时前
张祥前实验如何获取正电荷
笔记·科技·嵌入式硬件·硬件工程·制造
南山电子nscn15 小时前
中科芯CETC汽车电池管理系统BMS进口芯片国产型号替代指南
单片机·汽车·bms
沉淀的.晴天16 小时前
can总线
stm32
桀人16 小时前
认识AT24C02
stm32·单片机·嵌入式硬件
国科安芯17 小时前
星间激光通信终端CANFD控制网络的时延确定性与辐射可靠性
网络·嵌入式硬件·信息与通信·canfd·低轨卫星·商业航天·抗辐射
一直C18 小时前
嵌入式 Linux 驱动开发学习笔记:内核定时器、platform 总线与 I²C 驱动
linux·驱动开发·嵌入式硬件·学习·imx6ull