文章目录
一、STM32定时器概述
STM32微控制器内置了多种定时器,主要分为以下几类:
1.基本定时器(TIM6, TIM7等)
- 最简单的定时器
- 仅支持向上计数
- 主要用于定时和触发DAC
2.通用定时器(TIM2-TIM5, TIM9-TIM14等)
- 支持向上/向下计数
- 支持输入捕获、输出比较、PWM生成
- 可连接外部时钟源
3.高级定时器(TIM1, TIM8等)
- 具有通用定时器所有功能
- 额外支持互补输出、死区控制
- 常用于电机控制
二、定时器主要功能
1.时基单元
- 计数器寄存器(TIMx_CNT): 存储当前计数值
- 预分频器(TIMx_PSC): 对时钟源进行分频
- 自动重装载寄存器(TIMx_ARR): 定义计数周期
2.工作模式
- 向上计数: 计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件。
- 向下计数: 计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。
- 中央对齐模式: 先向上后向下计数,即计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。
3.常用功能
- 定时中断: 到达设定时间产生中断,即允许在特定定时事件发生时触发中断服务程序(ISR),实现精确的定时控制和事件响应。
- PWM输出: 定时器可以产生周期和占空比可调的 PWM 信号,用于控制电机、LED 亮度等。
- 输入捕获: 测量脉冲宽度或频率,例如当外部一个PWM信号发送给单片机,单片机管脚检测到上降沿信号后开始计时,再次检测到下个上降沿后停止计数,这样就可以测量这个信号两个上降沿所需时间。这个功能叫输入捕获。
- 输出比较: 定时器可以将当前计数值与预设值进行比较,并根据比较结果输出高低电平信号。例如我们设定一个寄存器的值为500,计数器依此加一,当计数器的值小于500时输出低电平,当计数器的值大于等于500时输出高电平。
三、STM32CubeMX定时器配置
1.新建工程
1.双击打开桌面下载好的STM32CubeMX,点击File–>New Project,或直接点击ACCEE TO MCU SELECTOR

2.在左边搜索栏里输入使用的芯片型号,右边选中并开始创建

2.设置RCC时钟源
设置高/低速时钟源都由外部晶振产生。

3.设置定时器参数
1.定时器中断参数设置

2.使能定时器中断

注:
定时器溢出时间(T)的计算公式为:
T = (ARR + 1) × (PSC + 1) / TIM_CLK
其中:
- ARR (Auto-Reload Register):自动重装载值
- PSC (Prescaler):预分频系数
- TIM_CLK:定时器时钟频率
假设:
- 使用TIM3(APB1总线,96MHz)
- PSC = 9599
- ARR = 9999
计算:
定时时间 = (ARR + 1) × (PSC + 1) / TIM_CLK
= (9999 + 1) × (9599 + 1) / 96,000,000
= 10,000 × 9,600 / 96,000,000
= 96,000,000 / 96,000,000
= 1秒
4.时钟配置
1.时钟源设置
默认时钟源是由内部RC振荡器产生,可通过图中按钮进行修改,外部晶振数值取决于实际电路板上的晶振大小.

提示:
- 这里用到的芯片的最大时钟频率是100MHz,有的芯片最大只有72MHz,实际最大频率可通过查看芯片数据手册确定。
2.时钟频率设置

①PLLM—PLL输入时钟分频系数,根据自己需要的系统时钟频率来进行修改
②PLLN—主PLL倍频系数(自动计算)
③PLLP—主PLL分频系数(自动计算)
④SYSCLK—系统时钟
⑤HCLK—AHB总线时钟,由系统时钟SYSCLK 分频得到,一般不分频,等于系统时钟
⑥APB1/APB2 Prescaler—APB1/APB2总线的预分频系数,可根据需要修改
5.工程管理
1.工程设置
注:工程路径中不能有中文,否则会输出错误。
库文件要提前下载好,具体方法在 “【STM32CubeMX学习教程】——1.软件安装” 这一篇文章中有提到。

2.代码生成设置

6.生成源码
1.点击右上角按钮生成代码,之后会出现下面的窗口,再点击打开工程即可在用keil查看工程代码。

四、HAL库中常用的定时器相关代码
1.初始化定时器基本参数
HAL_TIM_Base_Init(&htim3);
2.启动定时器3
HAL_TIM_Base_Start(&htim3);
3.清除定时器中断标志
__HAL_TIM_CLEAR_IT(&htim3, TIM_IT_UPDATE);
4.启动定时器中断
HAL_TIM_Base_Start_IT(&htim3);
5.停止定时器中断
HAL_TIM_Base_Stop_IT(&htim3);
6.定时器3中断服务函数
void TIM3_IRQHandler(void);
五、定时器循环计数中断工作流程示意图
六、注意事项
1.不同STM32系列的定时器数量和功能可能有差异
2.定时器时钟源来自APB总线,注意时钟树配置
3.使用高级功能时注意引脚复用配置
4.中断优先级需合理设置以避免冲突
通过合理配置STM32的定时器,可以实现精确的定时、PWM生成、信号测量等多种功能,是嵌入式系统开发中的重要组成部分。
以上就是本章的全部内容,如果对你有帮助,欢迎点赞支持,谢谢!
5191

被折叠的 条评论
为什么被折叠?



