你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G071串口1无法使用DMA收发,串口2可以

[复制链接]
真情永存 提问时间:2021-11-6 11:47 / 已解决

首先说一下过程,之前在F1,F0上使用DMA串口发送和接收数据,开启空闲中断接收不定长数据,都没有任何问题。后来用上了G030,使用串口1做的DMA收发,同样也没有问题。后来有一个项目,因为需要单片机有UID(G030没有UID),所以更换单片机为G071CB,使用CUBEMX做配置,串口1和串口2都使用DMA收发数据,结果串口2的收发没有任何问题,串口1发不出去数据,也接收不了数据,但是更改函数HAL_UART_Transmit_DMA(&huart1,aTx1Buffer,4);为HAL_UART_Transmit_IT(&huart1,aTx1Buffer,4);就可以正常收发,即串口1用DMA 无法收发,用中断方式可以收发,使用官方dome程序也无法收发,折腾了几天,无解,最后改成了中断收发了。

收藏 评论4 发布时间:2021-11-6 11:47

举报

4个回答
butterflyspring 最优答案 回答时间:2021-11-8 11:38:57
楼主看代码中的MX_DMA_Init();这个函数位置,有没有将它放在前,在串口初始化前面。没有的话可以试一下看看。
xmshao 回答时间:2021-11-8 11:38:32
刚好我最近使用STM32G031 测试过,使用DMA进行UART收发没有问题。倒是有个地方提醒下,如果基于Cubemx生成地初始化代码,当开启IDLE中断时,
关于IDLE中断的处理不要完全使用它的处理代码,它没有考虑到不定长接收,这个地方应说有bug,需要自行处理下。
真情永存 回答时间:2021-11-17 16:18:37

butterflyspring 发表于 2021-11-8 11:38
楼主看代码中的MX_DMA_Init();这个函数位置,有没有将它放在前,在串口初始化前面。没有的话可以试一下看看 ...

查看了一下cubemx自动生成的代码,串口1的初始化在DMA初始化之前,串口2的初始化在DMA初始化之后。不知道如何调整cubemx生成初始化代码的顺序。但感觉很有可能是这个问题,导致DMA配置失败。

xmshao 回答时间:2021-11-18 16:47:55

真情永存 发表于 2021-11-17 16:18
查看了一下cubemx自动生成的代码,串口1的初始化在DMA初始化之前,串口2的初始化在DMA初始化之后。不 ...

[md]这个顺序会影响的。

偶尔会有人反馈这个问题。

这里有个相关话题专门介绍。一个跟初始化顺序有关的异常话题 (qq.com)

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版