【TIM定时器】


链接: 江科大stm32-13

1.TIM定时器

1.1.概念

TIM (Timer) 定时器,定时器可以对输入的时钟进行计数(定时器本质是个计数器),并在计数值达到设定值时触发中断。是STM32中功能最强大、结构最复杂的外设。

1.2.组成

定时器的核心部分是实际单元。由三部分组成。分别是:
计数器(每来一个时钟加1)
预分频器(对计数器是时钟进行分频,使计数更灵活)
自动重装寄存器(计多少个时钟)

1.3. 功能

不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输出比较、输入捕获、主从触发模式、编码器接口等多种功能。
PS:如果觉得不够长,可以采用STM32支持级联模式(一个定时器的输出当做另一个定时器的输入),一个定时器59.65s定时,级联一个(59.65 x 65536^2)定时8千年,级联两个(59.65 x 65536^4)定时34万亿年。

1.4.分类

在这里插入图片描述
● 使用ST单片机注意看其定时器资源,不同型号定时器数量不同。
STM32F103C8T6定时器资源:TIM1(一个高级)、TIM2、TIM3、TIM4(三个通用)

2.定时器工作原理

2.1.基本定时器

在这里插入图片描述

【基本流程】:基准时钟——预分配器——计数器——产生中断/事件——中断优先级——CPU

【时基单元】与分频器之前就是基准计数时钟的输入,连接到了内部时钟,其频率一般是系统主频72MHz,然后与分频器可以对其进行分频(是16位的,可以分0-65535分频,分频的目的是降低频率便于改变计算,使得外设间互不干扰,控制其工作速度,匹配外设要求,有的外设是检测不到72M这么快的速度的)。计数器对分频后的时钟单位进行计数,重装载寄存器保存设定的数值,计数过程二者不断比较,达到设定目标值(0~65535)时候,就会产生中断并清零计数器。

【主模式触发DAC功能】STM32的特色主从触发模式,可以让内部硬件在不受程序控制下实现自动运行,极大的减轻CPU的负担。因为上图中如果在定时器产生的中断中去控制DAC的输出,此时主程序会被频繁中断,占用CPU资源,影响到程序的运行和其他中断的响应。所以使用主模式,产生的中断事件映射到出发输出TRGO的位置,使其控制输出DAC,这样便不需要在中断里触发DAC转换了。

2.2 通用定时器

在这里插入图片描述

【定时器计数方式】向上自增(从0开始增加,常用),向下自减(从设定值开始),中央对齐模式(先从零开始再从设定值开始),基本定时器只有向上自增一种方式,其余类型的定时器三种模式均有.

【时钟源输入】基本定时器只能是内部的时钟源,但是通用定时器可以多选择外部时钟源信号。
外部时钟输入模式2的输入:可以走ETR通道。经过滤波整形电路,输出基准时钟;
外部时钟输入模式1的输入:可以选择ITR信号,这部分信号是来自于其他定时器。TRGO接到其他定时器的同时又接到了ITRx上,具体连接关系可以通过表格来了解。可用于级联。在这里插入图片描述另外还可以选择CH1引脚边沿,CH1引脚和CH2引脚,可用于输入捕获,检测频率。
总结:输入还是比较复杂的,但是一般常用RCC内部时钟,而要使用外部时钟首选ETR输入就行了,其他的输入范围是为了一些特殊应用场景设计的,后续可了解。

【编码器接口】可以读取正交编码器的输出波形。
【输入捕获电路】四个通道,CH1~CH4
【输出比较电路】总共四个通道输出,与输入捕获电路公用一个组寄存器,因此不能同时使用。

2.3.高级定时器

在这里插入图片描述

【重复计数器】:控制计数器中断的产生,可以隔几个周期触发更新中断,相当于对输出的更新中断信号进行了一次分频。

【DTG死区生成电路】:在框图中其前三路可以输出两个互补的PWM波输出,用于控制三相无刷驱动。因为其只需要三路,因此第四路没什么变化。在开关切换的瞬间,由于器件的不理想,造成短暂的直通现象,因此在输出之前加上了死区生成电路,在开关切断的瞬间,产生一定时间的死区,让桥臂的上下管全都关断,防止直通现象。

【刹车输入】:给电机驱动提供安全保障,如果外部引脚产生了刹车信号,或者内部时钟信号消失,控制电路就会自动切断电机的输出,防止意外。

3.时基单元相关时序分析

定时器中断,即定时产生一个中断。需要实现时钟、秒表等计时的时候都需要这个功能。
在这里插入图片描述

3.1.预分频器时序

在这里插入图片描述
当与分频器CNT_EN使能时候,计数器时钟才运行,但定时器仍然过了一段时间才发生改变,其改变的位置处于计数器寄存器清零部分,可知其重装值为FC,同时也会产生一个更新事件。后三行时序是一个缓冲机制,在计数周期过程中改变预分频系数,并不会直接改变定时器计数,而是等待计数周期结束后,产生了更新事件,此时预分频寄存器的值才生效,保障了稳定。
计数器计数频率:CK_CNT=CK_PSC/(PSC+1)

3.2.计数器时序

在这里插入图片描述
定时器溢出频率:CK_CNT_OV=CK_CNT/(ARR+1)=CK_PSC/(PSC+1)/(ARR+1)

3.3.计数器无预装时序

没有缓冲的情况下
在这里插入图片描述
正常的计数周期后,变化分频频率。

3.4.计数器有预装时序

在这里插入图片描述
修改分频没有缓冲直接改变频率,会导致计数器一直增加至FFFF全满,然后才清零。

4.RCC时钟树

时钟树是STM32用来产生和配置时钟,并且把配置好的时钟发送到各个外设的系统,是所有外设运行的基础,所以是最先要配置的东西。
在这里插入图片描述
上图分为两个部分,一是时钟产生电路,二是时钟配置电路。
1、时钟产生电路
【资源】:(可参考F103手册)一般使用外部晶振, 比较稳定,除非精度不高可以使用内部。
○ 内部8MHz;
○ 外部4~16MHz高速石英晶体振荡器,也就是晶振,一般都是接8MHz;
○ 外部的32.768KHz低速晶振,这个一般是给RTC提供时钟的。
○ 内部40KHz低速RC震荡期,这个可以给看门狗提供时钟。
【启动过程】:首先以内部时钟8M启动,再启动外部时钟,进入PLL锁相环进行倍频,8MHz倍频9倍,获得72MHz。(据网友所说PLL不止9倍,可以用倍频16倍,进行超频运行)
如果外部晶振坏了,时钟会慢10倍。
【CSS】:时钟安全系统,负责切换时钟。比如先前提到的刹车系统里也有。
2、时钟分配电路
默认情况下,无论是什么定时器,其内部基准时钟都是72MHz。如果更改了系统初始化函数SystemInit()的配置,需要重新计算速度。

  • 29
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值