STM32 HAL库学习笔记:DMA中断回调详解

仅为个人学习记录勿喷 

1、SPI+DMA,SPI与DMA的联接(以spi1为例子)

在spi.c对dma和spi初始化中就将hdma_spi1_tx和hspi联系起来了。
spi.c中有“ __HAL_LINKDMA(spiHandle,hdmatx,hdma_spi1_tx);”
其中

spiHandle 为 &hspi1

hdmatx 为 SPI_HandleTypeDef中的(DMA_HandleTypeDef          *hdmatx;)

hdma_spi1_tx 为 hdma_spi1_tx

作用是另 hspi1->hdmatx = &hdma_spi1_tx

(还有一句没看懂,hdma_spi1_tx .Parent = &hspi1)

DMA回调函数定义在DMA_HandleTypeDef(hdma_spi1_tx)结构体中。

 在HAL_SPI_Transmit_DMA这类函数内部将DMA的回调函数指向了SPI的回调函数,最终在使用SPI的DMA发送时,实际的回调函数是SPI的回调函数。

/* Set the SPI TxDMA Half transfer complete callback */
  hspi->hdmatx->XferHalfCpltCallback = SPI_DMAHalfTransmitCplt;

  /* Set the SPI TxDMA transfer complete callback */
  hspi->hdmatx->XferCpltCallback = SPI_DMATransmitCplt;

  /* Set the DMA error callback */
  hspi->hdmatx->XferErrorCallback = SPI_DMAError;

  /* Set the DMA AbortCpltCallback */
  hspi->hdmatx->XferAbortCallback = NULL;

2、注册自己的回调函数

HAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (* pCallback)( DMA_HandleTypeDef * _hdma))

 

作者:别往后.

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 HAL库学习笔记:DMA中断回调详解

发表回复