打印
[应用相关]

STM8S105K6的ADC1出现问题

[复制链接]
663|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Thor9|  楼主 | 2016-11-30 20:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在使用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);           
           
         }
}
沙发
Rollo| | 2016-11-30 20:59 | 只看该作者

AD的时钟打开了吗?

使用特权

评论回复
板凳
Bjorn| | 2016-11-30 21:10 | 只看该作者
好像STM8不像STM32那样,还单独开关时钟

使用特权

评论回复
地板
Thorald| | 2016-11-30 21:32 | 只看该作者
有几个外设时钟寄存器的,把要用的外设时钟都要打开

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

108

主题

843

帖子

2

粉丝