一、CubeMx的配置
(1) 基础配置
首先看上一篇文章把LED灯、基础的SYS、RCC、时钟树给配置好
(2) TIM配置
基础的理论知识
定时器的输入时钟频率是170MHz
要打开中断
(3)注意
可以在配置的时候把其它LED都设置为OutPut模式,然后全都置高电平,这样的现象就能很清楚的看见指定LED灯的现象
二、代码
(1)让定时器开始工作
此时虽然生成了TIM2的初始函数,但是TIM2并未开始工作。所以我们要打开TIM2的时基功能,因为我们开启了中断,所以我们要用HAL_TIM_Base_Start_IT()来让定时器开始工作
这样就打开了带有中断的时基功能,此时TIM2就可以开始工作了
HAL_TIM_Base_Start_IT(&htim2);
(2)定时器的中断函数
这个就是我们TIM2的中断函数,在stm32g4xx_it.c里面
(3)被中断函数调用的回调函数
(4)前面加__weak就是弱函数定义
这个弱函数的存在是因为,前面已经调用了中断回调函数,所以必须要写一个这个函数要执行那些任务。但是因为还没有决定好这个函数到底要执行什么任务,所以就先写一个弱函数占位置,后续有需要它执行的任务再写上去。其实这个弱函数里面相当于什么都没写
所以后面用户可以自己写一个不带weak的函数,这样函数的优先级就比程序里面原带的高,我们就可以在这个函数里面写我们想让它执行的任务
(5)main函数的主体部分
这个static应该是用于纯局部变量
其实这个函数的执行逻辑不太懂
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
static uint16_t cnt=0;//局部定义
cnt++;
if(cnt>=1000)
{
cnt=0;
HAL_GPIO_TogglePin(LED2_GPIO_Port ,LED2_Pin );
}
}