[应用相关] STM32H743:DMA不断返回错误HAL_DMA_ERROR_DME,没有进行数据传输。

[复制链接]
1335|8
 楼主| onlycook 发表于 2021-11-9 10:13 | 显示全部楼层 |阅读模式
我正在研究目标STM32H743ZI。
我想将一个内存缓冲区复制到SAI接口(主接口)。
由于某些原因,在主调用函数HAL_SAI_Transmit_DMA时,不会发生传输。
通过更多的细节,似乎DMA提高了HAL_DMA_ERROR_DME。
这个错误似乎是特定于直接模式/外围到内存的传输的,尽管我两者都没有使用,因为DMAFIFO被启用,并且从内存到外围传输。
我想传输的数据缓冲区位于0x2400_000,所以另一个与dma相关的问题不适用于这里的(https://community.st.com/s/article/FAQ-DMA-is-not-working-on-STM32H7-devices)。
详细的DMA配置:
hdma_sai1_a.Instance                 = DMA1_Stream0;
hdma_sai1_a.Init.Request             = DMA_REQUEST_SAI1_A;
hdma_sai1_a.Init.Direction           = DMA_MEMORY_TO_PERIPH;
hdma_sai1_a.Init.PeriphInc           = DMA_PINC_DISABLE;
hdma_sai1_a.Init.MemInc              = DMA_MINC_ENABLE;
hdma_sai1_a.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
hdma_sai1_a.Init.MemDataAlignment    = DMA_MDATAALIGN_WORD;
hdma_sai1_a.Init.Mode                = DMA_CIRCULAR;
hdma_sai1_a.Init.Priority            = DMA_PRIORITY_VERY_HIGH;
hdma_sai1_a.Init.FIFOMode            = DMA_FIFOMODE_ENABLE;
hdma_sai1_a.Init.FIFOThreshold       = DMA_FIFO_THRESHOLD_FULL;
hdma_sai1_a.Init.MemBurst            = DMA_MBURST_SINGLE;
hdma_sai1_a.Init.PeriphBurst         = DMA_PBURST_SINGLE;
我尝试了各种对齐,突发配置,优先级。它不会改变任何东西。
大部分代码都是使用STM32CubeIDE自动生成的,所以这里没有多少我自己的代码在运行。
主.c样本代码:
433466189d937142b9.png
此外,我不太确定"HAL_SAI_Transmit_DMA"中的大小参数的确切值。它是用字节表示的吗?口头上


没有DMA的数据传输到SAI工作得很好。

内政奇才 发表于 2021-11-9 10:14 | 显示全部楼层
我不太确定"HAL_SAI_Transmit_DMA"中的大小参数的确切值。它是用字节表示的吗?口头上

它用传输大小的单位表示,在这种情况下是一个单词。

显示DMA1_Stream0寄存器中的值。
麻花油条 发表于 2021-11-9 10:15 | 显示全部楼层
在从CubeIDE生成的代码中,函数MX_DMA_Init()并不是所有init函数列表中第一个被调用的函数。
guanjiaer 发表于 2021-12-4 19:32 | 显示全部楼层
这个标志是什么意思呢
heimaojingzhang 发表于 2021-12-4 20:04 | 显示全部楼层
是不是外设那边有问题啊
keaibukelian 发表于 2021-12-4 20:05 | 显示全部楼层
应该在什么时候初始化呢
labasi 发表于 2021-12-4 20:05 | 显示全部楼层
手动清除也不行吗
tpgf 发表于 2021-12-4 20:08 | 显示全部楼层
这是一种什么接口啊
paotangsan 发表于 2021-12-4 20:09 | 显示全部楼层
没遇到过这个错误
您需要登录后才可以回帖 登录 | 注册

本版积分规则

497

主题

2215

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部