测试平台:STM32G030C8
需求:ADC-DMA连续转换
使用STM32CubexMx初始化时会发现某些通道是灰色的,不能使用
原因是和Sequencer配置参数有关,大致意思是
在这个模式下,用户可以自己配置通道轮询的次序。但该模式明确指出,只支持AN0~AN14通道。
在这个模式下,ADC通道轮询次序是按照通道号从小到大(或从大到小)的顺序依次轮询的,不可改变。该模式支持AN0~AN18通道(即所有通道都可用)。
注意:如果开启中断,会连续触发DMA转换完成中断,转换完一轮也就是所有通道就会中断一次,时间在us级别,会极大浪费CPU时间。
LL_ADC_StartCalibration(ADC1);
while( LL_ADC_IsCalibrationOnGoing(ADC1));
除去STM32CubeMX自动添加的 MX_ADC1_Init(); 还需手动启动DMA转换
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_dma_value, 5);
void adc_test()
{
uint16_t adc_dma_value[5];
LL_ADC_StartCalibration(ADC1);
while (LL_ADC_IsCalibrationOnGoing(ADC1));
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_dma_value, 5);
while (1)
{
HAL_Delay(100);
board_iwdg();
SEGGER_RTT_printf(0, "adc value:\t%d\t%d\t%d\t%d\t%d\r\n", adc_dma_value[0] * 3300 / 4096, adc_dma_value[1] * 3300 / 4096, adc_dma_value[2] * 3300 / 4096, adc_dma_value[3] * 3300 / 4096, adc_dma_value[4] * 3300 / 4096);
for (size_t i = 0; i < 5; i++)
{
adc_dma_value[i] = 0;
}
}
}