1、定时器原理
单片机定时器的工作原理基于计数器的操作。它接收一个稳定的时钟信号(通常由单片机内部的晶体振荡器提供),并在每个时钟周期结束时增加计数器的值。当计数器的值达到预设的阈值时,定时器会触发一个中断或产生一个特定的输出信号,然后可能重置计数器并继续计数。
在作为定时器使用时,计数器对内部时钟信号进行计数,从而测量时间间隔。而当作为计数器使用时,它则对外部输入的信号进行计数,如脉冲信号的频率或数量。
2、 定时器关键模块
时钟源模块:
- 定时器需要一个时钟源来驱动其计数。时钟源可以是内部时钟(如系统时钟经过预分频后得到的时钟),也可以是外部时钟(如从外部引脚输入的时钟信号)。时钟源模块负责选择和配置这些时钟源。
预分频器(Prescaler):
- 预分频器用于对时钟源进行分频,以产生定时器计数所需的更低频率的时钟。通过调整预分频器的值,可以控制定时器的计数速度,从而改变定时时间。
计数器(Counter):
- 计数器是定时器的核心部分,它根据时钟源的频率和预分频器的设置进行计数。计数器的值可以是递增的,也可以是递减的(取决于定时器的配置)。当计数器的值达到某个预设的阈值(自动重载值)时,可以触发中断、更新事件或重置计数器。
自动重载寄存器(Auto-Reload Register, ARR):
- 自动重载寄存器存储了计数器达到上限后应该重新加载的值。这个值决定了定时器的定时周期。在定时器更新事件发生时,计数器的值会被自动重置为自动重载寄存器中的值,从而开始下一个计数周期。
捕获/比较寄存器(Capture/Compare Registers, CCR):
- 捕获/比较寄存器用于实现输入捕获和输出比较功能。在输入捕获模式下,它们用于存储外部信号的边沿时间戳。在输出比较模式下,它们与计数器的值进行比较,以触发输出信号的翻转或生成PWM波形。
输出控制模块:
- 输出控制模块负责根据捕获/比较寄存器的值和定时器的配置来控制输出引脚的状态。这包括PWM波形的生成、输出信号的翻转等。
中断/DMA请求模块:
- 当定时器发生特定事件(如计数器溢出、输入捕获、输出比较匹配等)时,中断/DMA请求模块会生成中断请求或DMA请求。这些请求可以被CPU或DMA控制器处理,以执行相应的中断服务程序或数据传输操作。
控制和状态寄存器:
- 控制和状态寄存器用于配置定时器的各种参数(如计数模式、时钟源选择、预分频器值等),并存储定时器的当前状态(如是否发生中断、是否处于更新事件等)。
3、定时器重要部分
基本定时器
几乎没有任何输入、输出通道,常用于实现基本的定时、计数功能。
在STM32系列中,某些型号的基本定时器可能标记为TIM6、TIM7等。
基本定时器定时中断实验:
首先通过自定义的中断初始化函数对基础定时器进行初始化,配置定时器句柄结构体的相关成员变量赋值,通过基础时钟初始化函数对基础时钟初始化,通过基础时钟中断并启动计数器函数进行使能该基础时钟,再通过定时器基础msp初始化函数对时钟和中断进行使能及配置,最后通过对应定时器中断服务函数进行中断处理。
通用定时器
具备多路独立的捕获和比较通道,可以完成定时、计数、输入捕获、输出比较等功能。
在STM32系列中,常见的通用定时器包括TIM2、TIM3、TIM4、TIM5等。
通用定时器PWM(脉冲宽度调制)输出实验:
通用定时器输入捕获实验:
通用定时器脉冲计数实验:
高级定时器
除具备通用定时器的功能外,还具备死区控制的互补信号输出、紧急刹车关断输入等功能,适用于电机控制和数字电源设计等复杂应用。
在STM32系列中,常见的高级定时器包括TIM1、TIM8等
高级定时器输出指定个数PWM实验:
高级定时器输出比较模式实验:
高级定时器互补输出带死区控制实验:
高级定时器PWM输入模式实验:
定时中断,PWM输出比较,输入捕获,互补输出带死区控制,pwm输入捕获。
滴答定时器
滴答定时器(SysTick)可以作为系统时钟,也可作为延时功能时钟源。在实时操作系统中,滴答定时器通常作为心跳时钟,提供系统的节拍信号。
在stm32移植Free RTOS时,有个重要的步骤就是配置滴答定时器。
\0、总结
定时器是一个难点,牵扯功能巨多,还有待学习。