原理:在主函数中接收到数据后,延时5ms,5ms后,来处理接收到的字节,处理不定长度的字节。
串口中断函数:
void UART1_Isr() interrupt 4 // 串口中断服务函数
{
if(RI) // 如果接收到一个字节
{
RI = 0; // 中断标志位清0
Res_Buf[Res_Count++]=SBUF; // 把数据保存到接收数组
Res_Sign=1; // 表示已经接收到数据
Res_Times=0; // 延时计数器清0
}
}
在主函数中处理串口数据,这里可以定义一个函数
void receive_func()
{
if(Res_Sign==1) // 如果串口接收到数据
{
//延时等待接收完一帧数据
do{
Res_Times++; // 延时计数器+1
HAL_Delay(1); // 延时1ms
}while(Res_Times<5); // 5ms时间到
command(); 根据接收来的数据,写入你自己要处理的函数 //这里就可以处理接收数据了
Res_Sign=0; // 接收标志清0
Res_Count=0; // 接收数据字节计数器清0
}
}
程序解释
程序里面有4个全局变量,分别是: