定时器感觉是个高级外设,睡了一觉起来顿悟了。
定时器就是一个计数器,不停的+1+1+1,直到一个周期记满,其实就是和我们的表一样,计数源就是秒针,一圈转完的时候就会有一个事件,可以是清零,可以是进位,反正就是完成了,诸如此类的可以看分针时针,就完成了级联。其实就是计数+在进位时的各种事件,输出以后告诉外设或者程序去执行任务。就把握住计数源和分频以及各种更新事件,再难的定时器外设都能玩转。
这是一个基本的定时器,有自动重装功能,就是计数可以循环,后面就可以分频,以及可以级联,也会有各种事件。
这个就是系统框图
计数单元的核心组件是一个 16bit 递增计数器 CNT 和一个 16bit 自动重载寄存器 ARR,计数器的时钟可通过预分频器进行分频。
预分频器对 CK_PSC 时钟进行分频,得到计数时钟 CK_CNT,以驱动计数器计数。分频系数通过 BTIMx_PSC 寄存器进行设置,支持 1、2、3、4、…、65536 分频。
计数器可工作在单次计数或连续计数模式下,通过控制寄存器 BTIMx_CR1 的 ONESHOT 位域来选择。当设置BTIMx_CR1 寄存器的 EN 位域为 1 时,计数器开始递增计数,注意实际的计数器使能信号 CNT_EN 在 EN 置 1 的一个时钟周期后被置 1。
预分频器,顾名思义,就是在一个计数器之前增加一个分频器,将高频的时钟信号分频成低频的时钟信号,再送入计数器。这个分频的过程,就叫做预分频。
降低计数器的计数频率: 通过预分频,可以将高频的系统时钟降低到计数器所能承受的频率范围,从而提高计数器的精度和稳定性。
延长定时时间: 降低计数频率,意味着计数器需要更多的时钟周期才能溢出,从而延长定时时间。
实现更细粒度的定时: 通过设置不同的分频比,可以实现不同精度的定时。
编程实现: 在程序中通过计数的方式实现分频。中断方式: 利用定时器中断,在中断服务程序中进行计数。
定时器: 延长定时时间,实现更精确的定时。
频率测量: 将未知频率的信号作为输入,通过测量计数器的计数次数,计算输入信号的频率。
脉宽调制(PWM): 通过改变分频比,实现PWM占空比的调节。
时钟源频率越高,定时器的分辨率越高,可以实现更精确的定时。预分频比越大,计数频率越低,定时周期越长。自动重载值越大,计数周期越长。重复计数器值越大,产生更新事件的总次数越多,可以实现更长时间的定时。32位定时器相比16位定时器,可以表示更大的计数范围,从而实现更长的定时周期。
内部时钟: 来自系统内部的时钟源,通常是较为稳定的时钟,适合用于高精度定时。
外部时钟: 来自外部的时钟源,可以是外部电路产生的信号,也可以是其他定时器的输出。这种方式可以实现定时器之间的同步,或者将定时器与外部事件关联起来。
内部触发时钟: 使用一个定时器作为另一个定时器的预分频器,可以实现更复杂的定时功能。
外部时钟模式 2(External Trigger Input)是一种将定时器的计数与外部事件同步的模式。通过将外部时钟信号输入到定时器的 ETR 引脚,可以让定时器根据外部事件的发生来计数或产生中断,从而实现更精确的定时控制。这个在cbbeMX里面也不少见,不过没见人用过。下面这些步骤就是这个定时器的工作原理
外部时钟信号输入: ETR 引脚接收外部的时钟信号,这个信号可以来自其他模块、传感器或者外部电路。
时钟分频: 通过配置 TIMx_SMCR 寄存器中的 ETPS 位,可以对输入的外部时钟信号进行分频,从而降低计数频率。
滤波: 通过配置 TIMx_SMCR 寄存器的 ETF 位,可以对输入的外部时钟信号进行滤波,以减少噪声干扰。
极性选择: 通过配置 TIMx_SMCR 寄存器的 ETP 位,可以选择上升沿触发、下降沿触发或双边沿触发。
计数控制: 当 ETR 引脚上的信号发生变化时,定时器会根据配置的模式进行计数或产生中断。
哈哈哈,就是这个010,011
可以触发ADC
TRGO(Trigger Output)是定时器的一个重要功能,它可以将定时器的内部事件作为触发信号输出,从而实现多个定时器之间的同步或级联。通过合理配置TRGO,我们可以构建出复杂而精确的定时系统。
复位 (UG):当写入EGR寄存器的UG位时,会产生一个复位信号,可以用于复位其他定时器或同步其他模块。
使能: 定时器使能信号可以作为TRGO,用于同步启动多个定时器。
更新: 定时器计数器更新事件可以作为TRGO,可以用于实现级联定时器。
主定时器的更新事件作为从定时器的时钟源,实现不同频率的定时。多个定时器通过TRGO同步启动,实现精确的协同工作。利用TRGO产生PWM信号,控制电机、伺服等执行机构。TRGO可以触发ADC采样,实现周期性的数据采集。TRGO可以用于实现通信协议的同步。
假设TIM1为主定时器,TIM2为从定时器。我们可以将TIM1的更新事件作为TIM2的时钟源,实现TIM2的频率是TIM1的1/N(N为分频系数)。
配置TIM1: 设置TIM1的计数频率和自动重载值,使之产生所需的更新频率。
配置TIM2: 将TIM2的时钟源设置为外部时钟模式,并将外部时钟输入连接到TIM1的TRGO输出。设置TIM2的预分频器,实现频率分频。
假期来灵活的使用定时器完成一个闹钟