是否有可能在DMA中途完成STM32f0的中断

时间:2017-01-20 15:24:37

标签: interrupt stm32 dma

我有一个循环DMA,我想更新。当它完成一半时是否有可能获得中断(所以我可以更新前半部分)?

2 个答案:

答案 0 :(得分:3)

是的,只需在相应的通道配置寄存器中设置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);
    }
}

答案 1 :(得分:0)

没有频道,只有流。

可能会被读取

READ_BIT(DMA1->HISR ,DMA_HISR_HTIF5);

还是类似这样的东西?

DMA1_Stream5-> CRR |= DMA_HISR_HTIF5;