STM32 HAL库使用定时器中断实现LED闪烁

/**********************************************
功能说明: 定时器中断回调函数
入口参数: 
返回参数: 
***********************************************/
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行的判断条件要取反一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值