嵌入式学习笔记 - STM32定时器的输入通道与时钟源
以上为通用定时器内部结构框图,可以看到同一个定时器外部输入口信号经过滤波之后可以得到两个信号,以TI1为例,可以产生TI1FP1 与TI1FP2信号,前者用于通道1,后者用于通道2,这个机制对于采集同一个信号的不同特性至关重要,例如采集PWM波的周期跟占空比,理解这一点更容易对于捕获比较部分的掌握与理解。
一 内部时钟源(CK_INT)
内部时钟源顾名思义就是使用MCU内部自己的定时器时钟,CK_INT=APB1或者APB2 CLK,所以不是外接时钟,就不可能是从模式,只能是主模式,见下图从模式寄存器的SMS位必须设置位000关闭从模式,一般是工作在计数模式,或者PWM输出模式
如果禁止了从模式控制器(TIMx_SMCR寄存器的SMS=000),则CEN、DIR(TIMx_CR1寄存器) 和UG位(TIMx_EGR寄存器)是事实上的控制位,这也是仅主模式的设置方式
二 外部时钟源模式1
设置完毕后,当上升沿出现在TI2,计数器计数一次,且TIF标志被设置,也就是说TI2输入时钟最终充当了定时器计数器时钟。以下是cubeMX配置
关于STM32定时器的外部时钟模式1未使用内部时钟CK_INT的原因与其工作原理和时钟源选择机制直接相关,具体分析如下:
1. 外部时钟模式1的设计定位
- 外部时钟模式1的核心功能是通过外部引脚信号驱动计数器,而非依赖内部时钟信号23。该模式下,定时器通过输入通道TI1(CH1引脚)或TI2(CH2引脚)接收外部触发信号,经过滤波和极性选择后生成有效触发边沿,最终控制计数器递增34。
- 模式切换的互斥性:定时器的时钟源选择具有排他性。当配置为外部时钟模式1时,硬件逻辑会自动屏蔽内部时钟信号CK_INT,确保计数器完全由外部触发信号驱动26。
2. 从模式控制器的关键作用
- 在外部时钟模式1中,定时器的从模式控制器(Slave Mode Controller)被激活,并将外部触发信号作为计数器时钟源23。此时:
- 计数器的工作状态(启动/停止)直接受外部信号触发边沿控制;
- 内部时钟CK_INT的预分频器(PSC)和自动重载寄存器(ARR)仍然参与分频和周期设定26,但CK_INT自身不再直接驱动计数器。
3. 与内部时钟模式的对比
- 内部时钟模式(CK_INT):计数器由内部时钟分频后的CK_CNT驱动,适用于定时器自主运行场景68。
- 外部时钟模式1:适用于需要外部事件同步计数的场景(如测量外部脉冲频率)。此时外部信号既是时钟源也是触发源,与内部时钟无关34。
4. 硬件架构的限制
- STM32定时器的时钟路径设计决定了不同模式间的隔离性。外部时钟模式1的触发信号通过专用输入通道进入定时器模块,而内部时钟CK_INT由总线时钟分频产生。两者在硬件层面上存在独立路径,无法同时作用于计数器26。
三 外部时钟源模式2
此模式下计数器能够在外部触发ETR的每一个上升沿或下降沿计数。下图示例计数器在每2个ETR上升沿计数一次,因为设置了输入信号2倍预分频。
可以按照外部时钟模式一进行配置cubeMX,从上图121以及下图cubeMX配置图中也可以发现,模式2比模式1多了两处,①对外部触发信号的分频,下图绿线部分所示,②对内部时钟的分频用于采样外部信号,下图黄线部分所示,可根据需要进行配置
注意:外部时钟模式2有两种设置方式,见下图: