0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用CubeMx怎么配置不了UART的DMA?

茶话MCU 来源:ST MCU 信息交流 2020-07-05 10:34 次阅读

STM32用户反映,他目前使用STM32F407VE的芯片开发产品,在使用CubeMx做初始化配置时发现没法给UART5配置基于该外设事件的DMA请求。他觉得很奇怪,坚信UART5是可以申请DMA传输的,而且他还基于早期CubeMx 版本配置过、使用过。

他刚好最近对CubeMx升级到5.5.0了,怀疑是不是STM32CubeMx5.5以上版本的bug。

说到这里,可能有人还不是没完全明白具体怎么回事。我们结合他给过来得截图一起来看看。他在对uart5做配置时出现的界面是下面这样的,连那个DMA配置的菜单都没有。

基于他的反馈,我用目前最新的CubeMX版本5.6.1进行验证,同样对STM32F407VE的UART5进行配置并试着为其申请DMA传输。经过测试并没有碰到他所说的问题。

那问题出在哪儿呢?

我的测试工程只是单纯使用到UART5,并未使用其它外设及相关DMA应用。我结合他反馈过来的配置截图,隐约发现他的工程应用中并不仅仅使用一个UART5外设,还用到了其它外设。会不会是他在配置其它外设并申请DMA请求时,把UART5可以申请的DMA流占用了呢?

我们先不妨打开STM32F4系列参考手册的DMA章节,看看有关外设事件与DMA传输流的映射关系图。从手册中我们可以看到,UART5的TX/RX事件能申请DMA毫无疑问,但只能申请DMA1_S0和DMA1_S7。

然而呢,可以申请DMA1_S0和DMA1_S7的外设事件又有很多,比方TIM4_CH1和TIM4_CH3就可以分别申请DMA1_S0和DMA1_S7。如果说,在做UART5事件的DMA配置之前,若有别的外设事件已经将DMA1_S0和DMA1_S7申请走了,这时UART5就应该没得申请了。

基于上面分析,我们可以进一步验证下。

我们使用上面提到得TIM4_CH1和TIM4_CH3先将DMA1_S0和DMA1_S7申请走,再来尝试为UART5申请DMA,看看会怎么样。结果CubeMX提示该外设请求无效,不能申请DMA了。如下图所示:

提示界面跟客户反馈的不太一样,应该是CubeMx版本的差异所致。表达的基本意思还是相同的,即此时没法为UART5事件申请DMA传输。

到此,客户反馈的问题原因也基本清晰。像这种情况,由于UART5的TX/RX事件要申请的DMA流固定了,我们可以看看目前占用uart5欲申请的DMA流的外设,他们是否可以做调整去申请别的DAM流,从而避免竞争。因为有些外设事件可能申请的DMA流不只一条,当然这要结合具体的芯片。以STM32F4芯片为例,下图中的TIM1_CH1,SPI1_RX,SPI1_TX可申请的DMA传输流都不只一条。

或许有人知道,STM32家族中有些系列支持DMAMUX,如果有它做DMA配置就更方便、高效。但不管怎样,DMA请求事件肯定要远远多于具体实施传输的DMA流,所以具体应用中并不能保证有申请DMA资格的事件就一定申请得到相应的DMA传输。就像你有钱也有资格坐飞机坐高铁,但并不能保证你时刻可以买到你期望的机票或火车票而成行。

再结合到本案例,遇到两个外设事件对一个DMA传输流发生竞争不可避免的时候,若两个外设对DMA的使用在时间上可以错开的话,也还是有办法解决的。我们可以使用CubeMx分别基于两个外设的DMA请求事件生成两套配置,然后手动调整代码,需要使用哪个外设事件的DMA传输时就启用相应的DMA配置及应用函数。总之,搞清了怎么回事,结合具体应用灵活处理就好。

最后小结下。针对上面的客户问题,如果对CubeMx工具的使用不熟或者说只是机械地使用该工具做配置,心里没有些基本原理做支撑的话,遇到该问题时恐怕一时也的确难以找到方向。在此分享,权作提醒。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    446

    文章

    47705

    浏览量

    408859
  • uart
    +关注

    关注

    22

    文章

    1155

    浏览量

    99867
  • dma
    dma
    +关注

    关注

    3

    文章

    535

    浏览量

    98971

原文标题:使用CubeMx怎么配置不了UART的DMA?

文章出处:【微信号:stmcu832,微信公众号:茶话MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32F030F4上使用CubeMX配置ADC+DMA循环采集无法提取数据的原因?

    如题,使用STM32CubeMX配置了F030的ADC+DMA循环采集,ADC启动后OVR一直处于置为状态,但是DR寄存器输出的数据又是正常的,我使用std库已经配置并实现了功能,使用
    发表于 04-16 08:20

    STM32CubeMX配置STM32L4R9ZI的硬件SDMMC缺少DMA Settings配置是怎么回事?

    STM32CubeMX配置STM32L4R9ZI的硬件SDMMC1,缺少DMA Settings配置
    发表于 04-08 07:25

    使用CubeMX生成STM32F103C8T6的DMA ADC代码为什么无效?

    请问各位,我使用CubeMX生成STM32F103C8T6的DMA ADC代码,工程配置请看附件,我运行如下代码为什么无效: /* USER CODE BEGIN Includes
    发表于 03-29 06:08

    使用CubeMX配置STM32F407VGT6的SPI DMA发送16位数据,时钟有波形的原因?

    使用CubeMX配置STM32F407VGT6的SPI DMA发送16位数据,时钟有波形,MOSI无数据,上电就是高电平,其他CLK有波形的时候也还是高电平,发送的数据是0x0001和0x0000
    发表于 03-28 07:40

    关于STM32L051C8T6芯片LPUART+DMA接收问题求解

    ,其中UART2的接收是能够回显的。但是LPUART就无法做到回显。两者之间除了中断优先级之外其他基本都一样。我也查阅了文档,看是否是STM32CUBEMX生成程序配置错误的原因,结果也不是。 是LPUART不支持
    发表于 03-28 07:05

    STM32F103使用cubemx配置ADC和DMA导致delay函数无法使用怎么解决?

    CUBEMX配置完adc和dma后在主函数中调用函数HAL_ADC_Start_DMA( hadc1,(uint32_t *) DMA_v
    发表于 03-28 06:21

    STM32U575VGT6 standard request mode配置之后用不了是怎么回事?

    这个standard request mode 配置了之后用不了,会有hard fault error define printf_dma(...)HAL_UART_Transmit_DMA
    发表于 03-12 06:19

    STM32F405 uart DMA收发数据输出乱码怎么解决?

    利用dma+ldle接收数据,使用STM32cubemx生成driver,使用hal库发现仅能接收一次数据,然后串口busy无法再次触发中断,然后使用标准库编写测试代码,数据接收问题解决,数据输出
    发表于 03-08 07:38

    AT32 MCU DMA通道的灵活配置

    AT32 MCU DMA通道的灵活配置
    的头像 发表于 10-26 17:51 436次阅读
    AT32 MCU <b class='flag-5'>DMA</b>通道的灵活<b class='flag-5'>配置</b>

    如何在CubeMx配置界面将DMA中断的默认使能关闭

    能不能在CubeMx配置界面将DMA中断的默认使能关闭? 这里再顺便分享一个跟CubeMx配置有关的话题。目前来看,我相信对不少人还是有帮助
    的头像 发表于 09-09 16:01 978次阅读
    如何在<b class='flag-5'>CubeMx</b><b class='flag-5'>配置</b>界面将<b class='flag-5'>DMA</b>中断的默认使能关闭

    STM32U5 ADC+DMA配置演示

    随意选择ADC1的4个通道,扫描模式,连续转换,DMA传输转换结果并令DMA工作在外设字到内存字的循环传输模式。使用CubeMx进行配置。其中DMA
    的头像 发表于 07-29 16:19 839次阅读
    STM32U5 ADC+<b class='flag-5'>DMA</b><b class='flag-5'>配置</b>演示

    STM32 UART配置中断DMA传输

    在处理UART数据的时候,DMA是一种非常灵活、高效的方式。
    的头像 发表于 07-24 14:32 1168次阅读
    STM32 <b class='flag-5'>UART</b><b class='flag-5'>配置</b>中断<b class='flag-5'>DMA</b>传输

    HAL库UARTcubemx中的配置

    串口1咱们已经用作rtt的print使用了,所以使用另外一组串口来进行串口的教程,这里一定要注意下,alios的这个板子原理图是有点问题的,标注的是串口3PA2和PA3,实际上小飞哥调了好久,最后万用表量引脚才发现是原理图标注错误,实际上是UART4,PA0和PA1
    的头像 发表于 07-05 09:47 492次阅读
    HAL库<b class='flag-5'>UART</b>在<b class='flag-5'>cubemx</b>中的<b class='flag-5'>配置</b>

    CubeMX配置stm32的DAC

    我们使用 STM32CubeMX 软件进行配置。DAC 的配置是相对很简单的,如下图所示。
    的头像 发表于 06-12 09:18 1925次阅读
    <b class='flag-5'>CubeMX</b><b class='flag-5'>配置</b>stm32的DAC

    基于STM32CubeMX的HAL库的DMA的多路ADC采集

    1.选芯片打开cubemx,选择单片机型号(实际可随自己的板子型号来)。2.配置好相关RCC的HSE为外部晶振和sys的Debug模式其中sys的debug模式,我这里用的是DAP下载器,所以如下
    的头像 发表于 05-16 09:44 2038次阅读
    基于STM32<b class='flag-5'>CubeMX</b>的HAL库的<b class='flag-5'>DMA</b>的多路ADC采集