正点原子STM32学习笔记——通用定时器基本原理

以下描述适用于整个STM32FM10xxx系列。
本文依据《STM32中文参考手册_V10》
STM32 通用定时器简介

STM32 的通用定时器是一个通过可编程预分频器(PSC)驱动的 16 位自动装载计数器(CNT)构成。STM32 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。 使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。

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.触发输入作为外部时钟或者按周期的电流管理

正点原子STM32学习笔记——通用定时器基本原理_第1张图片

从图中可以看出,定时器的框图是很复杂的,所以学习的时候应该分成几个部分来学。

第一部分,时钟生成:产生一个时钟,作为时基单元的输入(图中红线)

正点原子STM32学习笔记——通用定时器基本原理_第2张图片

图中产生时钟的方式有四种:
①由内部时钟产生,如上图的“来自RCC的TIMxCLK”。此种应用的比较多。
②由外部引脚输入,上图的TIMx_ETR,可以从STM32F103RCT6.PDF中查找对应的引脚。这种方法只适用定时器2,3,4,定时器5没有这样的功能。
③来自ITR0~ITR1(内部触发输入口),定时器的级联,是来自其它的定时器,其它定时器的TRGO(如上图)连接到ITR0 ~ ITR1,自己的TRGO也可以连接到其它定时器的ITR0 ~ ITR1。
④来自TI1F_ED、TI1FP1、TI1FP2(见上图),这三个来自于下图中的“输入滤波器和边沿检测器”,而“输入滤波器和边沿检测器”来自于TI1,TI1来自于外部通道(TIMx_CH1等)。

第二部分,输入捕获(可用于计算脉宽,参考输入捕获实验):

正点原子STM32学习笔记——通用定时器基本原理_第3张图片

第三部分,时基单元(定时器中断实验):

正点原子STM32学习笔记——通用定时器基本原理_第4张图片
任何一个定时器都有一个时基单元,CK_PSC信号进行一个预分频(除法运算)产生CK_CNT时钟,这个时钟才是计数器(CNT)最终的时钟。CNT在时钟的控制下可以向上或向下计数(可以通过配置相应寄存器来决定是向上还是向下计数),如CNT从0向上计数到重装载值会产生一个溢出事件,事件可以触发中断或者DMA请求。

可编程通用定时器的主要部分是一个16位计数器和与其相关的自动装载寄存器。这个计数器可以向上计数、向下计数或者向上向下双向计数。此计数器时钟由预分频器分频得到。计数器(CNT)、自动装载寄存器(ARR)和预分频器寄存器(PSC)可以由软件读写,在计数器运行时仍可以读写。
时基单元包含:
● 计数器寄存器(TIMx_CNT)
● 预分频器寄存器 (TIMx_PSC)
● 自动装载寄存器 (TIMx_ARR)
自动装载寄存器是预先装载的,写或读自动重装载寄存器将访问预装载寄存器。根据在TIMx_CR1寄存器中的自动装载预装载使能位(ARPE)的设置,预装载寄存器的内容被立即或在每次的更新事件UEV时传送到影子寄存器。当计数器达到溢出条件(向下计数时的下溢条件)并当
TIMx_CR1寄存器中的UDIS位等于’0’时,产生更新事件。更新事件也可以由软件产生。

在图中可以看到自动重装载寄存器有一个阴影,有阴影的寄存器,表示在物理上这个寄存器对应2个寄存器,一个是程序员可以写入或读出的寄存器,称为preload register(预装载寄存器),另一个是程序员看不见的、但在操作中真正起作用的寄存器,称为shadow register(影子寄存器)。
关于影子寄存器,可以参考网上的一名博主的博客:
首先转载: STM32定时器的预装载寄存器与影子寄存器之间的关系

计数器由预分频器的时钟输出CK_CNT驱动,仅当设置了计数器TIMx_CR1寄存器中的计数器使能位(CEN)时,CK_CNT才有效。
注:真正的计数器使能信号CNT_EN是在CEN的一个时钟周期后被设置。

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

正点原子STM32学习笔记——通用定时器基本原理_第5张图片

第四部分,输出比较(PWM输出):

正点原子STM32学习笔记——通用定时器基本原理_第6张图片

由于定时器的内容比较多,这里简单的介绍下基本原理。

你可能感兴趣的:(STM32)