1.基本定时器:像 TIM6 和 TIM7,只具备基础的计数功能,没有外围的输入捕获或输出比较功能。主要用于定时和触发一些基础事件,例如可触发 DAC 转换启动,也能作为其他通用定时器的时钟基准 。它拥有 16 位递增计数器(计数值范围是 0 到 65535)和 16 位预分频器(分频系数在 1 到 65536 之间),在计数器溢出产生更新事件时,可产生中断或 DMA 请求 。
2.通用定时器:例如 TIM2、TIM3、TIM4、TIM5 等。功能比基本定时器更为丰富,除了基本的定时功能外,还具备外围事件的输入捕获、输出比较、PWM 输出等功能,同时支持编码器接口功能,可用于读取旋转编码器信息 ,也能在更新事件、触发事件、输入捕获、输出比较时产生中断或 DMA 请求 。
3.高级定时器:如 TIM1、TIM8 等,提供了更为复杂的功能,常用于电机控制领域 。它支持更高分辨率的 PWM 输出,具备死区时间管理功能,可有效防止电源瞬间短路,还拥有多重输入捕获和输出比较功能 。
STM32 定时器的工作原理
1.核心机制:当定时器 TIM 被启用后,其内部的计数器会依据预分频器和时钟源的配置定时进行增加或减少(可选择向上或向下计数) 。一旦计数器值达到设定的自动重装载寄存器(ARR)的值时,根据定时器的具体设置,计数器可能会重置(即溢出),并且可能触发中断或其他事件,比如 DMA 传输请求 。
2.预分频器(psc):定时器的输入时钟(通常来自系统时钟或外部时钟源)首先会经过预分频器进行频率降低 。预分频器实际上是一个除法计数器,它的输出决定了 TIM 计数器的计数速率 。通过对输入时钟信号进行分频,降低了定时器计数器的计数速率,从而扩展了定时器的计时范围,使其可用于较长时间的计时 。
3.自动重装载寄存器(ARR):ARR 决定了定时器的上溢点 。在向上计数模式下,当计数器的值达到 ARR 设定的值后,计数器会重置为 0;在向下计数模式下,计数器会重置为 ARR 的值 。同时,到达 ARR 值通常会产生一个更新事件,该事件可用于触发中断,执行特定的服务例程 。在使用定时器产生 PWM 信号时,ARR 的值确定了 PWM 周期的长度 。
4.计数方向:计数器能够配置为向上计数或向下计数,具体选择取决于特定的应用需求 。比如在 PWM 输出应用中,通常使用向上计数模式 。
5.捕获 / 比较单元:定时器的输入捕获功能允许其在外部事件(如引脚电平变化)发生时捕获计数器的值,通过这种方式可测量外部信号的频率或宽度。输出比较单元则允许定时器在计数器达到特定值时触发一个动作或事件,例如输出电平翻转或产生中断 。
6.PWM 功能实现:利用输出比较模式,定时器能够生成 PWM 波形 。当计数器值等于输出比较寄存器(CCRX)设置的比较值时,输出管脚的状态会发生改变,进而生成 PWM 信号 。通过调整CCRX 的值,可以改变 PWM 信号的占空比;改变 ARR 的值,则可以改变 PWM 信号的频率 。
7.中断和 DMA 交互:定时器在 ARR 溢出或捕获 / 比较事件发生时能够触发中断 。此外,它还可以与 DMA 控制器配合进行内存数据交换,这有助于减轻 CPU 的负担,尤其在处理大量数据传输时,能显著提高系统的运行效率 。
STM32 定时器的应用场景
1.定时控制:这是定时器最基本的应用,可用于实现精确定时,例如每隔一定时间执行一次特定任务,像周期性的数据采集、系统状态监测等 。通过合理配置定时器的预分频器和自动重装载寄存器的值,能够精确控制定时时间 。
2.PWM 输出:在电机控制、LED 亮度调节等场景中广泛应用 。通过调整 PWM 信号的占空比,可以控制电机的转速、LED 的亮度等 。例如在直流电机控制中,利用 PWM 信号控制电机的输入电压,从而实现对电机转速的精确调节 。
3.输入捕获:可用于测量外部信号的频率、脉冲宽度等参数 。比如在测量传感器输出的脉冲信号时,通过定时器的输入捕获功能获取脉冲的时间间隔,进而计算出信号的频率或脉冲宽度,为后续的数据处理和分析提供依据 。
4.编码器接口:在电机位置控制、速度测量等应用中,通过连接旋转编码器,利用定时器的编码器接口功能,可以实时获取电机的旋转位置和速度信息,实现对电机的精准控制 。