stm32串口接收、TF卡存储丢数问题
待接受的串口数据是9600波特率,一行一行的发送,最长一行不超过1024字节。 在利用stm32的串口进行数据接收,设置两个1024大小的buf,轮流接收,轮流写入TF卡, 为什么中间总会出现完整的一行无发记录下来的问题呢。
在线等,有知道原因的请帮帮忙啊。
[解决办法]
中间总会出现完整的一行无发记录下来
请确认是否是中间一行,还是第一行或者最后一行。
1. 协议是否是存硬件实现。如果是,则可能是时序出问题。
2. 如果是第一行或者最后一行,则可能是起始条件出问题或者结束条件出问题。
3. 如果中间一行出问题。可能是接收和写保存时序偏差积累造成丢包。
最好将代码仔细看看。
建议用示波器观察波形,计算时间传送速率。
[解决办法]
波特率是9600,那么算下来,每个字节数据的发送时间约为1MS,那么发送10字节本身就需要10MS时间。发送 32920字节就需要约32S了。不知道你10MS间隔是怎么算的。建议加大时间间隔再试。波特率不是就设置一下就完了,是要算时间的。
[解决办法]
在做乒乓操作时,要保护buffer不能被读,和写同时操作。如果如下描述是正确的话,应该不是读写数据速度不匹配造成的。
发送间隔时间 实际保存字节数 串口工具发送字节数
1000ms 7620Bytes 7800Bytes
我建议你程序做些调试信息:1.弄一个包的接收计数器,看包是不是都收到了,如果收包就有丢失,那肯定是会少了?2.如果包都收到了,就看你写过程是不是有判断,丢弃了一些包。假如你做了数据校验,或者写TF卡失败等。