定时器---详解

一、STM32的定时器

STM32 F系列最多可以有8个定时器。
高级定时器(TIM1、TIM8);
通用定时器(TIM2、TIM3、TIM4、TIM5);
基本定时器(TIM6、TIM7)。
STM32定时器
在这里插入图片描述

STM32通用定时器

主要功能
详细参考《STM32中文参考手册V》-第14章通用定时器。

●位于低速的APB1总线上(注意:高级定时器是在高速的APB2总线上);
● 16位向上、向下、向上/向下自动装载计数器(TIMx_CNT)
● 16位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为1~65536之间的任意
数值
● 4个独立通道(TIMx_CH1~4):

	─ 输入捕获
	─ 输出比较
	─ PWM生成(边缘或中间对齐模式) 
	─ 单脉冲模式输出

● 使用外部信号(TIMx_ETR 对应tim2-tim4ERT的引脚)控制定时器和定时器互连的同步电路
● 如下事件发生时产生中断/DMA(6个独立的IRQ/DMA请求生成器):

	─ 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) 
	─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) 
	─ 输入捕获
	─ 输出比较

● 支持针对定位的增量(正交)编码器和霍尔传感器电路
● 触发输入作为外部时钟或者按周期的电流管理
●使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。

STM32 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。

二、定时器框图

定时器框图
将通用定时器分为四个部分:
1,选择时钟
2,时基电路
3,输入捕获
4,输出比较

三、定时器工作过程

工作过程

定时器工作过程

时钟选择

● 内部时钟(CK_INT)

	CK_INT---->CK_PSC---->CK_CNT

在这里插入图片描述

在这里插入图片描述

● 外部时钟模式1:外部输入脚(TIx) (只有CH1,CH2–通道1,2)
由所选触发信号(TRGI)信号上升沿提供计数器时钟
此触发信号的来源有八种
在这里插入图片描述
在这里插入图片描述

● 外部时钟模式2:外部触发输入(ETR) (来自TIMx 的复用引脚)
计数器可在外部触发输入 ETR 出现上升沿或下降沿时计数
在这里插入图片描述

● 内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时
器Timer1而作为另一个定时器Timer2的预分频器。参见14.3.15。

四、时基电路(时基单元)*

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

自动重装载寄存器(TIMx_ARR)

作用:存放实际计数的值,CNT从0计数到ARR+1;
如果使能更新中断,在CNT的值超过ARR设置的值的时候,产生(溢出)更新中断。

计数器寄存器(TIMx_CNT)

  1. 作用:存放计数器的当前值。
  2. 计数器CNT的计数模式
    ●向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件(更新时间–可以触发更新中断)。
    ●向下计数模式:计数器从自动装入的值**(TIMx_ARR)开始向下计数到0**,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件
    ●中央对齐模式(向上/向下计数):计数器从0开始计数到自动装入的值,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。(先向上产生再向下,循环往复,中间产生一处事件)

预分频寄存器 (TIMx_PSC)

PSC

CNT计数一次的时间

计数器频率CK_CNT=CK_PSC/(psc+1)
CNT计一次数的时间=1/CK_CNT=(psc+1)/ CK_PSC
CK_PSC为72MHZ
即=(psc+1)/72MHZ
在这里插入图片描述

通用定时器超时时间

Tout=(ARR+1)(PSC+1)/Tclk
其中:Tclk为(内部时钟源72MHZ)。
(psc+1)/Tclk为CNT计数一次的时间,乘以整个周期计数的次数(ARR+1),即可求出超时时间。
这里需要注意的是:PSC预分频系数需要加1,同时自动重加载值也需要加1。

五、影子寄存器

在配置输出比较(输出PWM)时需要使能相关的影子寄存器。

	//--------------------------------------使能预装载通道寄存器
	TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);
	//--------------------------------------使能ARR预重装载通道寄存器
	TIM_ARRPreloadConfig(TIM1,ENABLE);

含有影子寄存器的有:

- TIMx_PSC 分频寄存器

- TIMx_ARR 自动重装载寄存器----更新事件

- TIMx_CCR 捕捉比较寄存器----1~4对应输入捕获或输出比较的四条通道

-TIMx_RCR 重复计数寄存器

六、其他寄存器

控制寄存器(CR1~4)

作用:对计数器的计数方式、使能相关位等进行设置。

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

作用:对DMA / 中断使能进行配置。
包含:

更新中断
捕获/比较1~4中断
DMA请求

输入捕获/输出比较寄存器(TIMx_CCR1~4)

在运用到输入捕获或者输出比较时配置。

在这里插入图片描述

  • 在输出模式下,该寄存器的值与 CNT 的值比较,根据比较结果产生相应动作。利用这点,我们通过修改这个寄存器的值,就可以控制 PWM的输出脉宽了。
    其对应OC的四条通道。

假设定时器工作模式设置为向上计数 PWM模式,且当 CNT<CCRx 时,输出 1,当 CNT>=CCRx 时输出 0,则:

当 CNT 值小于 CCRx 的时候, IO 输出高电平 (1)
当 CNT 值大于等于 CCRx 的时候,IO 输出低电平 (0)
当 CNT 达到 ARR 值的时候,重新归零,然后重新向上计数,依次循环。

因此,改变 CCRx 的值,就可以改变 PWM 输出的占空比,改变 ARR 的值,就可以改变 PWM 输出的周期(频率),这就是利用定时器输出PWM 的基本原理。
在这里插入图片描述

  • 在输入模式下,捕获事件发生后将CNT的数值传入CRR。
    其对应IC的四条通道。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好好睡觉好好吃饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值