程序出问题了 各位大神帮帮忙帮帮忙

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);
}
}

这是为什么,各位大神麻烦指点一下

欢迎哈哈哈3 发表于01-06 15:11 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

欢迎哈哈哈3
欢迎哈哈哈3(上士)
金币:69个|学分:312个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号