我在用ST的IKA02A1学习AD,开发板上分别是3个模块信号,参考电压对应着AD通道4,CO信号对应着AD通道8,温度信号对应着AD通道10。在AD初始化时,开启连续转换模式,后面直接读AD值,按理转换顺序应该是4-8-10这样子,但实际上却是4-10-8,请问大神们这是什么原因,代码主循环如下:
while (1)
{
HAL_ADC_DeInit(&hadc); //关闭ad模块
HAL_UART_DeInit(&huart2); //关闭串口模块
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_IWDG_Refresh(&hiwdg); //清看门狗
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFE); //进入低功耗模式
//rtc定时唤醒
HAL_GPIO_TogglePin(LED_OUT);
MX_ADC_Init(); //重新初始化ad模块
//定义3个转换通道4、8、10,扫描方式为0-18,意即转换秩序是4-8-10,但下面实际是4-10-8,费解
MX_USART2_UART_Init(); //重新初始化串口模块
HAL_ADC_Start(&hadc); //启动ad转换 通道4是参考电压 通道8是co输出 通道10是温度探头
while(!READ_BIT(ADC1->ISR, ADC_ISR_EOC));
data[0]=HAL_ADC_GetValue(&hadc); //参考电压 通道4
while(!READ_BIT(ADC1->ISR, ADC_ISR_EOC));
data[1]=HAL_ADC_GetValue(&hadc); //本来这里应该是CO浓度通道8,但实际这里成了温度通道10
Tem_T=(1864-(float)data[1]*3200/4095)/11.71;
while(!READ_BIT(ADC1->ISR, ADC_ISR_EOC));
data[2]=HAL_ADC_GetValue(&hadc); //本来这里应该是温度通道10,但实际这里成了co浓度通道8
printf("REF=%d;CO=%d;T_V=%d;Temp=%0.1f\r\n",data[0],data[2],data[1],Tem_T);
HAL_ADC_Stop(&hadc);
} |