打印
[STM32F4]

UART 如何在确保接收工同时进行大数据的连续传输?

[复制链接]
92|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
SocialButterfly|  楼主 | 2025-3-31 08:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有一个 uart的 应用需要连续发送大量数据。但是这个uart还需要接受配置信息。

实际测试中,将接收用中断实现,在接受数据时,发送数据有丢包现象。

该如何优化串口收发呢?


使用特权

评论回复
沙发
jobszheng| | 2025-3-31 09:51 | 只看该作者
串口是全双工的通讯外设接口,感觉上应该不会产生这个问题。
会不会是对端无法实现全双工,才导致的看上去“异常”了

使用特权

评论回复
板凳
dukedz| | 2025-3-31 15:54 | 只看该作者
本帖最后由 dukedz 于 2025-3-31 15:57 编辑

要定义一个数据帧(包),譬如 cdbus 格式
然后以数据帧(包)为单位进行收发
你收发是半双工还是全双工?
全双工的话,正确配置的情况下发送不会影响接收

譬如接收使用环形缓冲,不需要中断参与

如果接收需要中断参与,那么其它中断(譬如串口发送完成中断)可能会让串口接收的中断不能第一时间处理接收事务,导致丢数据

使用特权

评论回复
地板
公羊子丹| | 2025-4-2 07:44 | 只看该作者
发送和接收同时进行,建议使用 DMA,让 UART 发送和接收都走 DMA,减少 CPU 负担。

使用特权

评论回复
5
周半梅| | 2025-4-2 07:45 | 只看该作者
你的接收是用中断的,那接收中断的处理函数里会不会占用太多时间,导致发送中断被影响?

使用特权

评论回复
6
帛灿灿| | 2025-4-2 07:46 | 只看该作者
试试用 FIFO(环形缓冲区) 处理 UART 接收,避免中断处理时间过长影响发送。

使用特权

评论回复
7
童雨竹| | 2025-4-2 07:47 | 只看该作者
串口发送时可能会被接收中断打断,试试把 发送放到一个独立的 FreeRTOS 任务 里,降低竞争影响。

使用特权

评论回复
8
万图| | 2025-4-2 07:48 | 只看该作者
你的波特率是多少?如果太低,可能发送数据还没发完,新的数据就过来了,导致丢包。

使用特权

评论回复
9
Wordsworth| | 2025-4-2 07:49 | 只看该作者
STM32F4 的 UART 支持 双缓冲模式 DMA,你可以用 DMA 在后台自动收发,减少 CPU 介入。

使用特权

评论回复
10
Bblythe| | 2025-4-2 07:50 | 只看该作者
你有尝试过 流控(RTS/CTS) 吗?硬件流控可以确保发送端不会超出接收端的处理能力。

使用特权

评论回复
11
Pulitzer| | 2025-4-2 07:51 | 只看该作者
发送数据时,可以 分块发送,先确认上一块数据传输完成后再继续,避免数据堆积导致丢包。

使用特权

评论回复
12
Uriah| | 2025-4-2 07:52 | 只看该作者
在发送数据时,试试看先 提高 UART 优先级,让发送中断比接收中断更优先执行。

使用特权

评论回复
13
Clyde011| | 2025-4-2 07:53 | 只看该作者
你是在裸机环境下实现的吗?如果用了 FreeRTOS,考虑用 消息队列或信号量 控制发送逻辑,避免任务之间冲突。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

7

帖子

0

粉丝