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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版