96SEO 2026-02-20 09:21 21
通用定时器原理定时器的内部时钟源通用定时器TIM9-TIM14的对比共同点区别

定时器框图理解和分析TIM10/TIM11/TIM13/TIM14输入捕获输出比较
TIM9和TIM12独立通道输入滤波器边沿检测器输入捕获选择器预分频器捕获比较寄存器
PWM呼吸灯实例及解读配置界面与寄存器PWM模式代码分析初始化代码分析初始化代码涉及的寄存器
main函数中我们添加的代码在初始化阶段调用的函数while(1)里添加的代码
寄存器分析TIMx_DIERTIMx_SRTIMx_EGRTIMx_CNTTIMx_PSCTIMx_ARRTIMx_CCR1
STM32F4的定时器分为高级定时器通用定时器和基本定时器。
上一篇文章已经讲了基本定时器。
本文遵从由简入繁的原则先讲解通用定时器的原理并通过PWM实例帮助大家加深对通用定时器的理解最后介绍通用定时器的寄存器旨在帮助大家逐步掌握通用定时器的全部功能。
本文一万余字我倾注了些心血如果对您有帮助还请点赞、收藏、转发、评论谢谢
TIM2-TIM5TIM9和TIM12TIM10/TIM11/TIM13/TIM14
虽然都是通用定时器也有细微的差别。
本文讲解TIM10/TIM11/TIM13/TIM14和TIM9和TIM12两个部分。
通用定时器的寄存器有些名称中含有CC指的是“捕获/比较”即Capture/Compare与独立通道的设置相关可以将通道设置成输入型的也可以设置成输出型的。
输入则对应着捕获输出则对应着比较。
我们打开《STM32F4英文参考手册》看到时钟章节有时钟树这里截取我们关心的定时器时钟。
看得出来芯片设计者对定时器和其他的外设是区别看待的。
很明显对于APB1和APB2都是一样的。
由于STM32F4主频最高是168MHz我们就假定SYSCLK
就拿APB1举例如果APB1的分频系数是1也就是说外设的工作频率是168MHZ那么定时器的工作频率也是168MHZ
但如果APB1的分频系数不是1比如说是2那么外设的工作频率是84MHz这个时候定时器的工作频率是84MHz的2倍也就是168MHZ。
如果APB1的分频系是4那么外设的工作频率是42MHz这个时候定时器的工作频率是42MHz的2倍也就是84MHZ。
都是16位的自动重装载递增计数器只能递增16位可编程预分频器都拥有独立通道用于输出比较、输入捕获、PWM生成、单脉冲模式输出可以产生中断的方法更新、输入捕获、输出比较
TIM9和TIM12比TIM10/TIM11/TIM13/TIM14多的功能
使用外部信号控制定时器且可实现多个定时器互连的同步TIM9和TIM12拥有独立通道的数量比较多分别有2个通道而TIM10/TIM11/TIM13/TIM14只有1个通道。
相比而言TIM9和TIM12生成中断的条件多了一个触发事件计数器启动、停止、初始化或者由内部触发器计数
TIM10/TIM11/TIM13/TIM14和基本定时器一样只有内部时钟CL_INT作为时钟源。
使用外部时钟模式通过外部引脚输入时钟使用内部触发输入ITRx连接其他定时器的触发输出
对于TIM10/TIM11/TIM13/TIM14在基本定时器一文中已经有介绍时钟所以这里只介绍TIM9和TIM12。
000——禁止从模式定时器的时钟由内部时钟提供。
本定时器独立计数不听命于其他100——复位模式出现所选触发输入TRGI的上升沿时重新初始化定时器并产生更新事件101——门控模式触发输入TRGI为高电平的时候才使能计数器时钟TRGI为低电平就立即停止计数但不会复位计数器。
什么时候计数什么时候暂停计数完全取决于别人的脸色适用于计算按键按下去的时间的场景。
110——触发模式触发信号TRGI出现上升沿则启动计数但不复位。
别人一声令下本定时器启动计数但什么时候停止不听别人的。
111——外部时钟模式1在所选触发输入的上升沿驱动计数器。
当然这两张图片是定时器的精髓把这两张图看明白了我们就掌握定时器了。
“老太太吃柿子——捡软的捏”咱们先看第二幅图一眼望去除了下面多了一个通道上面的部分和基本定时器完全一样。
而这条通道左边是外部引脚TIMx_CH1右边也是TIMx_CH1。
纳尼什么意思其实是这样的它只是把一个引脚的功能“展开”了一个定时器外部引脚既可以输入也可以输出。
但不可能同时输入和输出除非不同的引脚复用到这一个定时器上然后让定时器分时复用这种情况非常罕见所以我们就当它是一个引脚就行。
“输入捕获”是对外部引脚输入的信号而言的“输出比较”是对输出的信号而言的分别对应着图上独立通道的左右两边。
如果这个引脚作为“输入捕获”功能那么我们就不看右边的那半条通道。
左边输入的时钟经过滤波器和边沿检测器给到预分频器最后给了捕获/比较寄存器通过计数值和这个寄存器的值相比然后得出输入的时钟信息比如高电平持续了多久
如果这个引脚作为“输出比较”功能那么我们就不看左边的那半条通道只看右边捕获/比较寄存器往右的这半条通道即可。
相比之下如果是“输入捕获”则捕获/比较寄存器的值是随着输入信号写进去的不是我们用户通过代码写值进去的但如果是“输出比较”则捕获/比较寄存器的值是我们用户通过写寄存器写值进去的。
并且这个值可以随时被我们改变这就是PWM的生成逻辑。
到此第二张图TIM10/TIM11/TIM13/TIM14定时器框图已经分析完毕。
这里先给大家简单介绍一下下面讲TIM9和TIM12的时候涉及寄存器的内容在这里也可以对应。
现在我们看第一张图片TIM9和TIM12定时器框图。
是不是比第二张图复杂了一些不过对比之后发现也没太复杂请听我一一道来。
从独立通道的数量来看TIM9和TIM12拥有2条从外部引脚TIMx_CH1或者TIMx_CH2进来就是TI1和TI2。
从左到右这两条独立通道基本上完全一样。
但也有唯一的区别对于TI1经过输入滤波和边沿检测之后可以成为TI1F_ED连接到上面的选择器与TRC共同被选择。
其他方面两个独立通道是完全一样的。
当SMS位等于111时就选择TI1F_ED作为定时器的外部时钟每个上升沿都触发一次计数。
关于SMS前文已有讲解此处不赘述
1、首先我们要考虑的是输入滤波器的采样频率由寄存器TIMx_CCMR1-IC1F决定。
边沿检测器要根据寄存器的值选择上升沿还是下降沿作为触发的极性。
首先CC1P这个位在输出模式下表示有效电平是高电平还是低电平。
如果1则有效电平是高电平反之是低电平。
在输入模式下CC1NP和CC1P两个BIT共同组成2BIT的寄存器位就有四种不同的值代表不同含义
00——上升沿是输入捕获的触发极性。
01——下降沿是输入捕获的触发极性。
10——保留。
11——上升沿和下降沿都是输入捕获的触发极性。
在编码模式下不允许使用
最后一个位是CC1E。
如果是输出模式就决定了输出是否使能如果是输入模式就决定了捕获是否使能。
在PWM呼吸灯实例中可以看到HAL库对这一位的处理是初始化的时候就清零。
而它的置位是由用户调用API启动的。
CC1S[1:0]实际上对应着上面这个选择器。
回到上面的定时器框图就理解了。
01——就是TI1FP1连接到IC110——就是TI2FP2连接到IC111——就是TRC连接到IC1。
以上是将CC1捕获比较通道1设置成输入型的。
如果想要设置成输出型的CC1S等于00比如PWM模式就需要将波形从引脚输出的外部。
再往右是预分频器就是外部输入几个事件才会完成一次捕获。
如下图分为几种情况
00——不分频每次检测到边沿输入都完成一次捕获。
01——每检测到2次事件完成一次捕获。
10——每检测到4次事件完成一次捕获。
11——每检测到8次事件完成一次捕获。
最后到了捕获/比较寄存器。
CNT计数器分别与两个捕获/比较寄存器连接可以进行捕获比较。
ITR0-ITR3一共4路都是其他主定时器输入的触发信号TRGI还有TI1F_ED、TI1FP1、TI2FP2这些都可以用来同步定时器。
至于选择哪一个由下面的寄存器决定
既然提到了寄存器TIMx_SMCR那么就顺便讲一下MSMMaster/Slave
Mode它是用于控制定时器的主从模式联动。
当多个定时器需要协同工作时如级联触发、同步计数MSM位可确保它们的操作严格同步。
功能使能主从模式联动确保触发信号从主定时器传递到从定时器时两个定时器的操作严格同步。
取值
主定时器接收到触发信号后会先将触发信号传递给从定时器。
从定时器根据自身配置如SMS位响应触发信号如复位计数器、启动计数。
主定时器在确保从定时器完成响应后再执行自身的操作如更新TRGO输出。
OC_Config-OCMode;这是在配置OC1M位将配置值PWM1写入“输出比较1模式”位。
TIM_CHANNEL_1);之后我们分析一下这个函数的内部逻辑。
){__HAL_TIM_SET_COMPARE(htim14,
--){__HAL_TIM_SET_COMPARE(htim14,
__HAL_TIM_SET_COMPARE(__HANDLE__,
(__COMPARE__)))本例中使用的是channel1此宏定义是设置CCR1寄存器的值。
实现PWM占空比变化。
所谓的使能位就是一个开关。
打开开关之后下面的标志位一旦置位了就会触发相应的中断关闭了开关之后即便下面的标志位置位了也不会触发中断。
所谓“重捕获”是说上次的捕获标志位还没有清零下一次的捕获事件就又触发了。
为了防止第2次的捕获事件丢失所以这个寄存器就应运而生了。
由于TIM9-TIM14都只有递增的模式所以这个寄存器的值只能递增计数。
回顾上面的定时器框图你可能还有印象这个寄存器就是下面框图的预分频器。
而预分频的时钟来源就是CK_PSC。
重装载寄存器就是下图中红色框的这个。
如果说计数器是“吃包子的”那么重装载寄存器就是“喂包子的”。
是不是很形象哈哈哈……
TIMx_CCR1寄存器在输入和输出模式下的功能不同在输出模式下与OC1PE相关。
如果OC1PE1写进TIMx_CCR1寄存器的值会在产生更新事件之后生效如果OC1PE0则写进TIMx_CCR1寄存器的值会立即生效。
在输入模式下这个寄存器只允许读不允许写它的值是最后一次输入捕获事件的计数值。
同样有TIMx_CCR2寄存器由于仅仅是通道不同所以不需要多讲了。
本文到此结束已经很详细地介绍了通用定时器TIM9-TIM14相信您可以从中有所收获期待您的点赞、转发、收藏、评论
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback