[STM32F1] 多路USART同时工作是不是有坑?

[复制链接]
1362|24
 楼主| 万图 发表于 2025-5-3 07:20 | 显示全部楼层 |阅读模式
两个串口一起跑的时候总有一个丢数据,是不是中断优先级冲突了?
Clyde011 发表于 2025-5-3 07:24 | 显示全部楼层
接收的时候建议每帧都校验下长度。
公羊子丹 发表于 2025-5-3 07:25 | 显示全部楼层
看中断优先级有没有冲突。
周半梅 发表于 2025-5-3 07:26 | 显示全部楼层
DMA方式能规避一点丢数据问题。
帛灿灿 发表于 2025-5-3 07:26 | 显示全部楼层
我设置两个USART的波特率差距大点就好了。
童雨竹 发表于 2025-5-3 07:27 | 显示全部楼层
F1系列USART接收挺挑配置的。
 楼主| 万图 发表于 2025-5-3 07:28 | 显示全部楼层
你有没有开接收空闲中断?
Wordsworth 发表于 2025-5-3 07:29 | 显示全部楼层
看下是不是用了同一缓冲区?
Bblythe 发表于 2025-5-3 07:30 | 显示全部楼层
主循环太忙也会丢数据。
Pulitzer 发表于 2025-5-3 07:30 | 显示全部楼层
有个库会自动把串口做缓冲处理。
Uriah 发表于 2025-5-3 07:32 | 显示全部楼层
有没有试过串口助手测试稳定性?
一秒落纱 发表于 2025-5-14 19:30 | 显示全部楼层
STM32F1NVIC中断控制器支持优先级分组,若多个USART中断优先级相同或高优先级中断频繁抢占CPU,会导致低优先级USART中断处理延迟,接收缓冲区溢出,进而丢失数据

夜阑风雨 发表于 2025-5-14 20:00 | 显示全部楼层
USART1USART2的抢占优先级相同,当两者同时触发中断时,NVIC可能随机选择一个中断处理,导致另一个中断被延迟

远山寻你 发表于 2025-5-14 21:00 | 显示全部楼层
中断服务函数耗时过长,若USART中断服务函数中存在耗时操作(如复杂计算、长时间等待),会长时间占用CPU,导致其他USART中断无法及时响应,数据丢失
光辉梦境 发表于 2025-5-14 21:30 | 显示全部楼层
STM32F1USART硬件接收缓冲区(FIFO)深度有限(通常为1字节),若数据到达速率高于CPU处理速率,且未及时读取接收寄存器,会导致数据丢失

三生万物 发表于 2025-5-14 22:00 | 显示全部楼层
未及时清除中断标志位,若在中断服务函数中未正确清除USART的接收中断标志位(如RXNE),会导致中断重复触发或无法再次触发,进而丢失数据
淡漠安然 发表于 2025-5-14 23:00 | 显示全部楼层
DMA配置不当,若使用DMA接收数据,但DMA缓冲区配置过小或未及时处理DMA完成中断,会导致数据覆盖或丢失。
暖了夏天蓝了海 发表于 2025-5-15 01:00 | 显示全部楼层
合理配置中断优先级,使用NVIC_SetPriority()函数为不同USART设置不同的抢占优先级和子优先级,确保高优先级USART中断能够及时响应。

冰春彩落下 发表于 2025-5-15 09:00 | 显示全部楼层
若通信双方支持硬件流控,可通过RTS/CTS信号控制数据流速,防止接收缓冲区溢出。

江河千里 发表于 2025-5-15 12:00 | 显示全部楼层
.合理配置中断优先级,使用NVIC_SetPriority()函数为不同USART设置不同的抢占优先级和子优先级,确保高优先级USART中断能够及时响应。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

169

主题

6161

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部