练习
STM32中使用定时器函数控制LED灯的亮灭
/* USER CODE BEGIN 0 */
int flag_red =0;
int flag_bule =0;
int flag_yellow = 0;//标志LED灯的状态
//当时间到达就会调用到这个函数
//每隔100ms调用一次中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
//判断是否是定时器1
if(htim == &htim2)
{
//执行LED灯闪烁的代码
flag_red = !flag_red;//修改LED灯的状态,0->1,1->0
if(flag_red == 1)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
}
else if(flag_red ==0)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
}
}
else if(htim == &htim1)
{
//执行LED灯闪烁的代码
flag_bule = !flag_bule;//修改LED灯的状态,0->1,1->0
if(flag_bule == 1)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
}
else if(flag_bule ==0)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
}
}
else if(htim == &htim3)
{
//执行LED灯闪烁的代码
flag_yellow = !flag_yellow;//修改LED灯的状态,0->1,1->0
if(flag_yellow == 1)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_RESET);
}
else if(flag_yellow ==0)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_SET);
}
}
}
/* USER CODE END 0 */
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim1);//以中断的方式打开定时器1,定时器开始工作计数,当时间到达后会产生溢出事件,也就是
//会产生一个中断,在中断中去处理对应的事件
HAL_TIM_Base_Start_IT(&htim2);
HAL_TIM_Base_Start_IT(&htim3);
/* USER CODE END 2 */
演示效果
定时器让红黄蓝灯亮灭