void USART3_IRQHandler(void)
{
u32 Res;
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)(USART3->SR&(1<<5))
{
Res =USART_ReceiveData(USART3);//(USART3->DR); //读取接收到的数据
if((USART3_RX_STA&0x8000)==0)//接收未完成
{
if(USART3_RX_STA&0x4000)//接收到了0x0d
{
if(Res!=0x0a)
{
USART3_RX_STA&=0x3FFF; //如果没接收到0x0a,清除接收到0d标志位。继续接收数据
USART3_RX_BUF[USART3_RX_STA&0X3FFF]=Res;
USART3_RX_STA++;
}
else {USART3_RX_STA--;USART3_RX_STA|=0x8000;} //接收完成了 去掉最后的0X0A为实际数据
}
else //还没收到0X0D
{
if(Res==0x0d)
{
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;//接收数据错误,重新开始接收
}
}
}
else//接收完成了
{
if((USART3_RX_STA&0xff)<4) USART3_RX_STA=0;//如果数据小于4个 则重新接收
}
else //还没收到0X0D
{
if(Res==0x0d)
{
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;//接收数据错误,重新开始接收
}
}
}
else//接收完成了
{
if((USART3_RX_STA&0xff)<4) USART3_RX_STA=0;//如果数据小于4个 则重新接收
}
}
}
以上子函数,是串口接受数据函数,在例程里面自带的。下面是我将接收到的数据加以处理,但是为什么始终不能在液晶屏上显示。
@串口数据处理
*/
static void UART3_CHECK(void)
{
if(USART3_RX_STA&0x8000)
{
u16 len;
Fontsize_set(16);
len=USART3_RX_STA&0XFF;//这里数据长度最大128 多余的不参与计算.实际不超过50
if((USART3_RX_BUF[len-2]==0x0d)&&USART3_RX_BUF[len-1]==0x0a)//回车不参与实际数据计算
len-=2;
//Display(70,Y1+5,0,0,0,0);
if(len>255) len=0;
USART3_RX_BUF[len]='\0';//结束符
w1x=USART3_RX_BUF[0]*10000+USART3_RX_BUF[1]*1000+USART3_RX_BUF[2]*100+USART3_RX_BUF[3]*10;
dbm=1234;
Display(70,Y1+5,w1x,dbm,zhubo,pinlv);
}
}
这是为什么,各位大神麻烦指点一下