初级会员

- 积分
- 107
- 金钱
- 107
- 注册时间
- 2019-4-7
- 在线时间
- 27 小时
|
5金钱
如题,我使用32单片机的串口3,外接了一个无线串口模块,用于接收外部数据并储存到BeaconData, 但是每次上电后第一组数据可以正常接收并更新,但之后的数据需要隔十几分钟才能更新,中间会丢失很多组数据。发送是正常的。
如图,左图是我将无线串口模块插在USB-TTL上直接连接电脑显示的数据,右图是通过无线串口模块接收数据并通过蓝牙传递给电脑显示的数据。希望路过大神看一下。
我的串口3中断服务函数代码如下:
void USART3_IRQHandler(void) //串口3中断服务程序
{
u8 i;
u8 Res;
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
Res =USART_ReceiveData(USART3);//(USART3->DR); //读取接收到的数据
if((USART3_RX_STA&0x8000)==0)//接收未完成
{
if(USART3_RX_STA&0x4000)//接收到了0x0d
{
if(Res!=0x0a) USART3_RX_STA=0;//接收错误,重新开始
else USART3_RX_STA|=0x8000; //接收完成了
}
else //还没收到0X0D
{
if(Res==0x0d) USART3_RX_STA|=0x4000;
else
{
USART3_RX_BUF[USART3_RX_STA&0X3FFF]=Res ;
USART3_RX_STA++;
if(USART3_RX_STA>(USART3_MAX_RECV_LEN-1)) USART3_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
if(USART3_RX_BUF[2]=='1')
{
for(i=0;i<36;i++)
{
Beacon1Data[i+1]=USART3_RX_BUF;
}
}
if(USART3_RX_BUF[2]=='2')
{
for(i=0;i<36;i++)
{
Beacon2Data[i+1]=USART3_RX_BUF;
}
}
}
|
|