说明:
本案例采用的定时器3(TIM3)实现,使用其他定时器是一样配置。
如何新建一个工程以及如何配置LED的端口,请查看前面文章:使用STM32CubeMX实现LED灯每秒闪烁一次(STM32G070CBT6单片机)-CSDN博客
1.配置SYS
2.配置RCC
3.配置系统时钟
此处配置系统时钟为64MHz。
注意!!!
此处系统时钟要采用HSI,如果采用HSE则将不能实现功能。
4.配置定时器TIM3
定时时间计算公式:
定时时间 = (Prescaler+1)× (Counter +1)/ 定时器时钟频率
例如,这里定时时间为 10ms,可设置Prescaler = 64-1;Counter = 10000 - 1;(TIM3时钟频率设置为64MHz)
(1)配置定时器
(2)配置定时器中断
5.点击生成文件。
6.添加代码实现功能
要想使用定时器3,那么需要先将其打开。采用如下函数打开。
HAL_TIM_Base_Start_IT(&htim3); //开启定时器3
要实现LED闪烁,还需要增加定时器回调函数,在其中添加LED闪烁功能代码。
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{static unsigned char count = 0;if(htim->Instance == TIM3) //处理TIM3间隔定时中断{count++;if(count >= 50) //10ms*50=500ms{count = 0;HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5); //每500ms翻转一次,LED每秒闪烁一次}}
}
main.c文件中的代码:
//要增加的代码
//定时器回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{static unsigned char count = 0;if(htim->Instance == TIM3) //处理TIM3间隔定时中断{count++;if(count >= 50) //10ms*50=500ms{count = 0;HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5); //每500ms翻转一次,LED每秒闪烁一次}}
}int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_TIM3_Init();HAL_TIM_Base_Start_IT(&htim3); //要增加的代码,开启定时器3while (1){}}
7.实现现象
定时器实现LED每秒闪烁一次