STM32(G4)高级定时器的应用(计数模式)的原理
目录
概述
1 计数模式介绍
1.1 增计数模式
1.1.1 功能介绍
1.1.2 波形案例分析
1.2 减计数模式
1.2.1 功能介绍
1.2.2 波形案例分析
1.3 中对齐模式(上/下计数)
1.3.1 功能介绍
1.3.2 波形案例分析
2 重复计数器值
概述
本文主要介绍STM32高级定时器的计数模式下的应用原理,STM32微控制器的高级定时器模块通常指的是TIM1-TIM8定时器模块,这些定时器模块具有更高级的功能和灵活性,可用于各种应用场景。以下是一些常见的高级定时器应用:
-
PWM输出:高级定时器可以用于生成PWM信号,控制电机速度、LED亮度等。通过配置定时器的各种参数,如计数值、分频系数、占空比等,可以实现不同频率和占空比的PWM输出。
-
编码器接口:高级定时器可以用于实现编码器接口功能,用于读取旋转编码器的脉冲信号,从而实现位置和速度的测量。
-
输入捕获:高级定时器可以用于捕获外部信号的上升沿或下降沿,用于测量脉冲的宽度、计数频率等应用。
-
输出比较:高级定时器可以用于设置比较值,当定时器计数达到比较值时产生中断或触发输出比较事件。
-
定时器中断:通过配置定时器的中断使能和中断优先级,可以实现定时器定时中断功能,用于定时执行特定任务。
1 计数模式介绍
1.1 增计数模式
1.1.1 功能介绍
在向上计数模式下, 其执行流程如下:
1) 计数器从0计数到自动重新加载值(对象的内容TIMx_ARR寄存器)
2) 从0重新启动并生成计数器溢出事件。
3) 如果使用重复计数器,则在重复计数器寄存器中编程的次数重复计数后生成更新事件(UEV)(TIMx_RCR) + 1。否则在每次计数器溢出时生成更新事件。
在TIMx_EGR寄存器中设置UG位(通过软件或使用从模式控制器)也会生成一个更新事件。
通过在TIMx_CR1寄存器中设置UDIS位,软件可以禁用UEV事件。这是为了避免在预加载寄存器中写入新值时更新影子寄存器。然后,在将UDIS位写入0之前不会发生更新事件。然而,计数器从0开始重新启动,以及预分频器的计数器(但预分频率不改变)。另外,如果URS位(更新请求选择)在设置了TIMx_CR1寄存器,设置UG位生成一个更新事件UEV,但没有设置UIF标志(因此不会发送中断或DMA请求)。
当发生更新事件时,所有寄存器都被更新,更新标志(UIF位在TIMx_SR寄存器)被设置(取决于URS位):
•用TIMx_RCR寄存器的内容重新加载重复计数器;
•自动加载阴影寄存器更新为预加载值(TIMx_ARR),
•用预加载值(TIMx_PSC寄存器的内容)重新加载预缩放器的缓冲区。
1.1.2 波形案例分析
下图显示了TIMx_ARR = 0x36(十进制: 54 )时不同时钟频率下计数器行为的一些示例。
1)系统时钟1分频的时钟波形图
2) 系统时钟2分频的时钟波形图
3) 系统时钟4分频的时钟波形图
1.2 减计数模式
1.2.1 功能介绍
在下降计数模式下,其执行步骤如下:
1)计数器从自动重新加载值(对象的内容)开始计数TIMx_ARR寄存器)降为0,然后从自动重新加载值重新启动,并生成计数器下溢事件。
2)如果使用重复计数器,则在重复计数器寄存器中编程的次数重复计数后生成更新事件(UEV)(TIMx_RCR) + 1。否则,在每个计数器下流处生成更新事件。
3)在TIMx_EGR寄存器中设置UG位(通过软件或使用从模式控制器)也会生成一个更新事件。
4) 通过设置TIMx_CR1寄存器中的UDIS位,软件可以禁用UEV更新事件。这是为了避免在预加载寄存器中写入新值时更新影子寄存器。然后,在将UDIS位写入0之前不会发生更新事件。然而,计数器从当前的自动重新加载值重新启动,而预分频器的计数器从0重新启动(但预分频率不会改变)。
5)如果设置了TIMx_CR1寄存器中的URS位(更新请求选择),则设置UG位生成一个更新事件UEV,但没有设置UIF标志(因此没有中断或发送DMA请求)。这是为了避免在清除捕获事件上的计数器时同时生成更新和捕获中断。
当发生更新事件时,所有寄存器都被更新,更新标志(UIF位在TIMx_SR寄存器)被设置(取决于URS位)):
• 用TIMx_RCR寄存器的内容重新加载重复计数器。
• 用预加载值(TIMx_PSC寄存器的内容)重新加载预缩放器的缓冲区。
• 自动加载活动寄存器更新为预加载值(内容)TIMx_ARR注册)。请注意,自动重新加载是在重新加载计数器之前更新的,因此下一个周期是预期的。
1.2.2 波形案例分析
下图显示了TIMx_ARR = 0x36时不同时钟频率下计数器行为的一些示例。
1)系统时钟1分频
2)系统时钟2分频
3) 系统时钟4分频
1.3 中对齐模式(上/下计数)
1.3.1 功能介绍
在居中对齐模式下,计数器从0计数到自动重新加载值(TIMx_ARR寄存器的内容)—1,生成计数器溢出事件,然后从自动重新加载值计数到1并生成计数器下溢事件。然后重新从0开始计数。
当TIMx_CR1寄存器中的CMS位不等于00时,中心对齐模式激活。输出中配置的通道输出比较中断标志设置为:
1)计数器向下计数(居中对齐模式1,CMS = 01),
2)计数器向上计数(居中对齐模式2,CMS = 10),
3)计数器向上计数和向下计数(居中对齐模式3,CMS = 11)。
在这种模式下,不能写TIMx_CR1寄存器中的DIR方向位。它由硬件更新并给出计数器的当前方向。更新事件可以在每个计数器溢出和计数器下溢时生成,也可以通过在TIMx_EGR寄存器中设置UG位(通过软件或使用从模式控制器)生成更新事件。在这种情况下,计数器重新开始计数0,以及预分器的计数器。
通过在TIMx_CR1寄存器中设置UDIS位,软件可以禁用UEV更新事件。这是为了避免在预加载寄存器中写入新值时更新影子寄存器。然后,在将UDIS位写入0之前不会发生更新事件。但是,计数器根据当前的自动重新加载值继续向上和向下计数。
此外,如果设置了TIMx_CR1寄存器中的URS位(更新请求选择),则设置UG位生成UEV更新事件,但不设置UIF标志(因此没有中断或中断发送DMA请求)。这是为了避免在清除捕获事件上的计数器时同时生成更新和捕获中断。
当发生更新事件时,所有寄存器都被更新,更新标志(UIF位在TIMx_SR寄存器)被设置(取决于URS位):
•用TIMx_RCR寄存器的内容重新加载重复计数器
•用预加载值(TIMx_PSC寄存器的内容)重新加载预缩放器的缓冲区
•自动加载活动寄存器更新为预加载值(内容TIMx_ARR注册)。请注意,如果更新源是计数器溢出,则在重新加载计数器之前更新自动加载,以便下一个周期是预期的(计数)
1.3.2 波形案例分析
下图显示了不同时钟频率下计数器行为的一些示例。
1)系统时钟1分频,TIMx_ARR = 0x6
2)系统时钟4分频,TIMx_ARR = 0x36
2 重复计数器值
通过更新事件(UEV)是如何根据计数器溢出/下溢生成的。它实际上只在重复计数器达到零时生成。这在产生PWM信号时很有用。这意味着数据从预加载寄存器传输到影子寄存器(TIMx_ARR自动重新加载寄存器,TIMx_PSC预调量寄存器,但也TIMx_CCRx捕获/比较寄存器在比较模式)每N+1计数器溢出或下溢,其中N是TIMx_RCR重复计数器寄存器中的值。
重复计数器递减:
•在计数模式下,每个计数器溢出时,
•在计数模式下,每个计数器下流量
•在每个计数器溢出和每个计数器下溢在中心对齐模式。
虽然这将最大重复次数限制在32768个PWM周期,但它使得每个PWM周期可以更新两次占空比。在居中对齐模式下,每个PWM周期只刷新比较寄存器一次,最大分辨率为由于图案的对称性。
重复计数器是自动加载类型;重复率由TIMx_RCR寄存器值定义。当更新事件由软件(通过在TIMx_EGR寄存器中设置UG位)或硬件通过从模式控制器生成时,无论重复计数器的值是多少,它都会立即发生,并且重复计数器会用TIMx_RCR寄存器的内容重新加载。
在居中对齐模式下,对于RCR的奇数值,更新事件发生在溢出或下溢,这取决于何时写入RCR寄存器以及何时启动计数器:如果在启动计数器之前写入RCR,则UEV发生在下溢。如果RCR是在启动计数器后写入的,则UEV发生在溢出上。
例如,对于RCR = 3,根据何时写入RCR,每4次溢出或下溢事件生成UEV。