问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

一文搞懂定时器

创作时间:
作者:
@小白创作中心

一文搞懂定时器

引用
CSDN
1.
https://m.blog.csdn.net/fg247778718/article/details/138869615

定时器是嵌入式系统中一个非常重要的组件,它能够帮助开发者实现精确的定时功能。本文将从定时器的基本概念出发,详细介绍定时器的种类、工作原理以及在实际项目中的应用。通过本文的学习,你将能够全面掌握定时器的相关知识,并能够在实际项目中灵活运用。

1. 定时器概念

使用精确的时基,通过硬件的方式,实现定时功能,其核心是:计数器。

2. 定时器种类和区分

定时器种类
位数
计数器模式
产生DMA请求
捕获/比较通道
互补输出
特殊应用场景
高级定时器(TIM1 TIM8)
16
向上,向下,向上/下
可以
4
带死区控制和紧急刹车,可应用于PWM电机控制
通用定时器(TIM2~TIM5)
16
向上,向下,向上/下
可以
4
定时计数,PWM输出,输入捕获,输出比较
基本定时器(TIM6,TIM7)
16
向上,向下,向上/下
可以
0
主要应用于驱动DAC

3. 基本定时器

基本定时器主要为(TIM2 ~ TIM5)

①时钟源: 基本定时器挂载在APB1总线上,但它并不是直接由APB1总线提供,而是经过一个倍频器,当APB1的预分频器系数为1 时,倍频系数为1,当APB1的预分频器>= 2 时,倍频系数为2.

②控制器:控制器除了控制定时器复位、使能、计数等功能之外,还可以用于触发DAC转换。

③时基单元:计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)、自动重载寄存器
(TIMx_ARR)。

,(APB1 = 36HZ, 分频为2, psc = 7199, ARR = 4999, 产生500ms的定时器溢出信号)

影子寄存器:存在于PSC预分频器和自动重载寄存器中,影子寄存器是实际起作用的寄存器,原本的寄存器只是起缓存作用,预分频寄存器在更新事件产生的时候才会写入影子寄存器中,自动重载寄存器有立即写入或等待更新事件才写入两种模式。

4. 通用定时器

①时钟源:

  1. 内部时钟CK_INT
  2. 外部时钟模式:外部触发输入(ETR),多用于需要精确外部触发和计数的场合,例
    如测量脉冲宽度、频率等。
  3. 内部触发输入(ITRx):定时器可以使用来自其他内部定时器或外设的触发信号作为
    时钟源。通常用于复杂的定时器配置,如多个定时器级联或同步工作。
  4. 外部时钟模式:外部输入引脚(TIx), 使用外部引脚输入的时钟信号作为定时器的时钟源。这种时钟信号可以是任意外部信号源,如外部晶振、传感器信号等。适用于需要与外部设备同步的场景,如需要捕捉外部事件的频率或周期的应用。

②控制器:从模式控制器、编码器接口和触发控制器(TRGO)。从模式控制器可以控制
计数器复位、启动、递增/递减、计数。编码器接口针对编码器计数。触发控制器用来提供触发
信号给别的外设,比如为其它定时器提供时钟或者为 DAC/ADC的触发转换提供信号。

③时基单元:计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)、自动重载寄存器
(TIMx_ARR)。

4.1 计数模式

通用定时器有三种计数模式,而基本定时器只有一种。

递增计数模式: 当计数器从0开始每来一个脉冲递增一次,直到达到ARR溢出

递减计数模式: 当计数器从ARR开始每来一个脉冲递减一次,直到达到0溢出

中心对齐模式: 计数器先从0递增为ARR-1产生更新事件,然后从自动重载寄存器的值ARR开始递减,直到减到1生成更新事件, 从0开始递增。

4.2 输入捕获

概念:通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如说上升沿/下降沿)的时候,将当前定时器的值TIMx_CNT存放到对应通道的捕获/比较寄存器TIMx_CCRx里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA等。

滤波方式:可以选择也可以不选择

边沿检测器:选择上升沿还是下降沿监测

输入捕获映射选择器:一般通道1映射到IC1, 通道2映射到IC2

分频器:设置的是每N个事件触发一次捕捉,比如每2次上升沿触发一次捕捉

例子:

高电平时间为:(N次溢出ARR + 两次捕获的值) 时钟频率

输入捕获的配置步骤:


1. 打开定时器和相应IO口的时钟。  
2. 初始化IO口,模式为输入:GPIO_Init();  
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;  
3. 初始化定时器ARR,PSC  
   TIM_TimeBaseInit();  
4. 初始化输入捕获通道  
   TIM_ICInit();  
5. 配置相应的中断  
6.  NVIC_Init();  
    TIM_ITConfig();  
7. 使能定时器:TIM_Cmd();  
8. 编写中断服务函数:TIMx_IRQHandler();  

5 高级定时器

高级定时器的框图和通用定时器功能类似,增加了其他功能,重复计数器,带死区控制的互补输出通道,断路输入等。高级定时器为TIM1和TIM8。

① 重复计数器: 当发生上溢或下溢的时候,重复计数器的值会减一,当重复计数器的值为0时,再发生一次上溢或者一溢才会生成定时器更新事件。

②输出比较:高级定时器输出比较部分和通用定时器相比,多了带死区控制的互补输出功能。

③断路功能: F1 系列有一个断路通道,断路源可以 是刹车输入引脚(TIMx_BKIN),也可以是一个时钟失败事件。时钟失败事件由复位时钟控制器中的时钟安全系统产生。系统复位后,断路功能默认被禁止,MOE位为低。

面经

  1. 定时器延时相对于软件延时的好处?

精确度和稳定性更好。定时器是依赖硬件实现的,具有更高的频率和更小的误差。软件延时依赖于处理器的执行速度和系统的当前负载,可能受到中断、任务切换等因素的干扰,导致延时不稳定和不准确。

CPU资源利用率:硬件定时器在计时期间不占用CPU资源,软件通常通过空循环实现,使得CPU无法执行其他任务。

系统性能更高。

2.请解释嵌入式系统中的时钟和定时器的作用,以及你在项目中如何使用它们

时钟可以提供统一的时间基准,用于驱动组件的运行,同时保证系统所有组件的同步工作。

定时器可以实现:

1.不占用CPU资源完成延时功能。
2. 周期性任务,如定时采样,定时刷新
3. 计数器功能,记录特定事件的发生次数和时间间隔
4. PWM, 定时器可以用于生成PWM信号,控制电机速度、LED亮度等。

3.定时器和中断处理有什么需要注意的吗

中断处理函数需要快速执行,不能有睡眠函数。
中断处理程序中的延时最好不要使用毫秒延时,因为对内核来说时间非常长。
print函数在中断处理函数中可以使用,但是会占用较多时间,降低效率。

4. 定时器中断

定时器中断是一种基于硬件定时器的中断机制,它允许程序在预设的时间间隔或特定时间点上自动触发中断处理程序。使用流程为配置定时器,启用定时器中断,定时器计数,产生中断,执行中断处理程序,恢复被中断前的主程序去执行。

本文原文来自CSDN

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号