是否有可能在 DMA 中途中断 STM32f0

Is it possible to get an interrupt on DMA halfway done STM32f0

我有一个要更新的循环 DMA。有没有可能做到一半就打断(所以我可以更新前半部分)?

是的,只需在相应的通道配置寄存器中设置 HTIE 位,例如

DMA1_Channel2->CCR |= DMA_CCR_HTIE;

对于通道 2,在开始传输之前。不要忘记设置优先级,并启用中断。

在中断处理程序中,检查它是否确实是半传输中断,清除标志,然后进行任何必要的处理。

void DMA1_Channel2_3_IRQHandler(void) {
    if(DMA1->ISR & DMA_ISR_HTIF2) {
        DMA1->IFCR = DMA_IFCR_CHTIF2;
        memcpy(here, there, length/2);
    }
}

没有频道了,只有流。

可读位

READ_BIT(DMA1->HISR ,DMA_HISR_HTIF5);

或者可能是这样的?

DMA1_Stream5-> CRR |= DMA_HISR_HTIF5;