Check the DMA callback IDs:
typedef enum
{
HAL_DMA_XFER_CPLT_CB_ID = 0x00U, /*!< Full transfer */
HAL_DMA_XFER_HALFCPLT_CB_ID = 0x01U, /*!< Half Transfer */
HAL_DMA_XFER_M1CPLT_CB_ID = 0x02U, /*!< M1 Full Transfer */
HAL_DMA_XFER_M1HALFCPLT_CB_ID = 0x03U, /*!< M1 Half Transfer */
HAL_DMA_XFER_ERROR_CB_ID = 0x04U, /*!< Error */
HAL_DMA_XFER_ABORT_CB_ID = 0x05U, /*!< Abort */
HAL_DMA_XFER_ALL_CB_ID = 0x06U /*!< All */
}HAL_DMA_CallbackIDTypeDef;
Given this:
DMA_HandleTypeDef dma1;
void myDMAcallback(DMA_HandleTypeDef* dma){
asm("nop"); // Whatever
}
Then register the callback:
HAL_DMA_RegisterCallback(&dma1, HAL_DMA_XFER_CPLT_CB_ID, myDMAcallback); // Register DMA transfer complete callback
That just does this:
dma1.XferCpltCallback = myDMAcallback;
It won't enable the DMA interrupt or anything else.
Check __HAL_DMA_ENABLE_IT
__HAL_DMA_ENABLE_IT(&dma1, DMA_IT_TC); // Enable Transfer complete interrupt.
And of course you need the DMA init code in first place.