【STM32CubeMX学习教程】——4.定时器中断配置(通用定时器)


一、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

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

Alt

2.设置RCC时钟源

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

Alt

3.设置定时器参数

1.定时器中断参数设置

Alt
2.使能定时器中断

Alt
注:

定时器溢出时间(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振荡器产生,可通过图中按钮进行修改,外部晶振数值取决于实际电路板上的晶振大小.

Alt
提示:

  • 这里用到的芯片的最大时钟频率是100MHz,有的芯片最大只有72MHz,实际最大频率可通过查看芯片数据手册确定。

2.时钟频率设置

Alt
①PLLM—PLL输入时钟分频系数,根据自己需要的系统时钟频率来进行修改
②PLLN—主PLL倍频系数(自动计算)
③PLLP—主PLL分频系数(自动计算)
④SYSCLK—系统时钟
⑤HCLK—AHB总线时钟,由系统时钟SYSCLK 分频得到,一般不分频,等于系统时钟
⑥APB1/APB2 Prescaler—APB1/APB2总线的预分频系数,可根据需要修改

5.工程管理

1.工程设置
注:工程路径中不能有中文,否则会输出错误。
库文件要提前下载好,具体方法在 “【STM32CubeMX学习教程】——1.软件安装” 这一篇文章中有提到。

Alt

2.代码生成设置

Alt

6.生成源码

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

Alt

四、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);

五、定时器循环计数中断工作流程示意图

定时器启动
CNT计数器++
CNT=ARR?
产生中断
硬件置位中断标志
进入TIMx_IRQHandler
调用HAL_TIM_IRQHandler
自动清除中断标志
执行用户回调函数
CNT归零

六、注意事项

1.不同STM32系列的定时器数量和功能可能有差异
2.定时器时钟源来自APB总线,注意时钟树配置
3.使用高级功能时注意引脚复用配置
4.中断优先级需合理设置以避免冲突
通过合理配置STM32的定时器,可以实现精确的定时、PWM生成、信号测量等多种功能,是嵌入式系统开发中的重要组成部分。


以上就是本章的全部内容,如果对你有帮助,欢迎点赞支持,谢谢!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玥山山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值