STM32通用定时器

一、通用定时器简介

对于Cortex-M3内核的STM32F1系列通常有8个16位定时器、0个32位定时器;而Cortex-M4内核的STM32F4系列通常拥有12个16位定时器;2个32位定时器。在此,我们以通用定时器TIM2到TIM5为例。
通用定时器包含一个 16 位或 32 位自动重载计数器,该计数器由可编程预分频器驱动。
它们可用于多种用途,包括测量输入信号的脉冲宽度(输入捕获)或生成输出波形(输出比
较和 PWM)。
使用定时器预分频器和 RCC 时钟控制器预分频器,可将脉冲宽度和波形周期从几微秒调制
到几毫秒。
这些定时器彼此完全独立,不共享任何资源。

(一)通用定时器TIM2~TIM5的特性
  • 16 位(TIM3 和 TIM4)或 32 位(TIM2 和 TIM5) 递增、递减和递增/递减自动重载计 数器(TIMx_CNT)。

  • 16 位可编程预分频器(TIMx_PSC),用于对计数器时钟频率进行分频 (即运行时修改),分频系数介 于 1 到 65536 之间。

  • 4 个独立通道(TIMx_CH1~4),可用于:
    (1)输入捕获
    (2)输出比较
    (3)产生PWM
    (4)输出单脉冲

  • 使用外部信号控制定时器且可实现多个定时器互连的同步电路。

  • 发生如下事件时生成中断/DMA 请求:
    (1) 更新:计数器上溢/下溢、计数器初始化(通过软件或内部/外部触发)
    (2) 触发事件(计数器启动、停止、初始化或通过内部/外部触发计数)
    (3) 输入捕获
    (4) 输出比较

  • 支持定位用增量(正交)编码器和霍尔传感器电路

  • 外部时钟触发输入或逐周期电流管理

(二)计数器模式
  • 通用计数器有三种计数方式:递增计数、递减计数、递增/递减计数计数。

  • 递增计数: 计数器从 0 计数到自动重载值(TIMx_ARR 寄存器的内容),然后重新 从 0 开始计数并生成计数器上溢事件。
    递增计数示意图

  • 递减计数: 计数器从自动重载值(TIMx_ARR 寄存器的内容)开始递减计数到 0, 然后重新从自动重载值开始计数并生成计数器下溢事件。
    递减计数示意图

  • 递增/递减计数: 计数器从 0 开始计数到自动重载值(TIMx_ARR 寄存器的内容)—1,
    生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从
    0 开始重新计数。
    递增/递减计数示意图

(三)通用计时器框图

通用定时器框图

1.时钟源

图中黄色方框内是为通用计数器提供的时钟,STM32F4系列的时钟来源有以下四种:

  • 内部时钟源(CK_INT):如果禁止从模式控制器(TIMx_SMCR 寄存器中 SMS=000),则 CEN 位、DIR 位 (TIMx_CR1 寄存器中)和 UG 位(TIMx_EGR 寄存器中)为实际控制位,并且只能通过软
    件进行更改(UG 除外,仍自动清零)。当对 CEN 位写入 1 时,预分频器的时钟就由内部时
    钟 CK_INT 提供。实际由APB1倍频产生。
  • 外部时钟源模式 1:当从模式控制器 (TIMx_SMCR )中的 SMS=111 时,可选择此模式。实际由蓝色方框中的TI1、TI2、TI3和TI4产生。
  • 外部时钟源模式 2:通过在 从模式控制器(TIMx_SMCR )寄存器中写入 ECE=1可选择此模式。实际由外部引脚TIMx_ETR经极性选择、边沿检测、预分频器和滤波后产生。注意:此模式仅适用于 TIM2、TIM3 和 TIM4。
  • 内部触发输入(ITRx):內部触发输入口ITR0、ITR1、ITR2和ITR3,用于定时器级联时由其他定时器产生。
2. CK_PSC 时钟和CK_CNT时钟
  • 如图红色方框所示,CK_PSC是由时钟源产生用于时基单元的时钟。
  • CK_CNT时钟是被时基单元中的PSC预分频器分频后产生的时钟、是最终作用于时基单元的时钟。
3. 时基单元

绿色方框内是时基单元部分
时基单元包括:

  • 计数器寄存器 (TIMx_CNT)
  • 预分频器寄存器 (TIMx_PSC)
  • 自动重载寄存器 (TIMx_ARR)

(1)计数器寄存器 (TIMx_CNT):根据我们所选择的计数模式进行计数。

(2)预分频器寄存器 (TIMx_PSC):预分频器可对计数器时钟频率进行分频,分频系数介于 1 到 65536 之间。该预分频器基于 16 位/32 位寄存器(TIMx_PSC 寄存器)所控制的 16 位计数器。由于该控制寄存器具有缓 冲功能,因此预分频器可实现实时更改。而新的预分频比将在下一更新事件发生时被采用。

(3) 自动重载寄存器 (TIMx_ARR):自动重载寄存器是预装载的。对自动重载寄存器执行写入或读取操作时会访问预装载寄存器。预装载寄存器的内容既可以直接传送到影子寄存器,也可以在每次发生更新事件 (UEV) 时传送到影子寄存器,这取决于 TIMx_CR1 寄存器中的自动重载预装载使能位 (ARPE)。当 计数器达到上溢值(或者在递减计数时达到下溢值)并且 TIMx_CR1 寄存器中的 UDIS 位为 0 时,将发送更新事件。该更新事件也可由软件产生。

(4)影子寄存器
在这里插入图片描述
如图所示:寄存器下方有阴影的寄存器为影子寄存器。我们可以理解为有影子的寄存器。实际上这个寄存器是对应着两个寄存器:一个是它的本体,称为预装载寄存器;一个是他的影子,就是影子寄存器了。实际存在的、我们可以直接操作的寄存器就是预装载寄存器,但是在程序执行过程中真正产生作用的却是影子寄存器。

4.输入捕获

图中蓝色方框中为输入捕获通道。在输入捕获通道中产生的信号经滤波和边沿检测后再经过预分频器,最后到达捕获/比较寄存器。捕获/比较寄存器检测到跳变沿后对计数器的值进行锁存,预分频器可以设置多少个跳变沿检测一次。

5.输出比较

图中紫色部分为输出比较部分,此功能用于控制输出波形,或指示已经过某一时间段。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值