问题描述
之前觉得串口波特率115200bps,算下来115.2kbps,一秒钟发1k个数据包很容易就实现。
但是实际应用的时候,就发现不一样了。
每个数据包格式如下:
16进制:0A 55 55 00 0D 0A 55 06 24 05 4C 05 5F 05 CE 05 0E 04 F5 00 00 02 38 16
24个字节。
通过定时器触发,每秒发送1000个数据包。
结果总是数据包不完整的,跳包的情况。
0A 55 55 00 0D 0A 55 06 24 05 4C 05 5F 05 CE 05 0E 04 F5 00 00 02 38 16
0A 55 55 00 0D 0A 55 06 2A 05 4B 05 50 05 D1 05 0C 05 01 00 00 04 46 16
0A 55 55 00 0D 0A 55 06 22 05 4D 05
0A 55 55 00 0D 0A 55 06 2E 05 46 05 54 05 D0 05 10 04 FF 00 00 08 2B 16
0A 55 55 00 0D 0A 55 06 24 05 3E 05
0A 55 55 00 0D 0A 55 06 2F 05 44 05 57 05 D0 05 0B 04 FD 00 00 0C 47 16
0A 55 55 00 0D 0A 55 06 27 05 4D 05
0A 55 55 00 0D 0A 55 06 2E 05 43 05 58 05 CA 05 0F 04 FB 00 00 10 59 16
0A 55 55 00 0D 0A 55 06 2A 05 46 05
0A 55 55 00 0D 0A 55 06 24 05 4E 05 5D 05 CE 05 13 04 F4 00 00 14 0E 16
0A 55 55 00 0D 0A 55 06 2F 05 4B 05
单个数据包发送用时计算
理论计算,
单个串口包格式为
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
1个起始位,8个数据位,1个停止位。
那么对于115200bps的波特率来说。
一个串口包的发送用时= 10 /115200 =86.80555us
一个数据包的发送用时 = 2.083 ms
那么1秒钟能发送的数据包数量就是 =1 s/ 2.083 ms =480个
后续验证
通过理论计算得出1秒钟最大发送量是480个,出于冗余考虑,
设置每秒发送400个数据包。
发送一段时间后,打开日志
总共接收了581256个数据。
按照一个字节占了3列,一个数据包24个字节。
581256 /72=8,073
查看计数器
16进制 1F 89
换算成十进制是8073,都对的上。
对于串口转网络芯片。选用的时候要考虑虽然外接网络带宽能到百兆。但限定于串口的波特率瓶颈,整体的发送速率跟着受限。
设计的时候要充分考虑。