/**********************************************
功能说明: 定时器中断回调函数
入口参数:
返回参数:
***********************************************/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
//我的定时器设置是5ms进一次中断
if(htim == (&htim2))
{
//led定时闪烁5*100=500ms
led_status.led_countdown--;
if(led_status.led_countdown<=0)
{
led_status.led_countdown=LED_COUNTDOWN;
led_status.led_flag=~led_status.led_flag;//标志位取反
if(!led_status.led_flag){LED1_ON();}
else{LED1_OFF();}
}
}
}
led头文件中定义如下
#define LED1_ON() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);
#define LED1_OFF() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);
#define LED_COUNTDOWN 100
typedef struct
{
int led_init_flag;
int led_flag;
int led_countdown;
}LED_STATUS;
extern LED_STATUS led_status;//{0,0,LED_COUNTDOWN}
相比于在主函数中用delay函数,定时器这种方法不会造成主函数阻塞
注意:这个程序的逻辑是上电后500ms之后才会第一次亮灯,如果要求一上电led就亮的话就要在主函数初始化一下led_on,然后17行的判断条件要取反一下