错误说明:
使用cube生成多路AD采集,非中断,非DMA模式下,软件切换通道,发现会出现只有第一路的值是正确的,后面的几路值都不对,切换通道部分代码如下:
ADC_ChannelConfTypeDef sConfig;
sConfig.Channel=ch;
sConfig.Rank=ADC_RANK_CHANNEL_NUMBER;
HAL_ADC_ConfigChannel(&hadc,&sConfig);
HAL_ADC_Start(&hadc);
原因是这样切换并没有将CHSELR寄存器清掉,需改成:
ADC_ChannelConfTypeDef sConfig;
hadc.Instance->CHSELR = 0;
sConfig.Channel=ch;
sConfig.Rank=ADC_RANK_CHANNEL_NUMBER;
HAL_ADC_ConfigChannel(&hadc,&sConfig);
HAL_ADC_Start(&hadc);
若有理解不对的地方,还请提出来,大家交流学习。