回复原子哥:
那出现这个问题可能是什么原因呢,为什么第一个字节会被覆盖呢,串口助手自动发送的时间间隔是10ms,每次发送10个字节,总是出现这个问题。串口发送及接受数据的程序如下:
[mw_shl_code=c,true]void Send_AT(u8 *add,u8 SAlen,u8 EN) //发送数据 SAlen是数据长度
{
u8 tSA=0;
if(EN==1)
{
for(tSA=0;tSA<SAlen;tSA++)
{
USART1->DR=add[tSA];
while((USART1->SR&0X40)==0);//等待发送结束
}
}
if(EN==2)
{
for(tSA=0;tSA<SAlen;tSA++)
{
USART2->DR=add[tSA];
while((USART2->SR&0X40)==0);//等待发送结束
}
}
if(EN==3)
{
for(tSA=0;tSA<SAlen;tSA++)
{
USART3->DR=add[tSA];
while((USART3->SR&0X40)==0);//等待发送结束
}
}
}
[/mw_shl_code]
[mw_shl_code=c,true]void USART1_IRQHandler(void)
{
u8 res;
if(USART1->SR&(1<<5))//接收到数据
{
res=USART1->DR;
if((USART1_RX_STA&0x80)==0)//接收未完成
{
if(USART1_RX_STA&0x40)//接收到了0x0d
{
if(res!=0x0a)USART1_RX_STA=0;//接收错误,重新开始
else USART1_RX_STA|=0x80; //接收完成了
}else //还没收到0X0D
{
if(res==0x0d)USART1_RX_STA|=0x40;
else
{
USART1_RX_BUF[USART1_RX_STA&0X3F]=res;
USART1_RX_STA++;
if(USART1_RX_STA>63)USART1_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
}[/mw_shl_code]
|