本文旨在介绍如何使用STM32CubeMX配置+KEIL 5开发一个每10us定时器中断触发一次的项目。帮助初学者入门STM32的定时器使用。
定时器是STM32微控制器中非常重要的功能模块之一,用于计时、生成精确的时间延迟、触发事件等。STM32微控制器通常具有多个定时器模块,包括通用定时器(General Purpose Timer)和高级定时器(Advanced Timer)。每个定时器模块都具有多个通道,每个通道都可以用于不同的定时和计数操作。
以下是一些常见的STM32定时器的特点和功能:
使用STM32的定时器,您可以执行以下操作:
此项目为了讲解如何使用定时器,每10us触发一次定时器中断。我们可以通过这个实例,进行自己的开发。
使用STM32CubeMX创建一个工程
RCC选取外部时钟
![3
选择Debug(不选不能烧录和调试)
4. Clock Source:定时器时钟源,选择Internal Clock
5. 然后开始配置时钟树,设置如下图所示,使定时器主频为168MHz。而TIM3是挂接在APB1上的,所以也就是要让APB1这儿最终为84MHz
6. 实现时钟配置:设置定时器中断,每10us触发中断一次。(后续canopen的最小时间单位即为此处进入一次中断的时间),每次进入定时器中断的的时间计算公式为:
t
i
m
e
=
((
P
r
e
s
c
a
l
e
r
+
1
)(
P
e
r
i
o
d
+
1
))
/
定时器总线时钟源
time=((Prescaler+1)(Period+1))/定时器总线时钟源
time=((Prescaler+1)(Period+1))/定时器总线时钟源
eg:当定时器总线时钟源为84MHz,Prescaler为83,Period为9.此时定时时间为:84*10/84000000=0.00001s=10us。
7. 打开定时器中断
8. 填写生成的工程信息(工程名称,存放位置等)
值得注意的是,MDK的最小版本千万不要选错
9. 生成代码
成功的话会出现提示
进入工程,发现初始化代码都已经生成
进入Keil 5后,不要忘了配置debug,不然会烧录失败。
我们需要开启定时器中断: HAL_TIM_Base_Start_IT(&htim3);
编写定时器中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == htim3.Instance)
{
//书写我们想要执行的功能
}
}