打印
[应用相关]

STM32H743:DMA不断返回错误HAL_DMA_ERROR_DME,没有进行数据传输。

[复制链接]
1024|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我正在研究目标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样本代码:

此外,我不太确定"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 | 只看该作者
这个标志是什么意思呢

使用特权

评论回复
5
heimaojingzhang| | 2021-12-4 20:04 | 只看该作者
是不是外设那边有问题啊

使用特权

评论回复
6
keaibukelian| | 2021-12-4 20:05 | 只看该作者
应该在什么时候初始化呢

使用特权

评论回复
7
labasi| | 2021-12-4 20:05 | 只看该作者
手动清除也不行吗

使用特权

评论回复
8
tpgf| | 2021-12-4 20:08 | 只看该作者
这是一种什么接口啊

使用特权

评论回复
9
paotangsan| | 2021-12-4 20:09 | 只看该作者
没遇到过这个错误

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

438

主题

1657

帖子

3

粉丝