VDVA 发表于 2024-3-7 14:18:00

尝试写RTX5 消息队列+ UART1 DMA 双缓存 超时中断,遇到问题

按照,【小经验】STM32H743/750系统中使用串口DMA和超时中断接收任意长度数据
https://www.armbbs.cn/forum.php?mod=viewthread&tid=97172&fromuid=24469
(出处: 硬汉嵌入式论坛)
这个作者的思维,我编写了一个RTX5 消息队列+ UART1 DMA 双缓存 超时中断,接收不定长的程序,由于只是实验没有开MPU,D - Cache
但是发现会有丢帧的情况,还请大家指正问题,实验性质,

eric2013 发表于 2024-3-8 00:30:46

HAL库专门封装了一个不定长超时接收API,使用比较简单,此贴这个例子就是这种用法。

STM32H7基于STM32CubeMX的串口DMA+空闲中断接收不定长数据实现(HAL库1.9.0自带函数实现)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=108553&fromuid=58
(出处: 硬汉嵌入式论坛)

VDVA 发表于 2024-3-8 09:01:49

eric2013 发表于 2024-3-8 00:30
HAL库专门封装了一个不定长超时接收API,使用比较简单,此贴这个例子就是这种用法。

STM32H7基于STM32Cu ...

我看过了,这个也试过,挺好的,但是想有个新的尝试,就是学习吗,DMA 双缓冲区 加超时中断,然后数据来了,发到RTX 的消息队列中到任务中处理,这样的玩法想试一试,但是不成功

turnip 发表于 2024-3-8 09:08:50

VDVA 发表于 2024-3-8 09:01
我看过了,这个也试过,挺好的,但是想有个新的尝试,就是学习吗,DMA 双缓冲区 加超时中断,然后数据来了,发到 ...

如果在中断中发送消息队列,RTX5是复制消息的,需要时间。此时DMA应该是不工作的,也就是接收在等待吧,会不会丢帧?

eric2013 发表于 2024-3-9 00:44:50

看了下楼主的程序,主要是两点
1、已经开了DMA发送和接收,而程序里面发送还调用的查询方式API,不太好HAL_UART_Transmit
2、别用消息队列,消息队列是数据的复制粘贴,你的传输数据多了,非常影响速度,仅需发送事件标志,通知那个缓冲收到数据了即可。

VDVA 发表于 2024-3-11 10:23:16

eric2013 发表于 2024-3-9 00:44
看了下楼主的程序,主要是两点
1、已经开了DMA发送和接收,而程序里面发送还调用的查询方式API,不太好HAL ...

嗯,我也解决问题了,抽时间写一个RTX5 + UART_RX + DMA 双缓冲 + 信号量 传递消息 +UART_TX DMA 传递消息的例程,发表,供大家一起学习讨论,谢谢硬汉哥

旮旯旭 发表于 2024-3-12 17:37:23

VDVA 发表于 2024-3-11 10:23
嗯,我也解决问题了,抽时间写一个RTX5 + UART_RX + DMA 双缓冲 + 信号量 传递消息 +UART_TX DMA 传递消 ...

一般应用波特率115200最高了,缓冲区1K,我做项目就是DMA空闲中断+消息队列方式,不存在丢失的情况
页: [1]
查看完整版本: 尝试写RTX5 消息队列+ UART1 DMA 双缓存 超时中断,遇到问题