我正在研究目标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工作得很好。
|