0%

6-1TIM定时中断

TIM简介

•TIM(Timer)定时器
•定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断
•16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时
•不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能
•根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型

定时器类型

类型编号总线功能
高级定时器TIM1、TIM8APB2拥有通用定时器全部功能,并额外具有重复计数器、死区生成、互补输出、刹车输入等功能
通用定时器TIM2、TIM3、TIM4、TIM5APB1拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能
基本定时器TIM6、TIM7APB1拥有定时中断、主模式触发DAC的功能

•STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4
不同的型号,定时器的数量一般是不同的。操作一个外设之前,要查询是否有这个外设。

基本定时器

基本定时器结构图
预分频器、自动重装载寄存器、CNT计数器共同构成了基本的计数计时单元,这块电路叫时基单元。
预分频器之前,连接的是基准计数时钟的输入,来到控制器。
由于基本定时器只能选择内部时钟,所以可以认为直接连到内部时钟CK_INT,内部时钟来自RCC的TIMxCLK,这里的频率值一般是系统的主频72MHz。
因此通向时基单元的计数基准频率为72MHz

预分频器对72MHz的计数时钟进行分频,比如预分频器寄存器写0,就是不分频,或者是1分频。此时输入频率=输出频率=72MHz。
如果预分频器写1,那就是2分频,输出频率=输入频率/2=36MHz。
写2,为3分频,输出频率=输入频率/3=24MHz。
(预分频器的值和实际的分频系数差1,实际分频系数=预分频器+1,预分频器是16位的,最大值为65535,也就是65536分频)

计数器对分频后的计数时钟进行计数,计数时钟每有一个上升沿,计数器的值+1,最大值是65535。超过65535,变为0。

自动重装寄存器存的是写入的计数目标。
在运行时,计数值不断自增,自动重装值是固定的目标,当计数值和自动重装值相等时,代表时间到了。
会产生中断信号,并且清零计数器。

主模式触发DAC模式,可以让内部硬件在不受到程序控制的情况下自动运行(可以减轻CPU负担)。
在使用DAC时,会用DAC输出一段波形,每隔一段时间触发依次DAC,让它输出下一个电压点。(定时器的更新不需要通过中断来触发DAC转换,只需要把更新时间通过主模式映射到TRGO,再通过TRGO触发DAC。无需软件参与)

基本定时器计时,只能向上计数。

通用定时器

基本定时器
通用定时器框图中,中间的部分和基本定时器是一样的。

通用定时器和高级定时器除了向上计数,还支持向下计数和中央对其模式。
(向下计数模式,就是从重装值开始,向下自减,直到0,回到重装值并且申请中断)
(中央对其模式,就是从0开始,向上自增,计数到重装值,申请中断,然后再向下自减,减到0,再申请中断)
通常使用向上计数模式,其他模式使用少。

上面部分是内外时钟选择和主从触发模式的结构。
对于基本定时器,定时只能选择系统内部时钟,即系统频率72MHz。
通用定时器还可以选择外部时钟。
第一个外部时钟是来自TIMx_ETR引脚上的外部时钟,即在PA0上接一个外部方波时钟,然后配置内部的极性选择、边沿检测和预分频电路,在配置输入滤波电路,可以对外部时钟进行整形。
滤波后的信号,分为2路,一路去ETRF进入触发控制器,可以选择作为时基单元的时钟。这一路叫外部时钟模式2。另一路去TRGI,用作触发输入来使用,可以触发定时器的从模式,叫做外部时钟模式1。

ITR信号的时钟信号来自其他定时器,实现定时器级联。

TI1F_ED,连接的是输入捕获单元的CH1引脚,也就是从CH1引脚获得时钟,上升沿和下降沿都有效,这个时钟还能通过TI1FP1和TI2FP2来获得。

对于时钟,通常使用内部的72MHz时钟,如果要使用外部时钟,首选ETR引脚外部时钟模式2的输入。

右下角可以用于输出PWM波形,驱动电机,左侧是输入捕获电路,有4个通道,对应CH1到CH4引脚。可以用于测输入方波的频率。
中间的捕获/比较寄存器,是输入捕获和输出比较电路公用的,输入捕获和输出比较不能同时使用,因此寄存器共用,引脚共用。

高级定时器

高级定时器
增加重复次数计数器,可以实现每隔几个计数周期,才发生一次更新时间和更新中断。(相当于对输出的更新信号做一次分频)

定时中断基本结构

定时中断基本结构

预分频器时序

预分频器时序
•计数器计数频率:CK_CNT = CK_PSC / (PSC + 1)

计数器时序

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

计数器无预装时序

计数器无预装时序

计数器有预装时序

计数器有预装时序