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工具的使用不熟或者说只是机械地使用该工具做配置,心里没有些基本原理做支撑的话,遇到该问题时恐怕一时也的确难以找到方向。在此分享,权作提醒。

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

    关注

    460

    文章

    52736

    浏览量

    444169
  • uart
    +关注

    关注

    22

    文章

    1278

    浏览量

    104394
  • dma
    dma
    +关注

    关注

    3

    文章

    576

    浏览量

    103677

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    XMC7100 F100K4160AA Uart2 dma实例程序无法运行,使用hal驱动发送丢字符并且无法接收怎么解决?

    问题1:修改SCB UART DMA Echo实例程序引脚和dma通道配置正常运行后,无法按照实例设计功能接收和显示。 问题2:使用hal驱动方式,能正常发送数据,但经常丢字符,添加
    发表于 08-13 06:23

    无法配置 ADC1 来触发 DMA 传输,怎么解决?

    您好,我无法配置 ADC1 来触发 DMA 传输,以便将 ADC 结果复制到缓冲区中并避免使用 ADC1 中断。 根据用户手册,我发现应该使用 DMAP_ADC 来设置 DMA 的触发源。 我设置
    发表于 07-21 06:57

    使用CubeMX配置STM32H7R7L8的时候出现无配置问题,怎么解决?

    使用CubeMX配置STM32H7R7L8的时候出现无配置问题,但是根据正点原子提供的例程中的.ioc文件中又是可以正常配置的。
    发表于 06-23 07:40

    STM32H7CubeMX配置硬件I2C,读写失败是什么问题呀?

    STM32H7CubeMX配置硬件I2C,读写失败什么问题呀,同样的操作F4和F1都能正常使用,应该不存在i2c地址错误,操作都是一样的,但H7就是用不了。I2C_WaitOnFlagUntilTimeout返回HAL_ERRO
    发表于 06-12 06:21

    stm32f407无法配置定时器2为全部dma怎么解决?

    断的情况,少链接其中一个通道,就不会出现这种情况,麻烦各位老师帮忙分析一下,给点思路,非常感谢。。(ps:CubeMX下是无法配置定时器2的4个通道为dma模式)[/td] 以下内容为评论 [td]看了一下
    发表于 06-11 06:49

    如何才能拿到UART通过DMA收取回来的数据呢?

    你好,我想询问一下UART使用DMA时收取数据的代码。之前我是用的是非DMA模式,使用的函数是CyU3PUartReceiveBytes,但是其处理速度不符合我的要求。因此我使用DMA
    发表于 05-22 08:31

    使用Cubemx配置STM32H750VBT6的freertos连最基本的keil编译都过不了,为什么?

    我使用Cubemx配置STM32H750VBT6的freertos连最基本的keil编译都过不了,请问这是为什么啊?cubemx是最新版,keil使用v5v6编译器都不行,显示floa
    发表于 03-10 07:25

    使用STM32H743对外部一个ADC芯片做数据采集,根据CubeMX配置的驱动无法触发SPI,怎么解决?

    最近使用STM32H743对外部一个ADC芯片做数据采集,想通过外部中断信号触发SPI DMA读取数据(每次3byte),但根据CubeMX配置的驱动无法触发SPI(无CLK时钟信号发出)。 工程也
    发表于 03-07 07:40

    STM32CubeMX用于STM32配置和初始化C代码生成

    电子发烧友网站提供《STM32CubeMX用于STM32配置和初始化C代码生成.pdf》资料免费下载
    发表于 02-26 17:32 ?677次下载

    STM32H743 UART DMA接收不到数据,为什么?

    #define BSP_USING_UART #define BSP_USING_UART3 #define BSP_UART3_RX_USING_DMA #define
    发表于 02-19 06:14

    在rtt studio使用qspi dma就是进不了中断,为什么?

    的while循环语句中死等: 后来我在cubeMx如下配置dma: 然后用cubeMx生成mdk工程,在main()函数调用以下库函数,能读取w25q64的id, 证明其实
    发表于 09-27 07:03

    STM32CUBEMX(6)--移植雅特力AT32F403AVGT7,双串口通过DMA方式接收不定长数据

    概述 本篇文章主要介绍如何使用STM32CubeMX移植到雅特力AT32F403AVGT7,并通过双串口输出打印。 直接存储器访问(DMA)用于在外设与存储器之间以及存储器与存储器之间提供高速
    发表于 09-06 16:37

    MSPM0 UART通信中DMA和Ring Buffer环形缓冲的应用

    电子发烧友网站提供《MSPM0 UART通信中DMA和Ring Buffer环形缓冲的应用.pdf》资料免费下载
    发表于 09-05 11:01 ?0次下载
    MSPM0 <b class='flag-5'>UART</b>通信中<b class='flag-5'>DMA</b>和Ring Buffer环形缓冲的应用

    STM32CUBEMX(3)--ADC通过DMA方式采样,USART打印

    的优先级。 本篇文章主要介绍如何使用STM32CubeMX实现ADC在DMA下快速采集,并且打印出去。 QQ群:615061293。 非DMA接收请查看: https://blog.csdn.net
    发表于 09-04 14:08

    STM32CUBEMX(2)--USART通过DMA方式接收不定长数据

    。 本篇文章主要介绍如何使用STM32CubeMX实现串口DMA读取,并且打印出去。QQ群:615061293。 硬件准备 首先需要准备一个开发板,这里我准备的是NUCLEO-F030R8的开发板
    发表于 09-04 11:48