我正在使用stm32f3发现板和来自CubeMX的HAL。我想在ADC4上使用2个ADC通道。我以循环模式配置DMA。 Befor在主主循环,我称之为:使stm32 ADC DMA工作缺少什么? Transfer Compete不会发生
HAL_ADC_Start_DMA(&hadc4, DMA_adc4_buffer, 16);
我实现的功能HAL_ADC_ConvHalfCpltCallback
和HAL_ADC_ConvCpltCallback
。现在奇怪的部分:HAL_ADC_ConvHalfCpltCallback
被定期调用,HAL_ADC_ConvCpltCallback
不是。
它告诉我,具有DMA传输的ADC运行良好。但为什么传输不会调用回调? 如果我用HAL_ADC_Start_IT
启动ADC,则会调用中断函数,但那不是我想要的。
在ST HAL中放置断点HAL_DMA_IRQHandler
还显示,回调永远不会被调用。
对于ADC4_Init功能的完整性这里部分:
/**Common config
*/
hadc4.Instance = ADC4;
hadc4.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
hadc4.Init.Resolution = ADC_RESOLUTION_12B;
hadc4.Init.ScanConvMode = ADC_SCAN_ENABLE;
hadc4.Init.ContinuousConvMode = ENABLE;
hadc4.Init.DiscontinuousConvMode = DISABLE;
hadc4.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc4.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc4.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc4.Init.NbrOfConversion = 2;
hadc4.Init.DMAContinuousRequests = ENABLE;
hadc4.Init.EOCSelection = ADC_EOC_SEQ_CONV;
hadc4.Init.LowPowerAutoWait = DISABLE;
hadc4.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
感谢您的想法。
没有通道配置和没有DMA配置,所以你认为它会工作。 –