新手必看!!STM32定时器简介


  

一、定时器有哪些?

在这里插入图片描述
这篇文章我们主要讲基本定时器、通用定时器以及高级定时器。
每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作。

二、定时器的工作原理

  例如:基本定时器的计数器只能进行向上计数,计数器 根据频率进行向上计数,即每来一个 CNT脉冲,CNT 值就加 1。当 CNT值与ARR的设定值相等时计数器就会重新从 0 开始计数并生成计数器上溢事件(更新事件),如此重复以上过程。

三、每个定时器的功能以及使用场景

1. 基本定时器(Basic Timers)

  功能: 基本定时器具有较为简单的功能,通常用于基本的计时和触发任务。
  用途场景:定时、触发输出直接驱动DAC。

2. 通用定时器(General-Purpose Timers)

  功能: 通用定时器提供了更多的功能和配置选项,包括PWM生成、脉冲计数、输入捕获、输出比较等功能。
  用途场景: 适用于需要更复杂的定时功能的应用,如PWM控制、频率测量、脉冲计数等。测量输入信号的脉冲长度(输入捕获)或者 产生输出波形 ( 输出比较 和 PWM )等。

3. 高级定时器(Advanced Timers)

  功能: 高级定时器除了通用定时器的功能外,还支持更高级的特性,如相位锁定回路(PLL)、编码器接口、三角波生成等。
  用途场景: 适用于需要更高级、复杂计时功能的应用,例如音频处理、电机控制、编码器接口等。重复计数器、死区生成、互补输出、刹车输入等功能。

四、定时器功能详表

以STM32F103系列为例,具体开发板请查看开发手册。

类别定时器总线位数计数方向预分频系数是否可以产生DMA捕获/比较通道互补输出
基本定时器TIM6 / TIM7APB116位向上1~65536可以0
通用定时器TIM2 /TIM3 /TIM4/ TIM5APB116位向上/向下/中央对齐1~65536可以4
高级定时器TIM1 /TIM8APB216位向上/向下/中央对齐1~65536可以4

五、定时器知识点

1. 影子寄存器(缓冲寄存器)

  简介以及功能:手册中框图有些寄存器带有阴影效果,这就代表这个寄存器拥有类似预分频器那样的缓冲机制,即拥有影子寄存器。
在硬件结构上实际上是有两个寄存器。源寄存器是我们可以进行读写操作的,例如这里的TIMx_PSC 寄存器就是源寄存器,而影子寄存器我们是无法操作的,由内部硬件使用,并且影子寄存器的值才是实际产生效果的。因此我们可以对预分频器的值进行实时更改,但是并不会实时生效,其值只有在下一更新事件发生时才会传入影子寄存器,从而被实际使用。

在这里插入图片描述

  影子寄存器是真正起作用的寄存器,实际功能上的值都是参考的影子寄存器而不是原寄存器,比如预分频寄存器,这个分频数看的是预分频寄存器影子寄存器上的,而不是预分频寄存器上的。又比如重载值寄存器,那个重载值是看的影子寄存器上的值,而不是原寄存器上的值。影子寄存器主要有一个缓冲的作用。

2. 寄存器缓冲作用

未设置缓冲:在原寄存器上用户设定的值->影子寄存器->work。
设置缓冲: 在原寄存器上用户设定的值->等待更新事件U发生->影子寄存器->work。

下面举个例子来更加通俗的理解缓冲作用!!

(1)未设置缓冲作用情况:
  设置LED灯1s亮,1s灭。假如定时器的计数方式为向上计数,且ARR重载值为99时正好定时为1s。当CNT=ARR值时定时时间1s到,灯亮。(加到够就跳回 0)我们不需要重新修改ARR寄存器的值,继续重装载为99,即可继续定时1s,灯灭。这时就算不设置缓冲作用也没问题。
  设置为LED灯1s亮,2s灭,不设置缓冲作用就会出现误差。如当CNT=ARR值时定时时间1s到,灯亮,但是后续要定时2s,所以要修改ARR寄存器的值为199,修改后立刻生效,开始计时。但是操作寄存器这个过程是需要时间的,即使时间很短,也是存在误差的。这种情况下所以就需要设置缓冲。

(2)设置缓冲作用的情况:
  如果设置了缓冲作用后,我们就可以提前将199写入ARR寄存器中,因为有缓冲作用,并不会立刻生效。会等到更新时间U发生后生效,更新时间u是在上一段定时时间到之后产生。

寄存器缓冲作用通过控制寄存器1位7来设置。
在这里插入图片描述

3. 计数器模式

在这里插入图片描述

(1)递增计数模式

  在递增计数模式下,计数器从0计数到自动重载值(TIMx_ARR寄存器的内容),然后重新从0开始计数并生成计数器上溢事件(更新事件)。

(2)递减计数模式

  在递减计数模式下,计数器从自动重载值(TIMx_ARR重载寄存器的内容)开始递减计数到0,然后重新开始从自动重载值开始计数并生成计数器下溢事件(更新事件)。

(3)中央对齐模式(递增/递减计数)

  在中心对齐模式下,计数器从0开始计数到自动重载值(TIMx_ARR寄存器的内容) - 1,生成计数器上溢事件;然后从自动重载值开始向下计数到1生成计数器下溢事件。之后从0开始重新计数。

4. 定时时间(溢出周期)计算

注意单位Tout为us。
在这里插入图片描述
arr:重装载值。
psc:预分频系数。
Tclk:定时器时钟频率。单位为Mhz。

假如定时1s,定时器时钟频率为72Mhz。则arr=9999,psc=7199时,Tout= (9999+1)*(7199+1) / 72=1000 000 us =1s。

5. 预分频系数的作用

  预分频系数(Prescaler)通常用于分频器件中,其作用是将输入信号的频率降低到更低的频率。这在很多电子设备中都很常见,比如微控制器、计数器、定时器等。通过灵活地调整预分频系数,可以根据具体需求生成所需频率的时钟信号,从而满足系统设计的要求。

  假设主时钟频率为 𝑓clk ,需要一个频率为 𝑓out的输出信号。通过设置预分频系数 𝑁,可以通过下面的公式计算输出信号频率:
在这里插入图片描述

  举个例子,假设你有一个微控制器,其输入时钟频率为10 MHz,但你需要在一个定时器中使用一个1 MHz的时钟信号。这时,你可以使用一个预分频器来将10 MHz的时钟信号分频为1 MHz的信号。如果设置预分频系数为9,那么每输入10个时钟脉冲,就输出一个时钟脉冲(10 000 /(9+1)=1000 hz)。这样,就可以获得1 MHz的时钟信号。

  设置不同的预分频系数会影响输出信号的频率。比如,如果将上面的例子中的预分频系数改为4,那么每输入5个时钟脉冲,就输出一个时钟脉冲,最终输出的频率将是输入频率的五分之一,即2 MHz。因此,预分频系数的选择直接影响了输出信号的频率。

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值