OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2873|回复: 9

串口三发送数据不完整

[复制链接]

17

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-17
在线时间
62 小时
发表于 2016-11-8 09:43:19 | 显示全部楼层 |阅读模式
50金钱
本帖最后由 czz88 于 2016-11-8 09:42 编辑

单片机型号是STM32F103VCT6  串口1当做打印调试信息的,串口2接SIM800C模块,串口3接Zigbee
当串口2接收到服务器远程指令会触发串口三发送一组数据给ZigBee,现在的问题是单片机串口3发送的数据偶尔会出错
图片是串口3接串口调试助手收到的数据,一行代表一组正常数据数据有时候是丢失数据前面一部分和后面一部分,有时候丢失数据后面一部分,不固定
[mw_shl_code=c,true]//发送转义函数
u8 SendChange_FFFE(u8* fmt)
{
        u8 i,j,k;
        //u8 size;               
        i=22-1;                        //包尾0xFF不需要转义
        k=1;                        //返回值,代表转义完串口发送数据的长度
        for(j=2;j<i;j++)
        {
                k++;
                if(fmt[j]>=0xFE)
                {
                        U3_SendData[k]=0xFE;
                        k++;
                        U3_SendData[k]=fmt[j]-2;
                }
                else
                {
                        U3_SendData[k]=fmt[j];
                }

        }
        U3_SendData[0]=0xFE;
        U3_SendData[1]=0x13;
        U3_SendData[k+1]=0xFF;
        return k+1;
}

void u3_Send(u8* fmt)  
{  
        u16 i,j;
        //i=size;
        i=SendChange_FFFE((u8*) fmt);
       
        for(j=0;j<=i;j++)                                                        //循环发送数据
        {
                while((USART3->SR&0X40)==0);                        //循环发送,直到发送完毕   
                USART3->DR=U3_SendData[j];  
        }
}
[/mw_shl_code]





Uart.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11537
金钱
11537
注册时间
2014-4-1
在线时间
1314 小时
发表于 2016-11-8 10:15:31 | 显示全部楼层

看不出来问题,
也许数组U3_SendData[j]内的数据不对。


回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11537
金钱
11537
注册时间
2014-4-1
在线时间
1314 小时
发表于 2016-11-8 10:17:29 | 显示全部楼层

先单独测试串口3,比如反复、循环发0~FF,
这样可以考察硬件和基本的软件语句,容易定位故障。


回复

使用道具 举报

17

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-17
在线时间
62 小时
 楼主| 发表于 2016-11-8 10:27:27 | 显示全部楼层
xuande 发表于 2016-11-8 10:17
先单独测试串口3,比如反复、循环发0~FF,
这样可以考察硬件和基本的软件语句,容易定位故障。

U3_SendData[j]我换成const的数组发送还是照样偶尔会错误,排除了U3_SendData[j]不对的问题,发送长度 i=SendChange_FFFE((u8*) fmt);我也改成固定的长度了
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11537
金钱
11537
注册时间
2014-4-1
在线时间
1314 小时
发表于 2016-11-8 10:43:16 | 显示全部楼层

for  ( j=0;   j<0x100;  j++)&#160;
&#160;&#160;&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;while  (  (  USART3-> SR  &  0X40  )  ==  0  );
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;USART3 ->  DR  =  j;&#160;
&#160;&#160;&#160;&#160;}


不要用数组,像上面这样发。

回复

使用道具 举报

17

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-17
在线时间
62 小时
 楼主| 发表于 2016-11-8 10:49:42 | 显示全部楼层
xuande 发表于 2016-11-8 10:43
for  ( j=0;   j SR  &  0X40  )  ==  0  );
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;USART3  ...

明白,回去试看看,现在在上班
我现在基本上排除了不是数组的问题,也不是转译那边的问题,接下来就用你说的方式看看是不是在发送环节出问题了
回复

使用道具 举报

4

主题

290

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1130
金钱
1130
注册时间
2015-8-4
在线时间
107 小时
发表于 2016-11-8 10:59:46 | 显示全部楼层
本帖最后由 kingnike 于 2016-11-8 13:33 编辑



建议用ST的API来发,不行也建议改成这样:while((USART3->SR&USART_SR_TC)== USART_SR_TC);方便阅读
活到老,学到老。
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11537
金钱
11537
注册时间
2014-4-1
在线时间
1314 小时
发表于 2016-11-8 11:40:53 | 显示全部楼层
kingnike 发表于 2016-11-8 10:59
while  (  (  USART3-> SR  &  0X40  )  ==  0  );
这句话其实不严谨。建议不要直接用这种数字,ST官方 ...


这语句不严谨吗?
其他标志改变,有影响?
除非0x40这个常数有错。

回复

使用道具 举报

17

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-17
在线时间
62 小时
 楼主| 发表于 2016-11-8 12:18:17 | 显示全部楼层
kingnike 发表于 2016-11-8 10:59
while  (  (  USART3-> SR  &  0X40  )  ==  0  );
这句话其实不严谨。建议不要直接用这种数字,ST官方 ...

回去改成while((USART3->SR&USART_SR_TC)== USART_SR_TC);这样试试
回复

使用道具 举报

4

主题

290

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1130
金钱
1130
注册时间
2015-8-4
在线时间
107 小时
发表于 2016-11-8 13:33:03 | 显示全部楼层
xuande 发表于 2016-11-8 11:40
这语句不严谨吗?
其他标志改变,有影响?
除非0x40这个常数有错。

抱歉,确实是我头昏了,呵呵。语义上理解没问题。我修改下回复
活到老,学到老。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 22:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表