今天调程序,需要用串口连续传输大量数据。设置波特率921600,模式8N1,数据发生部分丢失,遂查找原因。
一开始认为是单片机的程序bug,因为我是使用环形缓冲+DMA方式完成的串口通信。
后来发现不是这么回事:如果使用CH340这个USB转串口模块,就没有丢失数据的问题
PC端上位机是自己写的,开发环境Qt,串口接收缓冲已经设置为无穷大。
故推断数据丢失在蓝牙传输到PC的过程中。
随后我发现,只要在发送数据的过程中插入延时,就不会导致数据的丢失。试验过程如下:
通过插入延时的方法,可以得知不丢失速率的最小延时数值。为了省时间我只测试了2600字符+10ms和15ms两种情况,没有做更多测试。
2600字符用921600波特率传输需要时间=22.6ms
加上延时15ms,可知平均波特率=553.2kbps
这就是蓝牙2.0无线串口模组BMX-03的最大传输速率