微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > stm32串口接收、TF卡存储丢数现象解析与总结

stm32串口接收、TF卡存储丢数现象解析与总结

时间:10-02 整理:3721RD 点击:
stm32串口接收、TF卡存储丢数现象解析与总结

问题:

?待接受的串口数据是9600波特率,一行一行的发送,最长一行不超过1024字节。 在利用stm32的串口进行数据接收,设置两个1024大小的buf,轮流接收,轮流写入TF卡, 为什么中间总会出现完整的一行无发记录下来的问题呢。
解析:
我确定是中间的数据丢失,我估计很大原因就是接收和写保护偏差问题。  刚才用串口调试攻击分别以10ms 100ms 1000ms 的速率发送一整行数据(保证有0x0D 0x0A)(一行是20字节),  结果统计的发送字节跟实际保存到文件的字节数如下:
发送间隔时间   实际保存字节数   串口工具发送字节数
1000ms            7620Bytes       7800Bytes
100ms             28240           28680
10ms             26860           32920
发现10ms的时候,里面的文件记录直接就乱了,本来应该是整齐的很多行业数据,因为中间丢包导致数据比较乱, 而且看实际保存字节数跟 串口发送字节数 差别也很明显。
串口是9600波特率的,  存储时用SDIO 往TF卡里存储的。 程序上采用双buf。  不知道问题出在什么地方, 还是本身TF卡存储就到不了接收9600波特率 10m间隔发送的这么一种速率呢。

同行的建议:
在做乒乓操作时,要保护buffer不能被读,和写同时操作。如果如下描述是正确的话,应该不是读写数据速度不匹配造成的。
发送间隔时间   实际保存字节数   串口工具发送字节数
1000ms            7620Bytes       7800Bytes
我建议你程序做些调试信息:1.弄一个包的接收计数器,看包是不是都收到了,如果收包就有丢失,那肯定是会少了?2.如果包都收到了,就看你写过程是不是有判断,丢弃了一些包。假如你做了数据校验,或者写TF卡失败等。

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top