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))
作者:别往后.