使用STM8S105K6的ADC1出现问题

2019-03-23 18:19发布

在使用STM8S105K6的ADC1的通道一进行AD转换时,转换出来的值不变且恒为2049,而10位AD最多只能到1024 ,程序反复检查也没有发现bug,我是开启了转换完成中断,在中断里面进行读取,ADC1的配置程序如下:
  1. void ADC_Config()
  2. {
  3.   /*  Init GPIO for ADC1 */
  4.   GPIO_Init(GPIOB, GPIO_PIN_1, GPIO_MODE_IN_FL_NO_IT);
  5.   GPIO_Init(GPIOB, GPIO_PIN_2, GPIO_MODE_IN_FL_NO_IT);
  6.   
  7.   /* De-Init ADC peripheral*/
  8.   ADC1_DeInit();

  9.   /* Init ADC1 peripheral */
  10.   ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_1, ADC1_PRESSEL_FCPU_D18,
  11.             ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL1,
  12.             DISABLE);
  13. ADC1_ConversionConfig(ADC1_CONVERSIONMODE_SINGLE,
  14. ADC1_CHANNEL_1,
  15.                         ADC1_ALIGN_RIGHT);

  16. /* Enable EOC interrupt */
  17.   ADC1_ITConfig(ADC1_IT_EOCIE, ENABLE);

  18.   /* Enable general interrupts */  
  19.   enableInterrupts();
  20.    
  21.   /*Start Conversion */
  22.   ADC1_Cmd(ENABLE);
  23.   ADC1_StartConversion();
  24. }

复制代码
转换值读出之后通过串口打印出来转换值的读取程序如下:
         /* start up converting every 500ms */      
INTERRUPT_HANDLER(ADC1_IRQHandler, 22)
  {
    /* In order to detect unexpected events during development,
        it is recommended to set a breakpoint on the following instruction.
     */
         /* Debug code */
         if(ADC1_GetFlagStatus(ADC1_FLAG_EOC) == 0x80)
         {
             printf("ADC CH1 VALUE IS:%d ",ADC1_GetConversionValue());
//             printf("%d ",ADC1_AIN1_Value);
            
             ADC1_ClearITPendingBit(ADC1_IT_EOC);           
           
         }
}
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。