6.1 STM32 TIM定时器

  1. 纲要

  • 定时器基本定时功能,也就是定一个时间,然后让定时器每隔这个时间产生一个中断.来实现每隔一个固定时间执行一段程序的目的.(例如做时钟、秒表时都需要用一个定时中断的功能)

  • 定时器的输出比较功能,产生PWM波形,于驱动电机、舵机等设备

  • 定时器的输入捕获功能,实现测量方波频率

  • 定时器的编码器接口,可以更方便的读取正交编码器的输出波形

  1. TIM简介

•定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断(定时触发中断)

•16位计数器、预分频器(对计数器时钟进行分频,让计数更加灵活)、自动重装寄存器的时基单元(计数的目标值,计N个时钟后申请中断),在72MHz计数时钟下可以实现最大59.65s的定时

•不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能

•根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型

3.定时器类型

STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4

4. 定时器的结构及功能

4.1 基本定时器的结构及功能

  • 预分频器(PSC):对72MHz的计数时钟进行预分频,对输⼊的基准频率提前进⾏⼀个分频的操作

举例:寄存器写0,那就是不分频,或者说为1分频,这是输出频率=输入频率=72MHz

寄存器写1,为2分频,输出频率=输入频率/2=36MHz

寄存器写2,为3分频,输出频率=输入频率/3=24MHz 以此类推 实际分频系数 = 预分频器的值 + 1,因为预分频器为16位,最⼤可以写65535即65536分频

  • 计数器(CNT):16位,值可以从0~65535,计数器可以对预分频后的技术时钟进行计数,计数时钟每来一个上升沿,计数器的值就加1。当计数器的值⾃增(⾃减)到⽬标值时,产⽣中断,完成定时。

  • ⾃动重装寄存器:16位,存储写入的计数目标,当计数值等于⾃动重装值时,计时的时间到了,就会产⽣⼀个中断信号,并且清零计数器,计数器⾃动开始下⼀次的计数计 时,计数值等于⾃动重装值的中断⼀般叫做“更新中断”,这个更新中断之后就会通往 NVIC,再配置好NVIC的定时器通道,定时器上的更新中断就会得到CPU的响应 ,对应的事件叫做“更新事件”,更新事件不会触发中断,但可以触发内部其他电 路的⼯作 过程总结:从基准时钟,到预分频器,再到计数器,计数器⾃增,同时不断地与⾃动重装寄存 器进行比较,计数器和⾃动重装寄存器的值相等时,即计时时间到,这时会产生一个更新中断和更新事件,CPU响应更新中断,定时中断任务完成。

4.2主模式触发DAC

主模式触发DAC的功能:让内部的硬件在不受程序控制下实现自动运行

用途:在我们使用DAC的时候,可能会用DAC输出一段波形,那么我们需要每隔一段时间来触发一次DAC,让它输出下一个电压点,如果按照正常思路实现此功能,应为先设置一个定时器产生中断,每隔一段时间在中断程序中调用代码手动触发一次DAC转换,然后DAC输出,虽然这样可以实现此功能,但会使主程序处于频繁被中断的状态,这便会影响主程序的运行和其他中断响应,所以定时器设计了一个主模式,使用这个主模式可以把定时器的更新事件,映射到触发输出TRGO的位置,然后TRGO直接接到DAC的触发转换引脚上,这样定时器的更新就不需要再通过中断来触发DAC转换了,仅需要把更新事件通过主模式映射到TRGO,TRGO就会直接去触发DAC

4.3 通用定时器的结构及功能

  • 时基单元:同上

  • 内部时钟选择和主从触发模式:

可以在TIM2的ETR引脚,也就是PA0上接一个外部方波时钟,然后配置一下内部的极性选择、边沿检测和预分频器电路,在配置下输入滤波电路,这两个电路可以对外部时钟进行一定的整型,可以对输入的波形进行滤波,同时也可以选择极性和预分频器,最后滤波后的信号,分两路,上面一路ETRF进入触发控制器,然后可以选择作为时基单元的时钟,如果想在ETR外部引脚提供时钟或者想对ETR时钟进行计数,把这个定时器当做计数器来用,那就可以配置上面一路电路,这一路称为“外部时钟模式2(如果使用外部时钟,首选ETR引脚外部时钟2的输入)。

下面的TRGI也可以提供时钟,它主要用作触发输入来使用,此触发输入可以触发定时器的从模式,当TRGI当做外部时钟来使用的时候,这一路就叫做“外部时钟模式1”,它的输入可以是ETR引脚、ITR信号、TL1F_ED(CH1引脚的边缘、CH1引脚、CH2引脚)、TL1FP1、TL2FP2。

定时器编码器接口,可以读取正交编码器的输出波形。

  • 定时器主模式输出:可以把内部的一些事件映射到TRGO引脚上,用于触发其它定时器、DAC或者ADC。

  • 输出比较电路:分别对应CH1到CH4引脚,可以用于输出PWM波形,驱动电机

  • 输入捕获电路:四个通道,对应CH1到CH4引脚,可以用来测量输入方波的频率,中间的寄存器是捕获/比较寄存器,是输入捕获和输出比较电路共用的,因为输入捕获和输出比较不能同时使用,所以寄存器是共用的,引脚也是共用的。

4.4 高级定时器的结构及功能

  • 重复次数计数器:实现每隔几个计数周期才发生一次更新事件和更新中断。

  • DTG:死区生成电路,在开关切换的瞬间,产生一定时长四区,让桥臂上下管全都关断,防止直通现象。

  • 输出引脚:输出引脚由原来的一个,变为两个互补的输出,可以输出一对互补的PWM波。

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

5. 定时中断基本结构概括

6. 预分频器时序

计数器计数频率:CK_CNT=CK_PSC / (PSC+ 1)

注:CK_CNT--定时器时钟

CK_PSC--定时器时钟源

PSC--预分频值

7. 计数器时序

计数器溢出频率:CK_CNT_OV = CK_CNT / (ARR +1)=CK_PSC / (PSC + 1) / (ARR +1)

注:CK_CNT--定时器时钟

ARR自动重载值

CK_PSC--定时器时钟源(这里是72MHz)

PSC--预分频值


计数器无预装时序

更改了自动加载寄存器,由FF改为36,计数值的目标值由FF变为36,所以计到36以后,直接更新开始下一轮计数。


有预装寄存器

在计数中途,把自动加载寄存器计数目标由F5改成36,但影子寄存器才是真正起作用的,所以计数目标还是到F5产生更新事件,同时被更改的36才被传递到影子寄存器,在下一个技术周期36才生效。影子寄存器的目的是为了让值的变化和更新事件同步发生,放值在运行途中更改造成错误。

8. RCC时钟树

RCC时钟数是STM32中用来产生和配置时钟,并且把配置好的时钟发送到各个外设的系统,时钟是所有外设运行的基础,所以时钟是最先需要配置的东西,在程序主函数之前会执行一个SystemInit函数,这个函数就是用来配置时钟树的。

  • 时钟树分为两部分,左边为时钟的产生电路,右边是时钟的分配电路。中间的SYSCLK是系统时钟72MHz。

  • 时钟产生电路有四个震荡源,分别是内部的8MHz高速RC振荡器、外部的4--16MHz高速石英晶体振荡器(晶振,一般接8MHz)、外部的32.768KHz低速晶振(给RTC提供时钟)、内部的40KHz低俗RC振荡器(给看门狗提供时钟)

  • 高速晶振是用来提供系统时钟,AHB、APB1、APB2的时钟都是源于这两个高速晶振,外部晶振比内部RC振荡器更稳定。

  • CSS:时钟安全系统,负责切换时钟,可以检测外部时钟的运行状态,一旦外部时钟失效,自动把外部时钟切换为内部时钟。

  • 时钟分配电路,首先系统时钟72MHz进入AHB总线,AHB总线有预分频器,在SystemInit里配置的分配系数为1,则AHB的时钟就是72MHz,然后进入APB1总线,如果分频系数为2,APB1总线的时钟就为72MHz/2=36MHz,APB2总线,如果分频系数为1,时钟为72MHz

注:晶振全名叫晶体振荡器,每个单片机系统里都有晶振,晶振是由石英晶体经过加工并镀上电极而做成的,主要的特性就是通电后会产生机械震荡,可以给单片机提供稳定的时钟源,晶振提供时钟频率越高,单片机的运行速度也就越快。晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值