STM8S001J3同时两路ADC采集,PC4的AIN2和PD6的AIN6,同样的配置方式,PD6数据正常,PC4的数据一直不变,单通道采集PC4数据也是不变化,下面贴上PD6和PC4的配置方式代码:
void ADC1_Config(void)
{
/* 初始化 ADC1 通道6的IO口 */
GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_IN_PU_NO_IT);
GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_IN_FL_NO_IT);
ADC1_PrescalerConfig(ADC1_PRESSEL_FCPU_D2);//预分频2
ADC1_ExternalTriggerConfig(ADC1_EXTTRIG_
tiM,DISABLE);//不使用外部触发
ADC1_SchmittTriggerConfig(ADC1_SCHMITTTRIG_CHANNEL2,DISABLE);
ADC1_SchmittTriggerConfig(ADC1_SCHMITTTRIG_CHANNEL6,DISABLE);
//禁止AIN2 AIN4的施密特触发器,降低IO静态功耗
//PD5,PD6上的通道如果施密特方式禁用会导致串口无法收发数据!
ADC1_ConversionConfig(ADC1_CONVERSIONMODE_SINGLE,//单次转换
ADC1_CHANNEL_6,//配置通道号最大的那个
ADC1_ALIGN_RIGHT);//右对齐
ADC1_Cmd(ENABLE);//开启ADC
ADC1_ScanModeCmd(ENABLE);//开启扫描模式
}
下面是主函数代码:
while (1)
{
//ans = getchar(); //读取输入的字符
// GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);
ADC1_StartConversion();//开启一次转换
while(!ADC1_GetFlagStatus(ADC1_FLAG_EOC));//等待转换完成
ADC1_ClearFlag(ADC1_FLAG_EOC);//软件清除
Conversion_Value2=(u16)ADC1_GetBufferValue(ADC1_SCHMITTTRIG_CHANNEL2);//读取AIN2的值
Conversion_Value6=(u16)ADC1_GetBufferValue(ADC1_SCHMITTTRIG_CHANNEL6);//读取AIN6的值
printf("%d", Conversion_Value2); //把输入的字符发送出去
Delay(100);
printf("%d", Conversion_Value6); //把输入的字符发送出去
Delay(100);
}
求高手解答!谢谢!