STM32学习笔记6:TIM基本介绍

芯片型号:STM32F103RC

软件开发包:标准外设库

一、定时器简介

  • TIM(Timer)定时器
  • 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断
  • 16位计数器、预分频器、自动重装寄存器的时基单元,在 72MHz 计数时钟下可以实现最大 59.65s 的定时, 59.65 s = 65536 × 65536 × 1 72000000 59.65s=65536\times 65536\times\frac{1}{72000000} 59.65s=65536×65536×720000001
  • 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能
  • 根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型
  • STM32的定时器支持级联的模式:一个定时器的输出可以当作另一个定时器的输入

二、定时器分类

STM32F1 系列中,除了互联型的产品,共有 8 个定时器,分别为基本定时器,通用定时器和高级定时器。

  1. 基本定时器 TIM6 和 TIM7 是一个 16 位的只能向上计数的定时器,没有外部 IO。
  2. 通用定时器 TIM2/3/4/5 是一个 16 位的可以向上/下计数的定时器,每个定时器有 4 个外部 IO。
  3. 高级定时器 TIM1/8 是一个 16 位的可以向上/下计数的定时器,每个定时器有 8 个外部 IO。
类型编号总线功能
基本定时器TIM6、TIM7APB1拥有定时中断、主模式触发DAC的功能
通用定时器TIM2、TIM3、TIM4、TIM5APB1拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能
高级定时器TIM1、TIM8APB2拥有通用定时器全部功能,并额外具有重复计数器、死区生成、互补输出、刹车输入等功能

三、基本定时器功能框图

基本定时器的核心是时基,不仅基本定时器有,通用定时器和高级定时器也有。

基本定时器功能框图

3.1 时钟源

定时器时钟 TIMxCLK,即内部时钟 CK_INT,经 APB1 预分频器后分频提供,如果 APB1 预分频系数等于 1,则频率不变,否则频率乘以 2,库函数中 APB1 预分频的系数是 2,即 PCLK1 = 36M,所以定时器时钟 TIMxCLK = 36 x 2 = 72M。

3.2 控制器

控制器用于控制定时器的:复位、使能、计数、触发DAC。
涉及到的寄存器为: CR1/2、 DIER、 EGR、 SR。

3.3 时基单元

3.3.1 预分频器

预分频器 PSC,有一个输入时钟 CK_PSC 和一个输出时钟 CK_CNT。输入时钟 CK_PSC 就是上面时钟源的输出,对于基本定时器而言,就是内部时钟 CK_INT。输出 CK_CNT 则用来驱动计数器 CNT 计数。

PSC 是一个 16 位的预分频器,可以对预分频器时钟 CK_PSC 进行 1~65536 之间的任何一个数进行分频。具体计算方式为:CK_CNT = CK_PSC / (PSC+1)。

3.3.2 计数器

计数器 CNT 在计数器时钟的驱动下开始计数,计数一次的时间为1 / CK_CNT。

计数器 CNT 是一个 16 位的计数器,只能往上计数,最大计数值为 65535。当计数达到自动重装载寄存器保存的值的时候产生更新事件,并清零从头开始计数。

3.3.3 自动重装载寄存器

自动重装载寄存器 ARR 是一个 16 位的寄存器,这里面装着计数器能计数的最大数值。当计数到这个值的时候,如果使能了中断的话,定时器就产生溢出中断。

四、高级定时器和通用定时器功能框图

通用定时器框图
高级定时器框图

高级定时器拥有通用定时器全部功能,并额外增加了一些功能。所以这里就以高级定时器为主,主要介绍一下三种定时器相似的部分。

4.1 时钟源

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

  • 内部时钟(CK_INT)
  • 外部时钟模式1:外部输入引脚
  • 外部时钟模式2:外部触发输入 ETR
  • 内部触发输入(ITRx)
4.1.1 内部时钟

内部时钟 CK_INT 即来自于芯片内部,等于 72M,一般情况下,我们都是使用内部时钟。当从模式控制寄存器 TIMx_SMCR 的 SMS 位等于 000 时,则使用内部时钟。

4.1.2 外部时钟模式1

外部时钟模式1

(1)时钟信号输入引脚

当使用外部时钟模式 1 的时候,时钟信号来自于定时器的输入通道,总共有 4 个,分别为 TI1/2/3/4,即 TIMx_CH1/2/3/4。具体使用哪一路信号,由 TIM_CCMRx 的位 CCxS[1:0] 配置,其中 CCMR1 控制 TI1/2, CCMR2 控制 TI3/4。

(2)滤波器

如果来自外部的时钟信号的频率过高或者混杂有高频干扰信号的话,我们就需要使用滤波器对信号重新采样,来达到降频或者去除高频干扰的目的,具体的由 TIMx_CCMRx 的位 ICxF[3:0] 配置。

(3)边沿检测

边沿检测的信号来自于滤波器的输出,在成为触发信号之前,需要进行边沿检测,决定是上升沿有效还是下降沿有效,具体的由 TIMx_CCER 的位 CCxP 和 CCxNP 配置。

(4)触发选择

当使用外部时钟模式 1 时,触发源有两个,一个是滤波后的定时器输入 1(TI1FP1)和滤波后的定时器输入 2(TI2FP2),具体的由 TIMxSMCR 的位 TS[2:0] 配置。

(5)从模式选择

选定了触发源信号后,最后我们需把信号连接到 TRGI 引脚,让触发信号成为外部时钟模式 1 的输入,最终等于 CK_PSC。具体的配置, TIMx_SMCR 的位 SMS[2:0]为 000 即可选择外部时钟模式 1。

4.1.3 外部时钟模式2

外部时钟模式2

(1)时钟信号输入引脚

当使用外部时钟模式 2 的时候,时钟信号来自于定时器的特定输入通道 TIMx_ETR,只有 1 个。

(2)外部触发极性

来自 ETR 引脚输入的信号可以选择为上升沿或者下降沿有效,具体的由 TIMx_SMCR 的位 ETP配置。

(3)外部触发预分频器

由于 ETRP 的信号的频率不能超过 TIMx_CLK(72M)的 1/4,当触发信号的频率很高的情况下,就必须使用分频器来降频,具体的由 TIMx_SMCR 的位 ETPS[1:0] 配置。

(4)滤波器

如果 ETRP 的信号的频率过高或者混杂有高频干扰信号的话,我们就需要使用滤波器对 ETRP 信号重新采样,来达到降频或者去除高频干扰的目的。具体的由 TIMx_SMCR 的位 ETF[3:0] 配置,其中的 fDTS 是由内部时钟 CK_INT 分频得到,具体的由 TIMx_CR1 的位 CKD[1:0] 配置。

(5)从模式选择

经过滤波器滤波的信号连接到 ETRF 引脚后,触发信号成为外部时钟模式 2 的输入,最终等于 CK_PSC。具体的配置,TIMx_SMCR 的位 ECE 为 1 即可选择外部时钟模式 2。

4.1.4 内部触发输入

内部触发输入是使用一个定时器作为另一个定时器的预分频器。硬件上高级控制定时器和通用定时器在内部连接在一起,可以实现定时器同步或级联。主模式的定时器可以对从模式定时器执行复位、启动、停止或提供时钟。

4.2 控制器

控制器部分包括触发控制器、从模式控制器以及编码器接口。

触发控制器用来针对片内外设输出触发信号,比如为其它定时器提供时钟和触发 DAC/ADC 转换。

从模式控制器可以控制计数器复位、启动、递增/递减、计数。

编码器接口专门针对编码器计数而设计。

4.3 时基单元

高级定时器时基单元功能包括四个寄存器,分别是计数器寄存器 (CNT)、预分频器寄存器(PSC)、自动重载寄存器 (ARR) 和重复计数器寄存器 (RCR)。其中重复计数器 RCR 是高级定时器独有,通用和基本定时器没有。前面三个寄存器都是 16 位有效, TIMx_RCR 寄存器是 8 位有效。

4.3.1 预分频器

除输入时钟的来源变多了之外,功能和基本定时器相同。

4.3.2 计数器

高级/通用定时器的计数器有三种计数模式,分别为向上计数模式、向下计数模式和中央对齐模式(向上/向下计数) 。

  1. 在向上计数模式中,在向上计数模式中,计数器从0计数到自动重载寄存器 ARR 值,然后重新从0开始计数并且产生一个计数器向上溢出事件。
  2. 在向下计数模式中,计数器从自动重载寄存器 ARR 值开始向下计数到0,然后从自动装入的值重新开始并且产生一个计数器向下溢出事件。
  3. 在中心对齐模式中,计数器从 0 开始计数到 (ARR-1) 值生成计数器上溢事件,然后从 ARR 值开始向下计数到 1 生成计数器下溢事件;然后再从 0 开始计数,如此循环。每次发生计数器上溢和下溢事件都会生成更新事件。

对于高级定时器,如果禁用重复计数器,在计数器生成上溢/下溢事件就马上生成更新事件 (UEV);如果使能重复计数器,每生成一次上溢/下溢事件重复计数器内容就减 1,直到重复计数器内容为 0 时才会生成更新事件。

4.3.3 自动重装载寄存器

功能和基本定时器相同。

4.3.4 重复次数计数器

在基本/通用定时器发生上/下溢事件时直接就生成更新事件,但对于高级定时器却不是这样,高级定时器在硬件结构上多出了重复计数器,在定时器发生上溢或下溢事件时递减重复计数器的值,只有当重复计数器为 0 时才会生成更新事件。在发生 N+1 个上溢或下溢事件 (N 为RCR 的值) 时产生更新事件。

重复计数器在下述任一条件成立时递减:

  • 向上计数模式下每次计数器溢出时;
  • 向下计数模式下每次计数器下溢时;
  • 中央对齐模式下每次上溢和每次下溢时。

五、影子寄存器

  1. PSC、ARR、CCR 和 REP 都有影子寄存器,功能框图上有个影子。
  2. 影子寄存器的存在起到一个缓冲的作用,用户值->寄存器->影子寄存器->起作用,如果不使用影子寄存器,则用户值在写到寄存器之后就直接起作用。
  3. 影子寄存器的用处:例如在计数器工作期间,如果改变分频值,这个变化不会立即生效,而是会等到本次计数周期结束后,产生了更新事件,预分频器的值才会被传递到影子寄存器中,才会生效。

六、主从触发模式

主从触发模式

主从触发模式就是主模式、从模式和触发源选择三个功能的简称。

主模式可以将定时器内部的信号映射到 TRGO(Trigger Out) 引脚,用于触发别的外设。比如,把定时器的更新事件映射到 TRGO,TRGO 直接连接到 DAC 的触发转换引脚上,这样定时器就不需要再通过中断来触发 DAC 了。

从模式就是接收其他外设或者自身外设的一些信号,用于控制自身定时器的运行,也就是被别的信号控制。

触发源选择就是选择从模式的触发信号源,可以将其视为从模式的一部分。触发源选择,指定一个信号映射到 TRGI(Trigger In),然后TRGI 去触发从模式。比如,在输入捕获中,想通过硬件电路实现在捕获之后自动完成 CNT 的清零工作,选中 TI1FP1 为触发信号,从模式选择复位操作,这样 TI1FP1 的信号就可以自动触发 CNT 的清零。

参考视频源于B站up主: 野火科技、江协科技
参考文档:《STM32库开发实战指南——基于野火MINI开发板》

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STM32TIM1中断是通过配置TIM1的更新中断来实现的。在初始化配置中,需要注意结构IM_TimeBaseInitTypeDef中的TIM_RepetitionCounter配置问题。TIM_RepetitionCounter用于配置重复计数,即重复溢出多少次才触发一次溢出中断。只有高级定时器需要配置该参数。在中断处理函数TIM1_UP_IRQHandler中,通过检查指定的TIM中断源(TIM_IT_Update)是否发生,来确定是否触发中断操作。如果中断发生,则需要清除TIM1的中断待处理位(TIM_ClearITPendingBit)。如果需要额外加入重写定时器中断函数,可以使用HAL_TIM_PeriodElapsedCallback函数,并在该函数中添加相应的中断执行内容。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [STM32学习笔记——高级定时器TIM1更新中断配置](https://blog.csdn.net/qq_14997473/article/details/46942927)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [stm32Cube TIM1 定时器 中断](https://blog.csdn.net/penglijiang/article/details/116234535)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值