在STM32中,可以使用定时器中断来控制LED的闪烁频率,而不是使用阻塞的延时函数。以下是如何实现的步骤:
1. 定时器配置
以TIM2为例,配置定时器产生中断:
c
复制代码
#include "stm32f4xx_hal.h"
TIM_HandleTypeDef htim2;
void TIM2_Init(void) {
__HAL_RCC_TIM2_CLK_ENABLE();
htim2.Instance = TIM2;
htim2.Init.Prescaler = 8399; // 设定预分频器
htim2.Init.Period = 999; // 设定周期
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
HAL_TIM_Base_Init(&htim2);
HAL_TIM_Base_Start_IT(&htim2); // 启动定时器并使能中断
}
// 定时器中断回调
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
if (htim->Instance == TIM2) {
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); // 切换LED状态
}
}
|