STM32 参考手册 - 计时器

STM32_计时器

STM32中有 高级定时器 通用定时器 基本定时器

PS:

影子寄存器:根据控制位,在发生U事件后,预装载寄存器内容转移到有效寄存器。这也就是对影子寄存器的说明。

image-20230405180646653

其中的TIMx_CHy是外部引脚,对于第X个计数器的第y个通道

STM32F103C8T6 中的 计时器 资源

image-20230405170722446

高级定时器、通用定时器、基本定时器的区别

TIM1和TIM8定时器的功能包括【增强型】:

● 16位向上、向下、向上/下自动装载计数器

● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65535之间的任意数值
● 多达4个独立通道: ─ 输入捕获 ─ 输出比较 ─ PWM生成(边缘或中间对齐模式) ─ 单脉冲模式输出
● 死区时间可编程的互补输出
● 使用外部信号控制定时器和定时器互联的同步电路
● 允许在指定数目的计数器周期之后更新定时器寄存器的重复计数器
● 刹车输入信号可以将定时器输出信号置于复位状态或者一个已知状态

● 如下事件发生时产生中断/DMA: ─ 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) ─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) ─ 输入捕获 ─ 输出比较─ 刹车信号输入
● 支持针对定位的增量(正交)编码器和霍尔传感器电路
● 触发输入作为外部时钟或者按周期的电流管理

TIMx主要功能通用TIMx (TIM2、TIM3、TIM4和TIM5)定时器功能包括【通用型】:

● 16位向上、向下、向上/向下自动装载计数器
● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值
● 4个独立通道: ─ 输入捕获 ─ 输出比较 ─ PWM生成(边缘或中间对齐模式) ─ 单脉冲模式输出
● 使用外部信号控制定时器和定时器互连的同步电路
● 如下事件发生时产生中断/DMA: ─ 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) ─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) ─ 输入捕获 ─ 输出比较
● 支持针对定位的增量(正交)编码器和霍尔传感器电路
● 触发输入作为外部时钟或者按周期的电流管理

TIM6和TIM7定时器的主要功能包括【精简型】:

● 16位自动重装载累加计数器
● 16位可编程(可实时修改)预分频器,用于对输入的时钟按系数为1~65536之间的任意数值分频
● 触发DAC的同步电路 注:此项是TIM6/7独有功能.
● 在更新事件(计数器溢出)时产生中断/DMA请求

通用计时器

STM3的通用 TIMx (TIM2、TIM3、TIM4和 TIM5)定时器功能包括:

  1. 16 位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。
  2. 16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~ 65535 之间的任意数值。
  3. 4 个独立通道(TIMx_CH1~4),这些通道可以用来作为:
    • A.输入捕获
    • B.输出比较
    • C.PWM生成(边缘或中间对齐模式)
    • D.单脉冲模式输出
  4. 可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外 一个定时器)的同步电路。
  5. 如下事件发生时产生中断/DMA:
    • A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
    • B.触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
    • C.输入捕获
    • D.输出比较
    • E.支持针对定位的增量(正交)编码器和霍尔传感器电路
    • F.触发输入作为外部时钟或者按周期的电流管理

时基单元

可编程通用定时器的主要部分是一个16位计数器和与其相关的自动装载寄存器
这个计数器可 以 向上计数向下计数或者 向上向下双向计数 。此计数器时钟预分频器分频得到。
计数器、自动装载寄存器和预分频器寄存器可以由软件读写,在计数器运行时仍可以读写

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

预分频器描述

预分频器可以将计数器的时钟频率按1到65536之间的任意值分频。它是基于一个(在TIMx_PSC 寄存器中的)16位寄存器控制的16位计数器。
这个控制寄存器带有缓冲器,它能够在工作时被改变。新的预分频器参数在下一次更新事件到来时被采用

image-20230405172149005

计数器模式

向上计数模式

在向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR计数器的内容),然后重新从0开始 计数并且产生一个计数器溢出事件。

每次计数器溢出时可以产生更新事件,在TIMx_EGR寄存器中(通过软件方式或者使用从模式控 制器)设置UG位也同样可以产生一个更新事件。

设置TIMx_CR1寄存器中的UDIS位,可以禁止更新事件;这样可以避免在向预装载寄存器中写入新值时更新影子寄存器在UDIS位被清’0’之前,将不产生更新事件。但是在应该产生更新事件时,计数器仍会被清’0’,同时预分频器的计数也被请0(但预分频系数不变)。此外,如果设置 了TIMx_CR1寄存器中的URS位(选择更新请求),设置UG位将产生一个更新事件UEV,但硬件 不设置UIF标志(即不产生中断或DMA请求);这是为了避免在捕获模式下清除计数器时,同时产 生更新和捕获中断。

当发生一个更新事件时,所有的寄存器都被更新,硬件同时(依据URS位)设置更新标志位 (TIMx_SR寄存器中的UIF位)。

  • 预分频器的缓冲区被置入预装载寄存器的值(TIMx_PSC寄存器的内容)。
  • 自动装载影子寄存器被重新置入预装载寄存器的值(TIMx_ARR)。

image-20230405173243312

向下计数模式

在向下模式中,计数器从自动装入的值(TIMx_ARR计数器的值)开始向下计数到0,然后从自动装入的值重新开始并且产生一个计数器向下溢出事件。

image-20230405173413514

image-20230405173441880

中央对齐模式(向上/向下计数)

在中央对齐模式,计数器从0开始计数到自动加载的值(TIMx_ARR寄存器)−1,产生一个计数器 溢出事件,然后向下计数到1并且产生一个计数器下溢事件;然后再从0开始重新计数。

在这个模式,不能写入TIMx_CR1中的DIR方向位。它由硬件更新并指示当前的计数方向。
可以在每次计数上溢和每次计数下溢时产生更新事件;也可以通过(软件或者使用从模式控制器) 设置TIMx_EGR寄存器中的UG位产生更新事件。然后,计数器重新从0开始计数,预分频器也 重新从0开始计数。
设置TIMx_CR1寄存器中的UDIS位可以禁止UEV事件。这样可以避免在向预装载寄存器中写入 新值时更新影子寄存器。因此UDIS位被清为’0’之前不会产生更新事件。然而,计数器仍会根据 当前自动重加载的值,继续向上或向下计数。
此外,如果设置了TIMx_CR1寄存器中的URS位(选择更新请求) ,设置UG位将产生一个更新事 件UEV但不设置UIF标志(因此不产生中断和DMA请求),这是为了避免在发生捕获事件并清除计 数器时,同时产生更新和捕获中断。
当发生更新事件时,所有的寄存器都被更新,并且(根据URS位的设置)更新标志位(TIMx_SR寄 存器中的UIF位)也被设置。

  • 预分频器的缓存器被加载为预装载(TIMx_PSC寄存器)的值。
  • 当前的自动加载寄存器被更新为预装载值(TIMx_ARR寄存器中的内容)。注:如果因为计数 器溢出而产生更新,自动重装载将在计数器重载入之前被更新,因此下一个周期将是预期 的值(计数器被装载为新的值)。

image-20230405174442033

image-20230405174451976

时钟选择

计数器时钟可由下列时钟源提供:

  • 内部时钟(CK_INT)
  • 外部时钟模式1:外部输入脚(TIx)
  • 外部时钟模式2:外部触发输入(ETR)
  • 内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时 器Timer1而作为另一个定时器Timer2的预分频器。参见14.3.15。

捕获/比较通道

每一个捕获/比较通道都是围绕着一个捕获/比较寄存器(包含影子寄存器),包括捕获的输入部分 (数字滤波、多路复用和预分频器),和输出部分(比较器和输出控制)。

image-20230405175432271

输入捕获模式

在输入捕获模式下,当检测到ICx信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄存 器(TIMx_CCRx)中。当捕获事件发生时,相应的CCxIF标志(TIMx_SR寄存器)被置’1’,如果使能 了中断或者DMA操作,则将产生中断或者DMA操作。如果捕获事件发生时CCxIF标志已经为 高,那么重复捕获标志CCxOF(TIMx_SR寄存器)被置’1’。写CCxIF=0可清除CCxIF,或读取存 储在TIMx_CCRx寄存器中的捕获数据也可清除CCxIF。写CCxOF=0可清除CCxOF。

以下例子说明如何在TI1输入的上升沿时捕获计数器的值到TIMx_CCR1寄存器中,步骤如下:

  • 选择有效输入端:TIMx_CCR1必须连接到TI1输入,所以写入TIMx_CCR1寄存器中的 CC1S=01,只要CC1S不为’00’,通道被配置为输入,并且TM1_CCR1寄存器变为只读。
  • 根据输入信号的特点,配置输入滤波器为所需的带宽(即输入为TIx时,输入滤波器控制位是 TIMx_CCMRx寄存器中的ICxF位)。假设输入信号在最多5个内部时钟周期的时间内抖动, 我们须配置滤波器的带宽长于5个时钟周期。因此我们可以(以fDTS频率)连续采样8次,以确 认在TI1上一次真实的边沿变换,即在TIMx_CCMR1寄存器中写入IC1F=0011。
  • 选择TI1通道的有效转换边沿,在TIMx_CCER寄存器中写入CC1P=0(上升沿)。
  • 配置输入预分频器。在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预 分频器被禁止(写TIMx_CCMR1寄存器的IC1PS=00)。
  • 设置TIMx_CCER寄存器的CC1E=1,允许捕获计数器的值到捕获寄存器中。
  • 如果需要,通过设置TIMx_DIER寄存器中的CC1IE位允许相关中断请求,通过设置 TIMx_DIER寄存器中的CC1DE位允许DMA请求。

当发生一个输入捕获时:

  • 产生有效的电平转换时,计数器的值被传送到TIMx_CCR1寄存器。
  • CC1IF标志被设置(中断标志)。当发生至少2个连续的捕获时,而CC1IF未曾被清除, CC1OF也被置’1’。
  • 如设置了CC1IE位,则会产生一个中断。
  • 如设置了CC1DE位,则还会产生一个DMA请求。 为了处理捕获溢出,建议在读出捕获溢出标志之前读取数据,这是为了避免丢失在读出捕获溢 出标志之后和读取数据之前可能产生的捕获溢出信息。 注: 设置TIMx_EGR寄存器中相应的CCxG位,可以通过软件产生输入捕获中断和/或DMA请求。

寄存器描述 - 部分

可以用半字(16位)或字(32位)的方式操作这些外设寄存器。

控制寄存器 1(TIMx_CR1)

image-20230405172704597

控制寄存器 2(TIMx_CR2)

image-20230405172753687

从模式控制寄存器(TIMx_SMCR)

image-20230405172810583

DMA/中断使能寄存器(TIMx_DIER)

image-20230405172827695

状态寄存器(TIMx_SR)

image-20230405172843774

事件产生寄存器(TIMx_EGR)

image-20230405172856286

捕获/比较模式寄存器 1(TIMx_CCMR1)

image-20230405172910784

捕获/比较模式寄存器 2(TIMx_CCMR2)

image-20230405172924000

捕获/比较使能寄存器(TIMx_CCER)

image-20230405172938520

计数器(TIMx_CNT)

image-20230405172956407

预分频器(TIMx_PSC)

image-20230405173044036

自动重装载寄存器(TIMx_ARR)

image-20230405173055904

捕获/比较寄存器 1(TIMx_CCR1)

image-20230405173111617

捕获/比较寄存器 2(TIMx_CCR2)

image-20230405173128249

捕获/比较寄存器 3(TIMx_CCR3)

image-20230405173142945

捕获/比较寄存器 4(TIMx_CCR4)

image-20230405173153274

posted @ 2025-05-07 12:04  c17VV  阅读(177)  评论(0)    收藏  举报