打印

stm32串口接收、TF卡存储丢数问题

[复制链接]
2795|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
拿起书本|  楼主 | 2013-6-2 16:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
待接受的串口数据是9600波特率,一行一行的发送,最长一行不超过1024字节
在利用stm32的串口进行数据接收,设置两个1024大小的buf,轮流接收,轮流写入TF卡, 为什么中间总会出现完整的一行无发记录下来的问题呢?有哪位朋友知道原因啊?求教了。
沙发
hawksabre| | 2013-6-2 20:54 | 只看该作者
不是很了解   楼主   帮你顶一个  看看别人的意见   这个没帮上你的忙   对不住啊

使用特权

评论回复
板凳
tianli1980| | 2013-6-3 15:52 | 只看该作者
中间总会出现完整的一行无发记录下来
请确认是否是中间一行,还是第一行或者最后一行。
1. 协议是否是存硬件实现。如果是,则可能是时序出问题。
2. 如果是第一行或者最后一行,则可能是起始条件出问题或者结束条件出问题。
3. 如果中间一行出问题。可能是接收和写保存时序偏差积累造成丢包。
最好将代码仔细看看。
建议用示波器观察波形,计算时间传送速率

使用特权

评论回复
地板
huangfeng33| | 2013-6-10 16:37 | 只看该作者
先谢谢楼上的这位朋友,分析的很全面
我确定是中间的数据丢失,我估计很大原因就是接收和写保护偏差问题。  刚才用串口调试攻击分别以10ms 100ms 1000ms 的速率发送一整行数据(保证有0x0D 0x0A)(一行是20字节),  结果统计的发送字节跟实际保存到文件的字节数如下:

发送间隔时间   实际保存字节数   串口工具发送字节数
1000ms            7620Bytes       7800Bytes
100ms             28240           28680
10ms             26860           32920

发现10ms的时候,里面的文件记录直接就乱了,本来应该是整齐的很多行业数据,因为中间丢包导致数据比较乱, 而且看实际保存字节数跟 串口发送字节数 差别也很明显。

串口是9600波特率的,  存储时用SDIO 往TF卡里存储的。 程序上采用双buf。  不知道问题出在什么地方, 还是本身TF卡存储就到不了接收9600波特率 10m间隔发送的这么一种速率呢。

使用特权

评论回复
5
zeluo| | 2013-6-10 19:33 | 只看该作者
问题解决了  吗   楼主   楼上的回答应该很有帮助

使用特权

评论回复
6
jxmzzr| | 2013-6-11 14:49 | 只看该作者
波特率是9600,那么算下来,每个字节数据的发送时间约为1MS,那么发送10字节本身就需要10MS时间。发送 32920字节就需要约32S了。不知道你10MS间隔是怎么算的。建议加大时间间隔再试。波特率不是就设置一下就完了,是要算时间的。

使用特权

评论回复
7
boasing| | 2013-11-10 18:50 | 只看该作者
最近我也在做这个,很奇怪,接收到的串口数据老会丢一些。我接收的是GPS模块的串口数据,4800波特率,每秒发一次。猜测是每次在往写SD卡写数据时,串口数据同时也在发,所以丢了一些、、、、不知道楼主问题解决没有。。。

使用特权

评论回复
8
拿起书本|  楼主 | 2013-11-10 19:23 | 只看该作者
如果是发送一个文件,那应该是以9600波特率的速度一直发送,这时候按照sd卡写入速度,应该也是完全可以接受的吧

使用特权

评论回复
9
zcl143| | 2014-4-22 15:32 | 只看该作者

使用特权

评论回复
10
tianli1980| | 2014-4-22 16:47 | 只看该作者
1.弄一个包的接收计数器,看包是不是都收到了,如果收包就有丢失,那肯定是会少了?
2.如果包都收到了,就看你写过程是不是有判断,丢弃了一些包。假如你做了数据校验,或者写TF卡失败等

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:好好学习,天天向上!

519

主题

4194

帖子

31

粉丝