一、定时器概述
- 1.1、软件定时原理
- 1.2、定时器定时原理
- 1.3、STM32定时器分类
- 1.4、STM32定时器特性表
- 1.5、STM32基本、通用、高级定时器的功能整体区别
二、基本定时器
- 2.1、基本定时器简介
- 2.2、基本定时器框图
- 2.3、定时器计数模式及溢出条件
- 2.4、定时器中断实验相关寄存器
- 2.5、定时器溢出时间计算方法
- 2.6、定时器中断实验配置步骤
- 2.7、编程实战:定时器中断实验
三、通用定时器
- 3.1、通用定时器简介
- 3.2、通用定时器框图
- 3.3、计数器时钟源
- 3.4、通用定时器PWM输出实验
- 3.4.1、通用定时器输出比较部分框图介绍
- 3.4.2、通用定时器输出PWM原理
- 3.4.3、PWM模式
- 3.4.4、通用定时器PWM输出实验配置步骤
- 3.4.5、编程实战:通用定时器PWM输出实验
- 3.5、通用定时器输入捕获实验
- 3.5.1、通用定时器输入捕获部分框图介绍
- 3.5.2、通用定时器输入捕获脉宽测量原理
- 3.5.3、通用定时器输入捕获实验配置步骤
- 3.5.4、编程实战:通用定时器输入捕获实验
- 3.6、通用定时器脉冲计数实验
- 3.6.1、脉冲计数实验原理
- 3.6.2、通用定时器脉冲计数实验配置步骤
- 3.6.3、编程实战:通用定时器脉冲计数实验
四、高级定时器
- 4.1、高级定时器简介
- 4.2、高级定时器框图
- 4.3、高级定时器输出指定个数PWM实验
- 4.4、高级定时器输出比较模式实验
- 4.4.1、高级定时器输出比较模式实验原理
- 4.4.2、高级定时器输出比较模式实验配置步骤
- 4.4.3、编程实战:高级定时器输出比较模式实验
- 4.5、高级定时器互补输出带死区控制实验
- 4.5.1、互补输出,还带死区控制,什么意思?
- 4.5.2、带死区控制的互补输出应用之H桥
- 4.5.3、捕获/比较通道的输出部分(通道1至3)
- 4.5.4、死区时间计算
- 4.5.5、刹车(断路)功能
- 4.5.6、高级定时器互补输出带死区控制实验配置步骤
- 4.5.7、编程实战:高级定时器互补输出带死区控制实验
- 4.6、高级定时器PWM输入模式实验
- 4.6.1、PWM输入模式工作原理
- 4.6.2、PWM输入模式时序
- 4.6.3、高级定时器PWM输入模式实验配置步骤
- 4.6.4、编程实战:高级定时器PWM输入模式实验
五、课堂总结
一、定时器概述
1.1、软件定时原理
软件定时的原理是利用CPU执行特定的指令序列来实现延时功能,即在程序中通过循环等待的方式来达到延时的效果。通常情况下,软件定时的实现会通过以下步骤进行:
-
确定延时时间: 程序中确定所需的延时时间,以满足特定的需求。
-
编写延时函数: 编写延时函数来实现延时的功能。这个函数会在程序中占用一定的时间,使得程序在执行到该函数时会停顿一段时间。
-
实现延时逻辑: 在延时函数中,使用循环等待的方式来实现延时。通常是通过执行空循环、计数循环等方式来实现。
-
调用延时函数: 在程序中需要延时的地方调用该延时函数,从而实现延时的效果。
软件定时的缺点包括:
-
延时不精准: 基于纯软件实现的延时往往不够精确,受到CPU执行指令的速度、流水线机制、缓存机制、压栈出栈操作等因素的影响,导致实际延时时间与期望值有一定的误差。
-
CPU死等: 在延时期间,CPU需要持续执行空循环或者计数循环等操作,这会导致CPU处于忙等待状态,不能执行其他的任务,降低了系统的效率。
由于软件定时的这些缺点,通常在对精准度要求较高、延时时间较长、需要充分利用CPU执行其他任务的情况下,会采用硬件定时器或者其他硬件模块来实现定时功能。
1.2、定时器定时原理
定时器定时的原理是利用硬件定时器模块中的计数器和自动重载寄存器来实现精准的定时功能。以下是定时器定时的基本原理:
-
时钟源选择: 定时器需要一个时钟源来驱动计数器的计数。通常情况下,时钟源可以是微控制器的系统时钟或者外部时钟源。
-
预分频器设置: 时钟源经过预分频器(PSC)进行预分频,以得到更低的时钟频率。预分频器的设置可以调节定时器的计数速率,从而影响定时的精度和范围。
-
计数器计数: 经过预分频后的时钟信号将驱动定时器的计数器(CNT)开始计数。计数器从零开始计数,每个时钟周期加1,直到达到自动重载值(ARR)为止。
-
溢出检测: 当计数器的值达到自动重载值时,会触发溢出事件,计数器将重新从零开始计数,并发出一个溢出中断信号。
-
重新加载: 自动重载寄存器(ARR)存储着计数器重新加载的值。当计数器溢出时,自动重载寄存器的值会重新加载到计数器中,从而实现周期性的定时功能。
通过以上步骤,定时器可以实现精准的定时功能,而且由于定时器的计数过程由硬件实现,不需要CPU的干预,因此不会占用CPU资源,能够同时执行其他任务,提高了系统的效率。定时器定时在嵌入式系统中被广泛应用于周期性任务的调度、PWM信号生成、输入捕获等领域。
1.3、STM32定时器分类
在STM32系列微控制器中,定时器可以按功能和用途进行分类,主要分为以下三类:
-
常规定时器:
- 基本定时器(Basic Timers): 通常用于产生简单的定时中断,具有较为简单的功能和较低的精度要求。
- 通用定时器(General-purpose Timers): 包括TIM2、TIM3、TIM4等,功能强大,适用于复杂的定时任务,具有多种工作模式和功能。
- 高级定时器(Advanced Timers): 包括TIM1和TIM8等,具有更高级别的功能和精度,通常用于需要高性能和精准度的定时任务。
-
专用定时器:
- 独立看门狗(Independent Watchdog,IWDG): 用于监控系统运行状态,防止程序死循环或意外死锁。
- 窗口看门狗(Window Watchdog,WWDG): 监控程序运行时效性,提前唤醒中断。
- 实时时钟(Real-time Clock,RTC): 提供实时时间和日期信息,通常用于实时时钟和日历功能。
- 低功耗定时器(Low-power Timer,LPTIM): 用于低功耗模式下的定时任务,具有较低的功耗和精度。
-
内核定时器:
- SysTick定时器: 是由内核提供的用于系统定时的定时器,可用于操作系统的时钟节拍、延时函数等,通常用于系统调度和时间基准。
这些定时器在STM32微控制器中提供了灵活且多样化的定时功能,可以根据具体应用需求选择合适的定时器类型和配置。
1.4、STM32定时器特性表
定时器类型 | 特性 |
---|---|
基本定时器 | - 简单的定时功能 |
- 16位定时器 | |
- 有一个16位自动重装载寄存器 | |
- 可以直接连接到GPIO口输出PWM信号 | |
- 适用于简单的定时任务 | |
通用定时器 | - 多功能、灵活的定时器 |
- 16位或32位定时器,具有多个通道 | |
- 多种计数模式,包括向上计数、向下计数、中心对齐计数等 | |
- 可以产生PWM信号、捕获输入信号、触发输出比较等功能 | |
- 适用于复杂的定时任务,如PWM控制、编码器接口等 | |
高级定时器 | - 高级功能、高精度的定时器 |
- 16位或32位定时器,具有多个通道 | |
- 支持同步、异步触发、定时器联动等高级功能 | |
- 适用于需要高性能和精准度的定时任务,如高速PWM、电机控制等 | |
独立看门狗 | - 监控系统运行状态,防止程序死循环或死锁 |
- 12位递减计数器 | |
- 内部时钟源(LSI)提供时钟 | |
- 可以产生系统复位信号 | |
窗口看门狗 | - 监控程序运行时效性,提前唤醒中断 |
- 7位递减计数器 | |
- 可以设置窗口期,超出窗口期产生中断 | |
- 可以产生系统复位信号 | |
实时时钟 | - 提供实时时间和日期信息 |
- 可以设置闹钟、日历、定时器等功能 | |
- 用于实时时钟和日历功能 | |
低功耗定时器 | - 用于低功耗模式下的定时任务 |
- 16位定时器,适用于低功耗模式下的长期计时任务 | |
- 低功耗模式下工作,具有较低的功耗 | |
SysTick定时器 | - 内核提供的系统定时器 |
- 24位定时器,用于系统时钟节拍、延时函数等 | |
- 用于操作系统的时钟节拍、延时函数等 |
1.5、STM32基本、通用、高级定时器的功能整体区别
定时器类型 | 主要功能 |
---|---|
基本定时器 | - 没有输入输出通道,常用作时基,即定时功能 |
- 16位定时器,可产生定时中断、PWM信号等 | |
- 适用于简单的定时任务,如延时、周期性触发等 | |
通用定时器 | - 具有多路独立通道,可用于输入捕获、输出比较等 |
- 16位或32位定时器,具有多种计数模式、多个通道 | |
- 可以产生PWM信号、捕获外部输入信号、触发输出比较等功能 | |
- 适用于复杂的定时任务,如PWM控制、编码器接口等 | |
高级定时器 | - 除具备通用定时器所有功能外,还具备带死区控制的互补信号输出、刹车输入等功能 |
- 提供高级功能、高精度的定时任务支持,如高速PWM、电机控制等 | |
- 适用于需要高性能和精准度的定时任务,如电机控制、数字电源设计等 |
二、基本定时器
2.1、基本定时器简介
基本定时器(TIM6/TIM7)是STM32中的两个简单的定时器,主要特性包括:
- 16位递增计数器: 可以计数从0到65535的整数,计数器在计数溢出时会重新从0开始计数。
- 16位预分频器: 可以将外部时钟源预分频,分频系数范围从1到65536,用于调节定时器的时钟频率。
- 可用于触发DAC: 可以利用基本定时器的更新事件(计数器溢出)来触发DAC转换,实现定时产生模拟输出信号。
- 中断/DMA请求: 基本定时器在更新事件发生时(即计数器溢出)会产生中断或DMA请求,用户可以在中断服务函数中执行相应的操作,或者通过DMA实现数据传输等功能。
2.2、基本定时器框图
影子寄存器
影子寄存器是指在某些微控制器中,特定功能模块的寄存器拥有两个版本:影子寄存器和实际寄存器。
-
实际寄存器: 是硬件内部用于存储功能模块配置的寄存器,由硬件直接访问和使用。
-
影子寄存器: 是由软件访问的虚拟寄存器,用于向硬件配置功能模块的参数。当软件写入影子寄存器时,其值会自动传送到对应的实际寄存器,从而配置了功能模块的相关参数。
使用影子寄存器的好处在于,软件可以在不直接访问硬件寄存器的情况下配置功能模块,从而避免了由于并发访问导致的冲突和错误。此外,使用影子寄存器也使得软件的编程更加灵活和可控。
U事件和UI中断
U事件(Update Event)和UI中断(Update Interrupt)是定时器(TIM)功能中的两个重要概念:
-
U事件(Update Event): 当定时器的计数器溢出并重新开始计数时,或者在通过软件更新定时器的计数器值时,会触发U事件。这种更新事件常用于定时器的基本计时功能,例如生成精确的延时、定时采样等。
-
UI中断(Update Interrupt): UI中断是当定时器发生U事件时触发的中断请求。通过使能UI中断,可以让CPU在定时器发生更新事件时响应中断请求,并执行相应的中断服务程序。UI中断通常用于周期性的任务执行、定时采样、定时器管理等。
总的来说,U事件是定时器的一个基本触发事件,而UI中断则是由U事件触发的中断请求,通过处理UI中断,可以实现基于时间的任务调度和定时功能。
基本定时器的框图详解
基本定时器的框图主要包括三个部分:
-
时钟源(Clock Source): 定时器的时钟源通常来自于RCC(Reset and Clock Control)模块的TIMxCLK。这个时钟源经过内部时钟(CK_INT)后,传递给定时器的控制器。
-
控制器(Controller): 定时器的控制器负责控制定时器的各种功能,如复位、使能、计数等。它可以接收来自外部的触发信号(TRGO),并将计数器的计数结果发送到其他模块,比如DAC(Digital-to-Analog Converter)进行数模转换。
-
计数器(Counter,时基单元): 计数器是定时器的核心部分,用于实现计时功能。时钟信号经过PSC(Prescaler)预分频器进行预分频,然后输入到计数器(CNT)中进行计数。当计数器的值达到自动重装载寄存器(ARR)的值时,会产生溢出事件,即计数器溢出,产生一个更新事件(Update Event)。这个更新事件可以由硬件触发,也可以通过软件产生。UG位可产生软件更新事件,在更新事件时,计数器的值可以自动重装载为ARR的值,实现定时器的连续计时功能。
基本定时器ARPE位还可以配置自动重装载寄存器(ARR)是否具有缓冲,以及其他一些控制参数,以满足不同的定时需求。
2.3、定时器计数模式及溢出条件
2.4、定时器中断实验相关寄存器
2.5、定时器溢出时间计算方法
2.6、定时器中断实验配置步骤
2.7、编程实战:定时器中断实验
三、通用定时器
3.1、通用定时器简介
3.2、通用定时器框图
3.3、计数器时钟源
3.4、通用定时器PWM输出实验
3.4.1、通用定时器输出比较部分框图介绍
3.4.2、通用定时器输出PWM原理
3.4.3、PWM模式
3.4.4、通用定时器PWM输出实验配置步骤
3.4.5、编程实战:通用定时器PWM输出实验
3.5、通用定时器输入捕获实验
3.5.1、通用定时器输入捕获部分框图介绍
3.5.2、通用定时器输入捕获脉宽测量原理
3.5.3、通用定时器输入捕获实验配置步骤
3.5.4、编程实战:通用定时器输入捕获实验
3.6、通用定时器脉冲计数实验
3.6.1、脉冲计数实验原理
3.6.2、通用定时器脉冲计数实验配置步骤
3.6.3、编程实战:通用定时器脉冲计数实验
四、高级定时器
4.1、高级定时器简介
4.2、高级定时器框图
4.3、高级定时器输出指定个数PWM实验
4.4、高级定时器输出比较模式实验
4.4.1、高级定时器输出比较模式实验原理
4.4.2、高级定时器输出比较模式实验配置步骤
4.4.3、编程实战:高级定时器输出比较模式实验
4.5、高级定时器互补输出带死区控制实验
4.5.1、互补输出,还带死区控制,什么意思?
4.5.2、带死区控制的互补输出应用之H桥
4.5.3、捕获/比较通道的输出部分(通道1至3)
4.5.4、死区时间计算
4.5.5、刹车(断路)功能
4.5.6、高级定时器互补输出带死区控制实验配置步骤
4.5.7、编程实战:高级定时器互补输出带死区控制实验
4.6、高级定时器PWM输入模式实验
4.6.1、PWM输入模式工作原理
4.6.2、PWM输入模式时序
4.6.3、高级定时器PWM输入模式实验配置步骤
4.6.4、编程实战:高级定时器PWM输入模式实验
五、课堂总结
一、
二、
三、
四、
五、
六、
七、
八、
九、
十、
一、
二、
三、
四、
五、
六、
七、
八、
九、
十、