stm32 的UART串口波特率115200bps,一秒钟能发多少个数据包,实测给出结论

问题描述

之前觉得串口波特率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个字节),1个停止位。

那么对于115200bps的波特率来说。

一个串口数据的发送用时=   10 /115200 =86.80555us

那么一个串口数据包的发送用时 =24*86.80555us= 2.083 ms

那么1秒钟能发送的串口数据包数量就是 =1 s/   2.083 ms =480个

后续验证

通过理论计算得出1秒钟最大发送量是480个,出于冗余考虑,

设置每秒发送400个串口数据包。

发送一段时间后,打开日志

总共接收了581256个数据。

按照一个字节占了3列,一个数据包有24个字节。

581256 /72=8,073 个数据包

查看计数器

16进制 0x 1F 89 

换算成十进制是8073,

数量都对的上。

综述:

对于串口数据发送,特定情况如串口转网络芯片。选型的时候要考虑虽然外接网络带宽能到百兆。但限定于串口的波特率瓶颈,整体的发送速率跟着受限。

设计的时候要充分考虑。

智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的些核心知识点解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“橙点同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值