计时器
6.1 TIM
TIM简介
TIM(Timer)定时器
定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断
16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时
不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能
根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型
补充:
在 STM32 系列 MCU 的定时器中,时基单元是指由 16 位计数器、预分频器和自动重装寄存器三部分组成的基本计时单元。具体说明如下:
1. 16 位计数器:它是定时器的核心部分,用于对时间进行计数。计数器的计数范围是 0 到 65535,当计数器的值达到最大值时,就会重新从 0 开始计数。
2. 预分频器:它是用来分频计数器时钟信号的一个寄存器,可以将输入时钟信号分频后输出。预分频器的输出作为计数器的输入时钟信号,用于控制计数器的计数频率。预分频器的分频系数需要根据实际应用需求进行设置,可以使计数器的计数频率变得更低,从而实现更长的定时时间。
3. 自动重装寄存器:它是一个可编程的寄存器,用于对计数器的最大计数范围进行设置。当计数器的值达到自动重装寄存器中设置的值时,计数器的值就会被自动重置为 0,重新开始计数。因此,自动重装寄存器的值也可以决定定时器的时间周期,通过适当设置自动重装寄存器的值,可以实现所需的定时时间。
综上所述,时基单元是 STM32 系列 MCU 定时器中的核心组成部分,它通过计数器、预分频器和自动重装寄存器的协同工作,实现定时器的计时和控制。通过合理选择和配置这三个部分的参数,可以实现不同的定时要求。
定时器类型
类型 | 编号 | 总线 | 功能 |
---|---|---|---|
高级定时器 | TIM1、TIM8 | APB2 | 拥有通用定时器全部功能,并额外具有重复计数器、死区生成、互补输出、刹车输入等功能 |
通用定时器 | TIM2、TIM3、TIM4、TIM5 | APB1 | 拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能 |
基本定时器 | TIM6、TIM7 | APB1 | 拥有定时中断、主模式触发DAC的功能 |
•STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4
•高级定时器可用以为三相无刷电机设计
基本定时器
基本定时主模式触发 DAC 的功能是指使用定时器的基本定时功能来触发 DAC 的主模式输出,从而定期输出模拟信号。能让内部硬件在不受程序的控制下实现自动运行
通用定时器
1)三输入异或门:
三输入异或门(Three-input Exclusive OR Gate)是一种具有三个输入端的逻辑门,它的输出与三个输入端中恰好一位是高电平(1)的输入端有关,如果这样的输入只有一个,则输出为高电平(1),否则输出为低电平(0)。它的真值表如下:
A | B | C | A ⊕ B ⊕ C |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 0 |
1 | 1 | 1 | 1 |
2)输入滤波器和边沿检测器
输入滤波器用于去除输入信号中的毛刺和噪声,保留有效信号以供后续处理。常见的输入滤波器包括低通滤波器、带通滤波器和高通滤波器等。
边沿检测器则用于检测输入信号的上升沿和下降沿,以便触发相应的处理程序。可以将边沿检测器看作是一个逻辑门,当输入信号的电平变化到达一定阈值时,输出逻辑 1,否则输出逻辑 0。
在数字电路中,输入滤波器和边沿检测器通常用于处理数字输入设备如按钮、开关、传感器等的信号。输入滤波器可以用于去除由信号线干扰、电路自身噪声等原因造成的信号抖动,以减少系统的误触发。而边沿检测器则可以用于检测按钮的短按、长按等事件,或者检测传感器输入信号的变化来触发相应的操作。
在嵌入式系统中,输入滤波器和边沿检测器通常可以通过定时器或外部中断实现。例如,可以通过设置定时器的计数频率和计数周期,来周期性地对输入信号进行采样和滤波。而边沿检测器则可以通过配置外部中断来实现对输入信号的检测和触发相应的中断处理程序。
高级定时器
定时中断基本结构
预分频器时序
•计数器计数频率:CK_CNT = CK_PSC / (PSC + 1)
计数器时序
•计数器溢出频率:CK_CNT_OV = CK_CNT / (ARR + 1) = CK_PSC / (PSC + 1) / (ARR + 1)
T c y c l e = ( P S C + 1 ) × ( A R R + 1 ) 72 M H z T_{cycle} = \frac{(PSC + 1) \times (ARR + 1)}{72MHz} Tcycle=72MHz(PSC+1)×(ARR+1)
1)计数器无预装时序
2)计数器有预装时序
RCC时钟树
RCC(Reset and Clock Control)是STM32中的时钟控制模块,是实现芯片内部时钟分配和控制的核心组成部分。在STM32中,各个模块的时钟都是由RCC模块产生和分配的,SystemInit就是用来配置时钟树的。
外部晶振相对于内部时钟(如HSI)来说,稳定性更高,精度更高。因此,对于那些需要高精度时钟的应用,我们通常会使用外部晶振。