首页 > 其他分享 >STM32 - 定时器1 - 定时器详解

STM32 - 定时器1 - 定时器详解

时间:2023-02-18 18:45:54浏览次数:48  
标签:定时器 模式 STM32 计数器 详解 寄存器 输入 时钟

目录

1. 什么是定时器

1.1 数量&来源

  STM32F4具备总共14个定时器(12个16bit定时器,2个32bit定时器)(递增、递减和递增/递减自动重载计数器),分别为:

  • 基本定时器:TIM6 & TIM7
  • 通用定时器:TIM2 ~ TIM5(TIM2 & TIM5位32bit计数器), TIM9 ~ TIM14
  • 高级定时器:TIM1 & TIM8

  定时器引脚皆由GPIO每个引脚配置为复用功能而来(GPIO每个引脚PA0-PA15 ... PG0-PG15, 最多可具有 16 个复用功能,输入/输出共用),如下图所示:
image

1.2 用途

  定时器具备多种用途,包括:

  • 输入捕获:测量输入信号的脉冲宽度
  • 输出比较:计数器模式
  • PWM:边缘或中间对齐模式
  • 单脉冲模式输出

  发生如下事件时生成中断/DMA 请求:

  • 更新:计数器上溢/下溢、计数器初始化(通过软件或内部/外部触发)
  • 触发事件(计数器启动、停止、初始化或通过内部/外部触发计数)
  • 输入捕获:
  • 输出比较:
    使用定时器预分频器和 RCC 时钟控制器预分频器,可将脉冲宽度和波形周期从 us → ms (调制)

2. 通用定时器框图

从如下定时的框图可以看出,定时器主要包括四个部分:

  • 输入时钟源:选择不同的时钟源
  • 时基单元:对时钟进行分频、计数等处理
  • 输入捕获:4个输入通道
  • 输出比较:输出控制

2.1 输入时钟

通用定时器的时钟来源通常有四种:

  • 内部时钟: CK_INT
  • 外部时钟模式 1:外部输入引脚TIx(x=1,2,3,4),计数器可在选定的输入信号上出现上升沿或下降沿时计数
  • 外部时钟模式 2:外部触发输入 ETR (External TRigger),计数器可在外部触发输入 ETR 出现上升沿或下降沿时计数。
  • 内部触发输入(ITRx,Internal TRigger(x=0,1,2,3))(编码器模式):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1作为另一个定时器Timer2的预分频器。


如上图,TIM1、TIM8、TIM10、TIM11使用的是APB2时钟,而其余定时器使用的是APB1时钟,具体可参考 STM32 - 时钟系统详解

2.2 时基单元

时基单元主要由三个寄存器组成:

计数器寄存器 (TIMx_CNT):记录分频后的时钟CK_CNT脉冲个数
预分频器寄存器 (TIMx_PSC):对计数器时钟频率进行分频,系数介于 1~65536 之间
自动重载寄存器 (TIMx_ARR):预装载,可选择立即生效或下一次发生更新事件时生效

工作流程:

  • 输入时钟的脉冲信号CK_PSC,经过PSC分频后,生成CK_CNT脉冲时钟;
  • 每个CK_CNT脉冲到来,寄存器TIMx_CNT计数 +1/-1(可设置为向上、向下、向上向下计数);
  • 当TIMx_CNT的值等于TIMx_ARR时,产生更新事件(UEV)

下图为 预分频器分频由 1 变为 2 时的计数器时序图

2.3 输入捕获/输出比较通道

1)输入阶段:

  • 输入阶段对相应的 TIx 输入进行采样,生成一个滤波后的信号 TIxF。
  • 然后,带有极性选择功能的边沿检测器生成一个信号 (TIxFPx),该信号可用作从模式控制器的触发输入,也可用作捕获命令。
  • 该信号先进行预分频 (ICxPS),而后再进入捕获寄存器

2)输出阶段:

  • 捕获/比较模块由一个预装载寄存器和一个影子寄存器组成。始终可通过读写操作访问预装载寄存器。
  • 在捕获模式下,捕获实际发生在影子寄存器中,然后将影子寄存器的内容复制到预装载寄存器中。
  • 在比较模式下,预装载寄存器的内容将复制到影子寄存器中,然后将影子寄存器的内容与计数器进行比较。

3. 模式配置

3.1 计数器模式

计数器模式,个人理解,就是时基电路中的工作模式,包括:

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

递增计数器时序图,2 分频内部时钟(ARR=36):

递减计数器时序图,2 分频内部时钟(ARR=36)

中心对齐计数器时序图,2 分频内部时钟(ARR=36)

3.2 输入捕获模式

3.3 输出比较模式

3.4 PWM模式

3.5 编码器模式

标签:定时器,模式,STM32,计数器,详解,寄存器,输入,时钟
From: https://www.cnblogs.com/Jimmy1988/p/17121189.html

相关文章

  • linux源码解析13- 反向映射RAMP详解
    1.什么是反向映射是一种物理地址反向映射虚拟地址的方法;正向映射:用户访问的虚拟地址,经过多级页表转化,最终映射到物理页面;反向映射:根据物理页面,找到所有映射到这个页面的......
  • 常用的24/22/16/8位网段详解
    24位网段10.8.0.0/24 10.8.0.0---10.8.0.254 0-255 1*256=256个ip10.8.20.0/24 10.8.20.0---10.8.0.254 0-255 1*256=256个ip10.8.100.0/24 10.8.100.0......
  • 【Bluetooth开发】一、蓝牙开发入门详解
     ​编辑BLE蓝牙设备在生活中无处不在,但是我们也只是将其作为蓝牙模块进行使用,发送简单的AT命令实现数据收发。那么,像对于一些复杂的使用场合:“车载蓝牙”、"智能手表"、“......
  • ArrayList详解
    ArrayList详解ArrayList是实现了List接口,其内部是基于数组实现的:publicclassArrayList<E>extendsAbstractList<E>implementsList<E>,RandomAccess,Clone......
  • Redis-Config详解以及订阅发布
     RedisConf详解对大小写不敏感可以加载其他confwjian 网络配置 通用配置 快照 安全配置 限制:最大连接数,最大容量,内存满了之后的配置 aof 持久......
  • python定时器
    一.TimerTimer为threading中的一个类,用来指定的秒数后调用函数,我们来看下Timer类的构造参数。interval:设置定时运行的时间function:设置定时的事件args:参数kwargs:字典......
  • stm32 gpio外部中断
    使用过外部中断可知,中断模式可以选择上升沿触发或者下降沿触发,或者双边沿触发,例如下降沿触发,引脚由高电平变到低电平,进入外部中断,只要外部中断中的逻辑判断没有while循环导......
  • LINUX串口相关属性设置详解
     Linux下串口的设置命令 查看串口波特率等信息:stty-F/dev/ttyS0-a#ttyS0为要查看的串口 设置串口参数:stty-F/dev/ttyS0ispeed115200ospeed115200cs8......
  • 二进制表示:原码、反码、补码详解
    本文主要介绍计算机中二进制的表示方法,详细介绍了十进制转二进制的方法,以及原码、反码和补码的不同和应用。一、二进制的计算要进行二进制的表示,首先需要进行计算二进制......
  • str_replace函数详解
    在开发过程中,字符串的操作是很频繁的,这几天有看PHP手册中讲解str_replace函数的讲解,不是很明白,特作如下笔记,以作备忘。     函数原型:mixed str_replace ( mixed $......