一、学习目的
在STM32学习中,定时器是一个非常重要的组成部分。本文将详细记录如何通过CubeMX工具配置定时器,以实现1ms的定时功能。(附计算公式)
二、CubeMX配置
(1)首先打开CubeMX软件,新建工程。有关软件使用以及新建工程的相关操作在之前的文章中已经有过记载,有需要可以查看以下文章:蓝桥杯嵌入式学习记录——点亮第一个LED(含软件的使用)_蓝桥杯嵌入式led-CSDN博客
(2)进入如下界面后,先点击System Core > RCC时钟选项,如图步骤所示打开高速时钟设置
(3)再点击SYS >Debug ,选择串口通信方式
(4)接着按照下图步骤修改时钟参数,设置时钟频率为72MHz,以下提供修改后的参数图
(5)完成以上基础配置就可以开始配置定时器了,按照以下标注的操作步骤进行配置,1点击进入左侧的Timers>TIM2,2配置时钟源为内部时钟,3打开定时器中断设置
(6)配置定时器的参数,这一步用来设置定时的时长,定时时长的计算公式如下:
定时时间 = (预分频器值计数器重载值)/ 定时器时钟频率
脉冲频率 = 1 / 定时时间
由于我们前面设置的时钟频率为72MHz,因此,我们想要定时1ms就可以计算出:预分频器值计数器重载值 = 72000,即可以如下设置参数:
至此,定时器配置已经完成,接下来就可以按照如下步骤生成工程文件:
(1)给工程文件命名 > 选择编辑器
(2)选择生成文件类型 > 生成文件
三、代码编写
CubeMX的配置完成之后,就可以打开工程文件进行代码编写了
(1)在编写代码时,首先需要使能定时器中断,可以通过以下代码进行开启和关闭
HAL_TIM_Base_Start_IT(&htim2); //使用定时器的时候调用这个函数启动
HAL_TIM_Base_Stop_IT(&htim2); //停止定时器的时候调用这个函数关闭
这里需要注意的是,一旦写下HAL_TIM_Base_Start_IT(&htim2); 函数,程序就会开启中断,所以一般写在主函数while循环前面,也可以根据需要写在对应操作后面
(2)以下是定时器中断服务函数,也叫回调函数:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM2)
{
//编写回调逻辑,即定时器2定时5MS后的逻辑
}
}
从代码中可以看出,函数会先进行判断,如果TIM2中断才会执行中断事件,也就对应了上面的“一旦写下HAL_TIM_Base_Start_IT(&htim2); 函数,程序就会开启中断”
然后就可以编写相关的中断时间,例如希望定时1秒后点亮LED灯,可以如下编写代码:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
static int i;
if(htim->Instance == TIM2)
{
if(i == 1000) // 执行1000次1ms定时,即1秒后
{
i = 0; //让i = 0,重新计时
LED = 0; // 点亮LED(需要另外配置和编写函数)
}
}
}
至此,定时器的配置就记录完成了
引用
感谢以下文章博主
STM32CubeMX——定时器配置_cubemx配置定时器-CSDN博客