偶用两个stm32F103c8t6单片机,用串口2通过MAX485(最大2.5Mbps)转换后,用2米长双绞线互联,单工通讯,最大波特率2.25Mbps互发数据,进行压力测试,
在满速的时候(DMA方式发送和接收),可以测得通讯数据速率正好225000字节每秒,连续8小时,没有丢一个位,这边发送字节计数和那边接收字节计数相等,不过485芯片微热,大概有60度吧。
后来改成,半双工,加上协议,两机一主一从,以16字节包长Ping和Echo(带数据校验).测得通讯速率约80K字节每秒(理论值应该为112500),
去掉485转换时间间隙和单片机协议处理开销,基本可以认为达到最高速度(包改大,速度会略微提升一些)。连续8小时,发送接受,没有丢一个包,没有一个包有校验错误。
其中主单片机串口1以3Mbps的速度通过CH340转USB连接到电脑,作为终端显示内部状态。单片机串口1支持4.5Mbps,3Mbps是CH340支持的最大速度,
但是单片机和电脑的连接出现丢字节现象,已经排除单片机软件和终端软件问题,问题应该出现在USB环节。
现象是,开始一段时间没有丢字节,但是过一段时间开始陆续丢字节,重启单片机或者重启串口终端软件没有改善,但是拔插USB转串口立刻改善。
应该是USB转串口芯片内部的缓冲区溢出了。
后来USB转串口改成1.5Mbps,效果大大改观,可以维持很长一段时间不丢字节。
所以话说回来了,你才115200bps就开始丢数据,实在是太不应该了。
对于硬件丢包率,通过这个试验说明,单片机和单片机之间,通过485转换,可以保证1/6480000000以下,(6480000000即6.48GB是8个小时发送的数据量)
即便退一步说,至少能保证1/2304000000。差不多是1E-10了.
但是电脑通过USB转换,就不敢保证了,虽然本身USB协议可以保证不丢数据,但是USB转串口的驱动程序会不会丢也不好说。
你电脑上可以通过硬串口进行数据收发,稳定性提升好几个数量级。
另外,不需要把422转换成232,实际上有直接是422的硬串口卡,比232要靠谱得多。
另外忘了说了,两个单片机之间的485连接只接了AB两条线,地线都没连,但是其中一个单片机使用电池供电的,所以干扰问题要少得多。
你实际使用的时候,肯定不可能是电池供电,所以地线很重要,一定要连,否则通讯可能不正常,甚至可能会烧掉接口。而且手册里建议用16平方的铜线作为地线。
|