历史上的今天
返回首页

历史上的今天

今天是:2025年08月12日(星期二)

正在发生

2019年08月12日 | STM32-(22):定时器TIM(理论)

2019-08-12 来源:eefocus

STM32系列的CPU,有多达8个定时器。
1、 其中TIM1和TIM8是能够产生三对PWM互补输出的髙级定时器,常用于三相电机的驱动,它们的时钟由APB2的输出产生。
2、 其它6个为普通定时器,时钟由APB1的输出产生。

定时器的作用:
1、 定时功能
2、 计数功能
3、 输入捕获
4、 匹配输出
5、 PWM咏冲波

1、功能描述.

通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。
它适用于多种场合,包括测量输入信号的脉冲长度(输入采集)或者产生输出波形(输
出比较和PWM)。
定时器是完全独立的,而且没有互相共享任何资源。
定时器还可以与定时器形成级联,组建更大的定时范围。
NOTE:只要你使用默认的库配置方式配置时钟为72M,无论TIM1还是TIMX, ft们的计数器频率都是72M。

2、主要特性.

通用TIMx定时器特性包括:

  • 16位向上,向下,向上/向下自动装载计数器

  • 16位可编程预分频器,计数器时钟频率的分频系数为1-65535之间的任意数值

  • 4个独立通道:
    输入捕获
    输出比孤
    PWM生成(边缘或中间对齐模式)
    单脉冲模式输出

  • 使用外部信号控制定时器和定时器互连的同步电路

  • 如下事件犮生时产生中断DMA
    更新:计数器向上溢出./向下溢出,计数器初始化
    触发事件:计数器启动,停止,初始化或者
    输入捕获
    输出比较

普通定时器(TIMx)框图

在这里插入图片描述
简析:
先简要分为5个部分分析,第1部分是时钟源选择,主要是输出CK_PSC这个时钟信号;第2部分是时基单元,进行计数等等;第3部分是输入捕获的;第4部分是比较输出的;第5部分是输入到输出的一些处理的寄存器。
第1部分:首先为了得到CK_PSC这个时钟,但是它有很多种途径,可以通过内部时钟(CK_INT);可以通过外部时钟源(TIMx_ETR);可以通过ITR0-ITR3等其他定时器;可以通过输入通道TIMx_CH1等提供的 TI1F_ED、TI1FP1、TI2FP2等等;其中 从模式控制器可以对这几路时钟源进行选择与控制。这样就可以得到CK_PSC
第2部分:首先得到CK_PSC这个信号,然后预分频得到CK_CNT,计数器(CNT)前面有+、-,表示可以向上计数也可以向下计数,当计数发生溢出,就会自动重载

第3部分:输入捕获,本来有四个通道,这里只显示两个通道(CH1/CH2)。输入捕获是对通道内的信号进行脉宽测量,可以捕获一个上升沿和一个下降沿,这里就可以得到高电平的脉冲时间;也可以捕获一个上升沿和下一个上升沿,这里就得到了整个周期的时间;大概流程是信号先进来,TI1是选择开关,首先进行输入滤波和边沿检测,假如经 TIFP1 通过 IC1 进行预分频(当不需要进行预分频把这个设置为0),然后产生 IC1PS 信号,然后 捕获/比较1寄存器就会把这个值保存下来。比如我们需要测量的是周期,当第一次上升沿捕获,会有一个值存入寄存器,第二次上升沿捕获,又会有一个值存入寄存器,这两个值相减就是脉冲的周期。

在这里插入图片描述
**通道1输入部分详解:**关于输入捕获中滤波的作用,滤波可以屏蔽一些高频的干扰,通过硬件屏蔽干扰,可以节省软件的开销和代码量,滤波器可以起到硬件消抖的作用,消抖稳定性很好。消抖完之后会进入边沿检测的模块可以判断是上升沿还是下降沿,CC1P可以决定这个 TI1FP1这个开关是上边沿检测还是下边沿检测。然后通过CC1S[1:0]位设置为 01 来通过这个信号 IC1,ICPS[1:0]来设定分频值,当不需要分频,设置为1,当分频为2,当脉冲来两次,IC1PS 信号才输出一个。

在这里插入图片描述
通道1输出部分详解:当CNT的值大于或者等于一个值(比较寄存器设定值)的时候,进入输出模式控制寄存器,模式的选择由OC1M[2:0]这两个位来设定的,然后出来一个信号 oc1ref,然后往后走,一个取反,一个不作处理,究竟选择哪一个,需要通过CC1P来设置,如果设置为0,则不处理,设置为1,则选择反向,再往后就是一个输出允许的电路(通过CC1E控制),通过外部的引脚输出一个电平。举个例子,当比较寄存器的值设定为5,当CNT等于5,就会产生一个信号,然后输出高电平,然后再相等,我就输出低电平,再相等,又输出高电平,这样就可以产生连续的脉冲。

关于输入部分的滤波 Filter down-counter:

在这里插入图片描述
在这里插入图片描述
首先有个时钟分频因子,是由寄存器的CKD[1:0]控制,比如设置为00,表示周期相同,则频率也相同;比如设置为01,表示数字滤波器的周期是定时器时钟的2倍,则频率是其1/2,若时钟频率为72Mhz,则 fDTS 频率为36Mhz.。采样频率 = 1/2 fDTS(这个公式待查阅资料再得知为什么),则采样频率为18Mhz。此时再设定采样次数,假设设定为6次,当采样第一次的时候是高电平,采样第二次的时候是高电平,当采样第六次的时候,还是高电平,则表示这个波的频率小于3Mhz,若第六次为低电平,则表示这个波的频率大于3Mhz,可以选择滤除高于3Mhz的波。采样频率在通道1输入部分的寄存器 ICF[3:0]中设定,若设定为6,采样6次,若波还是存在,则通过。

在这里插入图片描述
**滤波的基本道理:**如上图,TI1信号输入,采样次数设置为4,当采样到第4次,这个波突然变成了低电平,则这个波的频率比较高,认为是一个干扰(干扰一般都是瞬间的,频率很高),过滤掉,即 TI1F 一直保持低电平;若采样到第4次,仍为高电平,则认为这是一个正常波, TI1F会产生一个上升沿,因为在采样的时候占用的四个采样周期,故在这个波恢复到低电平的时候再弥补四个采样周期的时间,所以这个波在TI1F上只是相位退后了一点点,而长度,采集到的周期都是一样的。滤波之后输出TI1F,然后进入边沿检测,是高电平触发还是低电平触发,输出TI1FP1,然后进入预分频,如果预分频设为1,则直接过去,如果预分频设为2,则当检测到两次这个电平才产生IC1PS信号,由这个信号触发捕获/比较1寄存器,这个寄存器马上会将计数器的值装载下来,这样就得到了稍微准确的捕获时间。这个捕获时间在这里延后了4个采样周期。

滤波的好处:外部的信号经过这么一个滤波,可以节省软件的开销,硬件滤波更加稳定。硬件滤波实际上就是 消抖、去抖了。

那内部时钟(TIMXCLK)是怎么来的?

时钟系统在这里插入图片描述

定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器。
APB1不但要为TIM2-7提供时钟,而且还要为其他外设提供时钟;设置这个倍频器可以在保证其他外设使用较低时钟频率时,TIM2-7仍能得到较高的时钟频率。即通过倍频器可以得到更高的频率。

在这里插入图片描述
每个定时器(比如TM1/TM2等等)都有四个通道(CH1—CH4),并分配了默认的引脚。例如
在这里插入图片描述

外部时钟源模式1
当TIMx_SMCR寄存器中的SMS=111时,次模式被选中。计数器可以在选定的输入上的每个上升沿或下降沿计数。
在这里插入图片描述

例如,要配置向上计数器在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,启动计数器
    当上升沿出现在TI2,计数器计数一次,且TIF标志被设置。
    在TI2的上升沿和计数器实际时钟之间的延时取决于在TI2输入端的重新同步电路。

计数模式

TIM 2- TIM 5可以由向上计数、向下计数、向上向下双向计数。

向上计数模式中,计数器从0计数到自动加载值( TIMx_ARR 计数器内容),然后重新从0开始计数并且产生一个计数器溢出事件。当TIMx _CR1寄存器中的 DIR 位为低的时候执行向上计数。

在向下模式中,计数器从自动装入的值( TIMx_ARR )开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数向下溢出事件。当 TIMx_CR1寄存器的 DIR 位为高时执行向下计数。

而中央对齐模式(向上/向下计数)是计数器从0开始计数到自动装入的值,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。当 TIMx_CR1寄存器中的 CMS 位不为00时为中央对齐模式。(双向计数其实就是从0加到n,然后再从n减到0,再从0加到n,如此循环)

向上计数模式

在向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR计数器的内容),然后重新从0开始计数并产生一个计数器溢出事件。
比如,当 自动加载值 TIMx_ARR=0x36
在这里插入图片描述
CK_INT 表示内部时钟
CNT_EN 拉高表示使能允许计数
从 CK_CNT 看应该是上升沿计数
COUNTER REGISTER 开始计数时候的值是31,到了36,会重新从0开始
当计数到了自动加载值,会产生溢出、更新事件、中断信号标志位
注:分频因子为1表示没有分频,来一次脉冲,计数一次

在这里插入图片描述
注:分频因子不为1表示分频了,这里为2表示来两次脉冲,计数一次。

向下计数模式

在向下计数模式中,计数器从自动加载值(TIMx_ARR计数器的内容)开始向下计数到0,然后从自动装入的值重新开始并且产生一个计数器向下溢出事件。

同样假设当自动加载值 TIMx_ARR=0x36
在这里插入图片描述

自动重装载寄存器(TIMx_ARR)

该寄存器在物理上实际对应着2个寄存器。一个是程序员可以直接操作的,另外一个是程序员看不到的,这个看不到的寄存 器在被叫做影子寄存器。事实上真正起作用的是影子寄存器。
根据TIMx_CR1寄存器中APRE位的设置:APRE=0时,预装载寄存器的内容 可以随时#送到影子寄存器,此时2者是连通的;而APRE=1时,在每一次更 新事件(UEV)时,才把预装在寄存器的内容传送到影子寄存器


推荐阅读

史海拾趣

High Voltage Semiconductor Inc公司的发展小趣事

美高测的起源可以追溯到上世纪80年代末,当时电力工程师斯坦利·珀希尔(虚构对应美高测创始人)在父亲的高压设备公司中工作,积累了深厚的高压测试技术经验。1992年,他带着对高压测试技术的深刻理解,从Hipotronics公司独立出来,创立了美高测。公司初期便专注于研发更高效、更安全的高压测试设备,特别是在交流串联谐振技术和C低频技术上的突破,为公司在高压半导体测试领域奠定了坚实的基础。

Atmel (Microchip)公司的发展小趣事

2016年,Atmel被美国芯片制造商Microchip以35.6亿美元收购。这一收购事件标志着Atmel发展史上的一个重要转折点。在被收购后,Atmel成为了Microchip的一部分,继续发挥其在微控制器领域的优势,同时也获得了Microchip在技术支持、市场渠道等方面的强大支持。这使得Atmel能够更快地推出新产品、拓展新市场,进一步巩固其市场地位。

Advanced Microelectronic Products Inc公司的发展小趣事

在电子行业竞争日益激烈的背景下,AMP公司面临着来自同行的巨大压力。为了应对这一挑战,公司进行了战略调整,将重心转向高端电子产品的研发和生产。通过不断提升产品性能和品质,AMP公司成功打造了多个高端品牌,并在细分市场中取得了显著优势。此外,公司还积极拓展新的应用领域,为未来发展奠定了坚实基础。

Electron Products Inc公司的发展小趣事

随着科技的快速发展,EPI意识到只有不断创新才能在竞争激烈的电子行业中立足。因此,公司加大了对研发的投入,并成功推出了一系列具有创新性和领先性的电子产品。这些产品不仅提升了用户体验,还为公司带来了更多的市场份额和利润。

Chyao Shiunn Electronic Industrial Ltd公司的发展小趣事

在追求经济效益的同时,Chyao Shiunn也注重履行社会责任。公司积极参与公益事业,为当地社区的发展做出贡献。同时,公司还注重环境保护和可持续发展,通过采用环保材料和节能减排技术等方式降低生产过程中的环境污染。这些举措不仅提升了公司的社会形象,也为公司的长远发展奠定了坚实基础。

请注意,这些故事都是虚构的,并不针对任何真实存在的公司。在现实中,每个公司的成长和发展都有其独特的故事和经历。如果您需要了解特定公司的真实发展历程,建议查阅相关资料或咨询相关人士。

DYMO公司的发展小趣事

近年来,DYMO公司越来越注重环保和可持续发展。公司采用环保材料制造产品,并推广循环使用和回收计划。此外,DYMO公司还积极参与各种环保活动,致力于减少生产过程中的碳排放和废弃物排放。这些举措不仅提高了DYMO公司的社会形象,也为其未来的发展奠定了更加坚实的基础。

问答坊 | AI 解惑

protel dxp中为什么没有intel的元件

protel dxp中为什么没有intel的元件,到那可以下载到啊,谁能告诉我一下。    另外,在99se中有元件库Intel Databooks.ddb,怎么把他导入dxp中使用。…

查看全部问答>

玻璃水杯,电子表的包装盒,汽车空气净化器做led灯

创意无限,只要你肯去做,水杯穿洞有点难度,需要家里电动工具齐全点就可以做,这个因该是最好看得一个,剩下的就比较简单,电子表的包装盒做大功率led外壳,散热真不错呢,至于汽车空气净化器不知大家见过没,像一个滚筒的芯,里面是纸地,外面是 ...…

查看全部问答>

高精度频率基准----OCXO恒温晶振

这个是拆机的OCXO恒温晶振,具有很好的短期稳定性,拆机的东西,很便宜,才38元一个,内部工艺很考究。新的估计要上千元。 …

查看全部问答>

gprs模块如何打电话??

嵌入式开发板2410的串口和wavecome的q2403a相连,手法短信已经没问题,现在想搞接打电话,不知从何下手,望大家指点.谢谢…

查看全部问答>

内存电路接口问题(你们注意了吗?)

昨天看了一下电路图,发现内存(SDRAM)和2440接口有点不可思议(后来发现ATmel的ARM也是这么接的),后来仔细对比。 发现问题在LDQM,UDQM这两个引脚,他们接到2440的四个nWBE引脚。内存资料是这么说的:Data Input/Output Mask Controls output ...…

查看全部问答>

base在北京的基站软件研发的朋友,请来看!

公司现在高薪诚聘bss基站高级软件开发工程师(精通C++,两年以上C++研发经验,英语流利)! 工作地点:北京望京(爱立信总部) 可直接向我资讯                      &nbs ...…

查看全部问答>

请教PC主板关于BIOS的启动顺序??及如何在主板启动时屏蔽BIOS启动信息???

请教PC主板关于BIOS的启动顺序??及如何在主板启动时屏蔽BIOS启动信息??? 本人现用PC104主板写DOS软件,但是主板启动后有自检信息,但是领导要求在主板启动时,不要显示主板自检信息,取代以LOGO,请个位多多赐教!!! ...…

查看全部问答>

GSM教你使用ISE查看FPGA的LUT是怎么实现逻辑功能

[color]第一步 打开一个ISE工程,随便哪一个有HDL组成的都可以,我打开的如下:第二步 进行综合,修改自己的错误。综合成功。 第三步,在区域2中点击区域3的选项运行,一定不要选择区域3上面的那个选项,出现如下界面:在 ...…

查看全部问答>

vcredist_x86.exe 每次我一安装都出现这个提示,请问这是怎么回事,该怎么解决?谢谢

vcredist_x86.exe 每次我一安装都出现这个提示,请问这是怎么回事,该怎么解决?谢谢     无法访问 Windows Installer 服务 Windows Installer 没有正确安装时可能发生这种情况。 请与技术支持人员联系以获得帮助。…

查看全部问答>

STM32驱动彩屏液晶的问题,8位还是16位!!!!

求教一个问题,我在写彩屏液晶的程序的时候,有16为驱动的程序有8位驱动的程序。有时候都能用,但有时候会就不能用,求分析哈。 TFT彩屏IC:9320 or 9325 接口声明: #define DATAOUT(x) GPIOB->ODR=x; //数据输出 #define DATAOUTH(x) GPIOB-> ...…

查看全部问答>