初级会员

- 积分
- 127
- 金钱
- 127
- 注册时间
- 2016-1-21
- 在线时间
- 17 小时
|
1金钱
最近在做STM32F103ZET6串口接收数据解析的实验,我用串口调试助手给串口1发送一帧数据:95272+25.71+22.9F2+27.5N3+27.5N4+28.0N5+28.0N6+29.0N7+27.5N8+29.0NF数据传输格式如下图所示:
在ZigbeeMsg_Show()函数中对数据帧进行解析并通过串口1打印到上位机观察数据,代码如下:
[mw_shl_code=c,true]//Rxdata为串口收到的字符串,传输的数据格式:95270+25.51+28.0N2+27.5N3+27.5N4+28.0N5+28.0N6+29.0N7+27.5N8+29.0NN共68个字节//Rxlen为字符串长度
void ZigbeeMsg_Show(char *Rxdata, u8 Rxlen)
{
u8 i=0,j=0;
char Carnumber[5]; //车厢编号95270
char Et_temp[5]; //环境温度+25.5
char Bear1temp[5]; //轴承1温度+28.0
char Bear2temp[5]; //轴承2温度+27.5
char Bear3temp[5]; //轴承3温度+27.5
char Bear4temp[5]; //轴承4温度+28.0
char Bear5temp[5]; //轴承5温度+28.0
char Bear6temp[5]; //轴承6温度+29.0
char Bear7temp[5]; //轴承7温度+27.5
char Bear8temp[5]; //轴承8温度+29.0
char Bearstatus[8]; //轴承状态8个字节
char Bearnumber[8]; //轴承8温度+29.0
char Carstatus ; //车厢状态
while(i<Rxlen)
{
printf("%s\r\n",Rxdata);
while(j<5)
{
Carnumber[j++] = Rxdata[i++]; //车厢编号
}
j=0;
printf("Carnumber=%s\\r\n",Carnumber);
while(j<5)
{
Et_temp[j++] = Rxdata[i++]; //环境温度
}
j=0;
Bearnumber[0] = Rxdata[i++]; //轴承1
while(j<5)
{
Bear1temp[j++] = Rxdata[i++];
}
j=0;
Bearstatus[0] = Rxdata[i++];
Bearnumber[1] = Rxdata[i++]; //轴承2
while(j<5)
{
Bear2temp[j++] = Rxdata[i++];
}
j=0;
Bearstatus[1] = Rxdata[i++];
Bearnumber[2] = Rxdata[i++]; //轴承3
while(j<5)
{
Bear3temp[j++] = Rxdata[i++];
}
j=0;
Bearstatus[2] = Rxdata[i++];
Bearnumber[3] = Rxdata[i++]; //轴承4
while(j<5)
{
Bear4temp[j++] = Rxdata[i++];
}
j=0;
Bearstatus[3] = Rxdata[i++];
Bearnumber[4] = Rxdata[i++]; //轴承5
while(j<5)
{
Bear5temp[j++] = Rxdata[i++];
}
j=0;
Bearstatus[4] = Rxdata[i++];
Bearnumber[5] = Rxdata[i++]; //轴承6
while(j<5)
{
Bear6temp[j++] = Rxdata[i++];
}
j=0;
Bearstatus[5] = Rxdata[i++];
Bearnumber[6] = Rxdata[i++]; //轴承7
while(j<5)
{
Bear7temp[j++] = Rxdata[i++];
}
j=0;
Bearstatus[6] = Rxdata[i++];
Bearnumber[7] = Rxdata[i++]; //轴承8
while(j<5)
{
Bear8temp[j++] = Rxdata[i++];
}
j=0;
Bearstatus[7] = Rxdata[i++];
delay_ms(2);
Carstatus= Rxdata[i++]; //车厢状态
}
printf("%s\r\n",Rxdata);
printf("Carnumber=%s\r\n",Carnumber);
printf("Et_temp=%s\r\n",Et_temp);
printf("Bear1temp=%s\r\n",Bear1temp);
printf("Bear2temp=%s\r\n",Bear2temp);
printf("Bear3temp=%s\r\n",Bear3temp);
printf("Bear4temp=%s\r\n",Bear4temp);
printf("Bear5temp=%s\r\n",Bear5temp);
printf("Bear6temp=%s\r\n",Bear6temp);
printf("Bear7temp=%s\r\n",Bear7temp);
printf("Bear8temp=%s\r\n",Bear8temp);
printf("Carstatus=%c\r\n",Carstatus);
}[/mw_shl_code]
在串口调试助手的现象是:
可以看见,有的数据明显出现了乱码,然后我用软件仿真了一下:
软件仿真除了Carstatus没显示外,其他数据都是正确的。
请大神们帮我分析一下,软件可以行的通但硬件上为什么出问题?我的中断程序完全照搬的串口例程,波特率设置的是115200,按理说不应该是串口波特率不匹配或中断的问题,求助!!
|
|