先贴代码[mw_shl_code=c,true]u16 USART_RX_STA=0; //接收状态标记bit15:接收到0xf0标志 bit14:接收到0xe0标志
u8 receive_conter=0;//数值为0xf0 0xe0后面要接收的字节数
void USART1_IRQHandler(void) //串口1中断服务程序
{
u8 Res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0xf0 0xe0开头)
{
Res =USART_ReceiveData(USART1); //读取接收到的数据
if(Res==0xf0) USART_RX_STA|=0x8000; //接收到了0xf0
else {
if((USART_RX_STA&0x8000)==1)
{
if(Res==0xe0) USART_RX_STA|=0x4000; //接收到了0xe0
else USART_RX_STA=0; //第二个数据不是0xe0
}
}
if((USART_RX_STA&0xc000)==1) receive_conter=2; //如果接收到了0Xf0+0Xe0,则标记要接收两个字节数据
else receive_conter=0;
if(receive_conter>0)
{
USART_RX_BUF[receive_conter-1]=Res; //第一个有效数据放入USART_RX_BUF[0],第二个有效数据放入USART_RX_BUF[1]
receive_conter--;
}
}
}
[/mw_shl_code]
小弟想弄一个自定义的帧头(0xf0 0xe0开头)后面接收两个字节的有效数据,中断代码事根据原子的USART1中断服务函数改的。
实验现象:能接受到0xf0,但接收不到0xe0,代码检查了好多次,还是发现不了问题。望大佬们指教一二!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
应该改为
if(USART_RX_STA&0x8000)
一周热门 更多>