STM32
直播中

李平

7年用户 1247经验值
私信 关注
[问答]

STM8S001J3的ADC采集,PC4的数据一直不变是怎么回事?

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);
  }

求高手解答!谢谢!


回帖(1)

谢芳芳

2024-4-30 16:29:22
PC4的模拟输入功能需要在选项字节中开启,如果没设置选项字节,则AIN2功能默认为没有开启。可以在串口烧写软件中配置选项字节。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分