STM32基础篇:定时器 × 时基单元

定时器简介

定时器是一种专门负责定时功能的片上外设。F1系列的单片机最多有14个定时器(TIM1~TIM14),具体如下表:

类型外设名称
基本定时器TIM6和TIM7
通用定时器TIM2~TIM5和TIM9~TIM14
高级定时器TIM1和TIM8

基本定时器是功能最简单的一类定时器,即时基单元的功能;通用定时器在基本定时器的基础上添加了一些功能,包括:输入捕获功能输出比较功能高级定时器是在通用定时器的基础上又添加一些功能:从模式控制器输出控制功能

以具体的F103C8T6芯片来说,其包含了:1个高级定时器(TIM1)、3个通用定时器(TIM2、TIM3、TIM4),一共4个定时器模块。其中TIM1挂在APB2总线上,其他定时器挂在APB1总线上。

而STM32F103RG芯片就拥有全部的14个定时器。


时基单元

1、时基单元的基本结构

对于CNT计数器,每来一个脉冲就记一个数。当计数器计满一轮数后,会向右边的重复计数器RCR输出一个脉冲。脉冲信号经过RCR再次进行分频后,会去产生一个update事件(可通过update事件去触发中断)。

注意,对于重复计数器,只存在于高级计数器里(即:TIM1和TIM8),其他计数器是没有的。


2、定时器的时钟

由时基单元框图可知,其时钟有几种来源,并通过多路复用器选择其中的一路输入到时基单元。其中有一个主要的来源就是RCC,且绝大多数情况下使用RCC。

对于C8T6芯片,通过查阅手册(上图)可知:TIM1挂在APB2总线上,TIM2、TIM3、TIM4挂在APB1总线上。因此,对于TIM1,其时钟来源于APB2,对于其他寄存器,其时钟来源于APB1。

但在APB与TIM之间还存在倍频器,如果APBx的分频系数为1,倍频器就在原来的时钟频率上做一个一倍频(频率不变);如果APBx分频系数为2,就在原来时钟频率上做一个二倍频


3、分频计数器

对于上述时基单元的内部结构中的预分频器、计数器、重复计数器,其本质均为16位的分频计数器。其中预分频器和重复计数器发挥了分频的作用,而中间的计数器既有分频功能又有计数功能。

对于16位的分频计数器,其自动重装寄存器和计数器都是用16位的二进制数来表示的,也就是说它们的范围都是0000~FFFF(即:0~65535)。

  • 分频计数器的基本工作原理:

对于分频计数器,计数器会在输入脉冲的激励下递增,每来一个脉冲就加一,到达最大值N(由自动重装寄存器设置)后,其值归0,然后输出一个脉冲,再重新从0计数,如此重复下去。

其计数模式可分为如下的3种:

上计数下计数中心对齐

对于中间的计数器CNT,其模式是可选的(可选择上计数、下技术或中心对齐) 。


4、Update事件与预加载

由于状态寄存器里面的N值决定了计数器的周期,有时我们需要再计数器运行的过程中动态地调整N的值。为了防止出错,这个调整需要加一些保护措施(即:预加载 Preload)。

当我们修改N的值时,如果直接修改的话,当修改时计数器的计数值大于我们想要修改的值时,计数器会一直计数到65535,重新溢出后才会以新的N为顶进行计数。所以在这中间会出现一个非常长的计数周期(从0到65535)。如下图所示:

为了避免这种情况,我们在自动重装寄存器后边增加了一个影子寄存器,如果我们要修改N的值,那么新的N值首先会写入影子寄存器里边,等到下一次update事件发生时,新N值从影子寄存器进入自动重装寄存器里。

上述的保护措施称之为预加载,如下图所示:

【注意】对于预分频器PSC和重复计数器RCR来说,它们的预加载措施是强制开启的;而对于中间的自动重装寄存器来说,可以选择是否预加载,并且默认不预加载(开启需手动)。

【注意】对于update事件,是由重复计数器RCR溢出所产生的,但我们还可通过编程强制去产生一个update事件。

附update事件与中断的关系:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值