名词解释:
TRGO:Trigger Out General Purpose Output
ARR:Auto-reload
PSC:Prescaler
CNT:Counter
EGR:event generation register
本文将介绍基本定时器的概念、相关函数以及STM32CubeMX生成定时器的配置函数以及对生成定时器的配置函数进行分析(包括结构体配置、相关寄存器配置)。
最后针对于定时器实践:使用TIM6使能DMA请求时,使用DMA、中断两种方式修改定时器的ARR值,并且用逻辑分析查看结果。
0. F4系列定时器分类
- 最大接口时钟(Max interface clock (MHz))
1. 定时器与系统内核(如MCU)之间的通信接口(如APB总线)支持的最高时钟频率。
2. 它决定了定时器寄存器配置和状态读取的速度上限。例如,如果接口时钟为84 MHz,则对定时器寄存器的读写操作需基于该频率进行,不能超过此速率。 - 最大定时器时钟(Max timer clock (MHz))
1. 定时器内部计数器(Counter)实际运行时的最高时钟频率。
2. 它决定了定时器的计数速度,直接影响定时器的计时精度和输出信号的频率上限。例如,168 MHz的定时器时钟意味着计数器每秒最多递增168,000,000次。
1. 什么是基本定时器?
1.1 基本定时器概念
1.1.1 基本定时器功能
STM32F4系列的基本定时器为TIM6和TIM7。基本定时器包括16 位自动重载递增计数器,16 位可编程预分频器,预分频系数 1~65536,用于对计数器时钟频率进行分频,还可以(TRGO)触发 DAC 的同步电路,以及生成中断/DMA 请求。
1.1.2 基本定时器框图
- 时钟来源 - APB1
参考第0章第二个图片,其时钟内部计数频率为84Mhz。 - TIM控制器
复位、使能、计数与TRGO(通用触发输出)DAC。 - 时基单元
· 预分频器寄存器 (TIMx_PSC) - 具有影子寄存器
· 计数器寄存器 (TIMx_CNT)
· 自动重载寄存器 (TIMx_ARR)- 具有影子寄存器 - 影子寄存器:
· 发生更新事件时,根据控制位传输到活动寄存器(实际执行的寄存器)的预装载寄存器
· U event:更新事件 UEV
1.2 基本定时器具体说明
1.2.1 基本定时器-时基单元
定时器的主要模块由一个16位递增计数器及其相关的自动重载寄存器组成。计数器的时钟可通过预分频器进行分频。
· TIMx_CR1.ARPE(自动重载预装载使能位)
0:TIMx_ARR 寄存器不进行缓冲;1:TIMx_ARR 寄存器进行缓冲。
· TIMx_CR1.UDIS(更新禁止 (Update disable)):用以使能/禁止 UEV 事件生成。
0:使能 UEV;1:禁止 UEV。
· TIMx_CR1.CEN(计数器使能 (Counter enable))
0:禁止计数器;1:使能计数器
· TIMx_PSC(预分频寄存器)
[15:0]:预分频器值 (Prescaler value)
· 定时器计算器频率与定时器时钟的关系:
· TIMx__CR1.URS(更新请求源 (Update request source))
0:使能时,所有以下事件(硬、软件生成更新事件、从模式控制器接收外部触发信号产生的更新事件(基本定时器没有主从模式))都会生成更新中断或 DMA 请求。
1:使能时,只有计数器上溢/下溢会生成更新中断或 DMA 请求。
· TIMx_EGR.UG(更新生成 (Update generation)):软件强制产生更新事件
0:不执行任何操作;1:重新初始化定时器计数器并生成寄存器更新事件
1. PSC=1 -> PSC=4;使能自动重装载寄存器
2. PSC=2,ARR=36
3. UG=1时,CK_CNT变化
CNT_INIT:用于强制复位计数器并更新相关寄存器值(如预分频器 Prescaler、自动重载寄存器 ARR 等)。
1.2.2 基本定时器-两种更新事件
1. 软件更新事件
将 TIMx_EGR 寄存器的位UG置 1,产生更新事件后,硬件会自动将UG位清零。
2. 软件更新事件
每来一个CK_CNT脉冲,TIMx_CNT的值就会递增加1。当 TIMx_CNT 值 与 TIMx_ARR 的设定值相等时,TIMx_CNT 的值就会被自动清零并且会生成更新事件。
1.2.3 基本定时器-调试模式
当微控制器进入调试模式时(Cortex™-M4F 内核停止),TIMx计数器会根据DBG模块中 的DBG_TIMx_STOP配置位选择继续正常工作或者停止工作。
2. 基于HAL库配置基本定时器外设
2.1 CubeMX配置基本定时器外设
2.1.1 基本定时器6参数初始化
2.1.2 使能定时器6-DMA通道(TIM_UPdate为DMA请求信号)
HAL库HAL_TIM_Base_Start_DMA设计DMA的外设地址是TIM6-ARR。
注意:要使能DMA的循环传输模式(单次传输模式需要再DMA中断里面再次添加HAL_TIM_Base_Start_DMA(且单词传输模式下,HAL_TIM_Base_Start_DMA使能定时器只执行一个周期就不在运行))
2.1.3 定时器6-相关中断
2.2 基本定时器外设初始化流程
2.3 基本定时器寄存器基地址
2.4 基本定时器寄存器
2.5 基本定时器相关函数汇总
3. 基本定时器实践
3.1 利用TIM6中断方式修改TIM6的ARR值
- main函数
- 中断回调函数
3.2 利用TIM6-DMA方式修改TIM6的ARR值
- main函数
- 中断回调函数
3.3 实践结果
通过LED反转查看定时器的ARR值
每次ARR加1000(0.1s)
4. 本文的工程文件下载链接
工程Github下载链接:https://github.com/chipdynkid/MCU-DL-STM32
(国内)工程Gitcode下载链接https://gitcode.com/chipdynkid/MCU-DL-STM32