初级会员

- 积分
- 69
- 金钱
- 69
- 注册时间
- 2022-3-8
- 在线时间
- 24 小时
|
5金钱
本帖最后由 黄冠联 于 2022-8-3 15:47 编辑
//接收状态
//bit15, 接收完成标志
//bit14, 接收到O标志
//bit13~0, 接收到的有效字节数目
u16 USART3_RX_STA=0; //接收状态标记
u8 USART3_RX_BUF[USART3_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.
void USART3_IRQHandler(void)
{
u8 res;
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
OSIntEnter();
#endif
if(USART3->SR&(1<<5)) //接收到数据
{
res=USART3->DR;
if((USART3_RX_STA&0x8000)==0)//接收未完成
{
if(USART3_RX_STA&0x4000)//接收到了O标志
{
if(res!=0x4B)//接收到K
USART3_RX_STA&=0X0FFF;//清除O的标志
else
{
USART3_RX_STA|=0x8000; //接收完成了
USART3_RX_BUF[USART3_RX_STA&0X3FFF]=res;
USART3_RX_STA++;
}
}else //还没收到OK
{
if(res==0x4F)//接收到O
{
USART3_RX_STA|=0x4000;
USART3_RX_BUF[USART3_RX_STA&0X3FFF]=res;
USART3_RX_STA++;
}
else
{
USART3_RX_BUF[USART3_RX_STA&0X3FFF]=res;
USART3_RX_STA++;
if(USART3_RX_STA>(USART3_REC_LEN-1))USART3_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
OSIntExit();
#endif
}
-----------------------------------------------------------------------------------------
我的串口接收是如下,直接给我丢失数据了,少了个D,无论我怎么搞都会丢一个字母,这怎么弄啊
AT+CWMOE=2
OK
|
|