请教关于 HAL库 多串口 DMA接收 的问题

2019-07-20 10:51发布

我参考了网上的UART+IDLE+DMA的例程,使用串口空闲中断实现DMA接收。

串口1单独DMA接收可以实现,串口2单独DMA接收也可以。但是两个串口一起开启DMA接收就会出现:


串口1接收正常,串口2开始接收,串口2无数据,串口1在正常数据后面出现乱码部分。


我猜测:是两路公用一个缓冲区是否需要清缓冲区?还是同一时间只能一个DMA通道可以运行呢?


如何协调才能使多串口DMA接收成功(不需要发送)呢?请各位大神指点一二。(我是用的是STM32F429的板子用的是HAL库)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
Sun_Fly
1楼-- · 2019-07-21 09:56
talenthn 发表于 2017-10-23 14:59
串口1是DMA2_Stream2_CHANNEL_4,串口6是DMA2_Stream2_CHANNEL_5,好像没问题

慢慢找原因
l6931639
2楼-- · 2019-07-21 13:20
为什么要共用一个缓冲?如果是分割组合也应该分区处理吧?
talenthn
3楼-- · 2019-07-21 17:36
 精彩回答 2  元偷偷看……
l6931639
4楼-- · 2019-07-21 19:07
hal的回调函数都是集成处理的,你要用if来区分是哪个串口发生的中断。如果熟练,用寄存器大法好很多。
talenthn
5楼-- · 2019-07-21 21:22
l6931639 发表于 2017-10-24 16:04
hal的回调函数都是集成处理的,你要用if来区分是哪个串口发生的中断。如果熟练,用寄存器大法好很多。

哦哦哦,感谢感谢,我看一下
talenthn
6楼-- · 2019-07-22 03:10
 精彩回答 2  元偷偷看……

一周热门 更多>