STM8S001J3的ADC采集问题
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);
}
求高手解答!谢谢!
本帖最后由 wenyangzeng 于 2018-1-17 15:38 编辑
参阅ST官方数据手册可知:PC4的ADC功能在AFR2,你必须在OPTION BYTE中配置PC4的AFR2功能。
同时:你的GPIO配置中:
GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_IN_PU_NO_IT);
GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_IN_FL_NO_IT);
貌似应该2个通道都一致。
还有:如果你不是设置扫描方式,也应该对PC4的ADC进行配置。 通道2没打开?? PC4的模拟输入功能需要在选项字节中开启,如果没设置选项字节,则AIN2功能默认为没有开启。可以在串口烧写软件中配置选项字节。
页:
[1]