HAL-UART中断回调函数:
![](https://img-blog.csdnimg.cn/img_convert/a424bb2707bfd9980a6357aaf07e090c.png)
重写该回调函数:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef * huart)
{
printf("IRQ:UART1\n");
printf("recv:%s\n\n",pData);
#if 1
//to identify commands
//ALL LED ON/OFF
if(strncmp(pData,"ALL__ON",7)==0)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
}
else if(strncmp(pData,"ALL_OFF",7)==0)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
}
//LED2 ON/OFF
else if(strncmp(pData,"LED_2ON",7)==0)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_RESET);
}
else if(strncmp(pData,"LED2OFF",7)==0)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_SET);
}
//LED3 ON/OFF
else if(strncmp(pData,"LED_3ON",7)==0)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
}
else if(strncmp(pData,"LED3OFF",7)==0)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
}
//LED4 ON/OFF
else if(strncmp(pData,"LED_4ON",7)==0)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
}
else if(strncmp(pData,"LED4OFF",7)==0)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
}
#endif
}
主函数启用UART的中断接收即可。
![](https://img-blog.csdnimg.cn/img_convert/8af55b8b3a53c202367a1bd2f5de5321.png)
随后启动串口助手,输入指定指令即可实现LED灯的控制。
![](https://img-blog.csdnimg.cn/img_convert/6fad74110f5a29b39a2a1ae2646f0b0f.png)