STM32H7 SPI DMA传输,始终处于繁忙传输状态,HAL_SPI_STATE_BUSY_TX

时间:2019-10-01 13:31:57

标签: c++ c embedded

我正在尝试使用DMA在SPI中传输数据,因为我的Hal状态是HAL_SPI_STATUS_BUSY_TX。所需状态为HAL_SPI_STATE_READY。我想通过SPI发送一些批量数据和命令(单字节)。是否可以分别在DMA和非DMA模式之间切换。如图中所示,它在while中循环。 enter image description here

"notes": {
  ".read": "
    auth.uid !== null //&&
  ",
  "$note_id": {
    ".write": "
      //New data
      !data.exists() && auth.uid !== null ||
      //Existing data
      data.child('access').child('author').val() === auth.uid ||
      data.child('access/members').child(auth.uid).exists()          
    ",
    "data": { .. },
    "access": {
      "author" : { .. },
      "members" : { .. }
    }
  }
}

HAL_STATUS必须为HAL_SPI_STATE_READY。

我的数据长度已加载到NDTR中。 enter image description here

启用SPI后,NDTR = 0x00

enter image description here

2 个答案:

答案 0 :(得分:0)

可能导致这种问题的一个原因是将存储要发送的数据的变量放置在错误的RAM区域中,检查您的映射文件并修改链接器脚本

您可以在这里找到更多 https://community.st.com/s/article/FAQ-DMA-is-not-working-on-STM32H7-devices

答案 1 :(得分:0)

我将TX DMA流从DAM1_Stream7更改为DMA1_Stream2,解决了。不知道根本原因为何不能在stream7上工作。