[应用相关] 使用STM8S105K6的ADC1出现问题

[复制链接]
792|3
 楼主| Soraka 发表于 2017-3-19 20:24 | 显示全部楼层 |阅读模式
在使用STM8S105K6的ADC1的通道一进行AD转换时,转换出来的值不变且恒为2049,而10位AD最多只能到1024 ,程序反复检查也没有发现bug,我是开启了转换完成中断,在中断里面进行读取,ADC1的配置程序如下:
void ADC_Config()
{
  /*  Init GPIO for ADC1 */
  GPIO_Init(GPIOB, GPIO_PIN_1, GPIO_MODE_IN_FL_NO_IT);
  GPIO_Init(GPIOB, GPIO_PIN_2, GPIO_MODE_IN_FL_NO_IT);
  
  /* De-Init ADC peripheral*/
  ADC1_DeInit();

  /* Init ADC1 peripheral */
  ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_1, ADC1_PRESSEL_FCPU_D18, \
            ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL1,\
            DISABLE);

ADC1_ConversionConfig(ADC1_CONVERSIONMODE_SINGLE,
ADC1_CHANNEL_1,
                        ADC1_ALIGN_RIGHT);

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

  /* Enable general interrupts */  
  enableInterrupts();
   
  /*Start Conversion */
  ADC1_Cmd(ENABLE);
  ADC1_StartConversion();
}


转换值读出之后通过串口打印出来转换值的读取程序如下:
         /* 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\n\r",ADC1_GetConversionValue());
//             printf("%d\n\r",ADC1_AIN1_Value);
            
             ADC1_ClearITPendingBit(ADC1_IT_EOC);           
           
         }
}
Garen2 发表于 2017-3-19 20:39 | 显示全部楼层

AD的时钟打开了吗
Ryze 发表于 2017-3-19 20:50 | 显示全部楼层
有几个外设时钟寄存器的,把要用的外设时钟都要打开
Varus 发表于 2017-3-19 21:01 | 显示全部楼层
STM8上电之后默认所有外设时钟都是打开的吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

178

主题

865

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部