我正在尝试让 ADC 上的多缓冲区 DMA 工作。我修改了“HAL_ADC_Start_DMA”函数以使用“HAL_DMAEx_Mul
tiBufferStart_IT”而不是“HAL_DMA_Start_IT”。
但是由于某些原因,M0 Completion Callback 在切换到 M1 缓冲区之前执行了多次。
- uint32_t bit = READ_BIT(((DMA_Stream_TypeDef *)hadc1.DMA_Handle->Instance)->CR, DMA_SxCR_CT);
- printf("BIT: %srn", bit ? "1" : "0");
我在 IRQ 处理程序中有这个(在 M0 或 M1 转换完成回调上),由于某种原因,流程如下:
位:1
位:1
位:1
位:0
位:0
位:1
位:1
位:1
位:0
位:0
位:1
位:1
位:0
如您所见,它并没有像它应该的那样切换 CT(M0 M1 M0 M1 M0 等...),但缓冲区在切换之前被多次使用。有什么想法可能会成为问题吗?
谢谢。