发新帖我要提问
12
返回列表
打印
[STM8]

stm8l152 adc初始化与引脚选择

[复制链接]
楼主: yilichen
手机看帖
扫描二维码
随时随地手机跟帖
21
HOLY_JIANG| | 2011-11-17 09:29 | 只看该作者 回帖奖励 |倒序浏览
/////////////////////////////////
void CLK_CONFIG(void)
{
  CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_2);
}
//////////////////////////////////////

void GPIO_CONFIG(void)
{
  GPIO_Init(GPIOC,GPIO_Pin_0, GPIO_Mode_Out_PP_High_Slow ); //WARNING LED PIN
  //GPIO_Init(GPIOB,GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow );//SEG PIN
  //GPIO_Init(GPIOD,GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7, GPIO_Mode_Out_PP_High_Slow );//BIT PIN
  GPIO_Init(GPIOA,GPIO_Pin_4 , GPIO_Mode_In_FL_No_IT ); //AD PIN
  GPIO_Init(GPIOC,GPIO_Pin_4 , GPIO_Mode_In_FL_No_IT ); //AD PIN
}
///////////////////////////////////////////////////
uint16_t adc1_input2(void)
{
  uint8_t i;
  uint16_t adc_number;

  ADC_SoftwareStartConv(ADC1);
  //ADC_Cmd(ADC1,ENABLE); //START ADC
  
  for(i=0;i<200;i++);
  //ADC_Cmd(ADC1,ENABLE);

  while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
  adc_number=ADC_GetConversionValue(ADC1);
  ADC_ClearFlag(ADC1,ADC_FLAG_EOC);
  return(adc_number);

  
}
///////////////////////////////////////////////////
void adc1_input2_init(void)
{
   CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);
   ADC_DeInit(ADC1);
   ADC_Init(ADC1,ADC_ConversionMode_Single,ADC_Resolution_12Bit,ADC_Prescaler_1);
   
   ADC_SamplingTimeConfig(ADC1,ADC_Group_SlowChannels,ADC_SamplingTime_384Cycles);
   
   ADC_ChannelCmd(ADC1,ADC_Channel_2,ENABLE);  //
   ADC_VrefintCmd(ENABLE);
   ADC_Cmd(ADC1,ENABLE);
   ADC_DMACmd(ADC1,ENABLE);//DISABLE
   
}

void main( void )
{

  uint16_t wd_temperature_show_number;
  
  wd_temperature_show_number=168;

  
  DelayUs(150);
  
  
  CLK_CONFIG();
  GPIO_CONFIG();
  adc1_input2_init();
  
  LED_H();
  LED_L_DH();
  
  while(1)
  {
   /*
    temp++;
    if(temp==6000)  {temp=1;}
    if(temp<3000)   {LED_L();}
    if(temp>=3000)  {LED_H();}
    else{}
    */
    //LED_H_B();
   
     wd_temperature_show_number=adc1_input2();
     
     if(wd_temperature_show_number==0)
     {LED_L();}
     else
     {LED_H();;}

  }
}
始终读不了  AD值,return返回值始终为0,采用端口ADC1_IN2  (PA4)   芯片STM151LC2T6  ad端口电压0.2V   采用外部2.5  VREF       在添加了“CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);” 时钟后单片工作不正常    不添加该语句   读得 CR1 0X01  CR2 0X07   CR3 0X1F   SQR4 0X04   没有搞懂CR2为0x07  这个怎么能工作  

最总问题是   还是读不了 AD值

使用特权

评论回复
22
HOLY_JIANG| | 2011-11-17 09:30 | 只看该作者
SQR 0x04  是读得通道2  ?  在PC4口也弄了电压   还是读不了

使用特权

评论回复
23
HOLY_JIANG| | 2011-11-17 09:34 | 只看该作者
补充说明    ADC_DMACmd(ADC1,DISABLE);//DISABLE   试验中改了 该句   还是没有用

使用特权

评论回复
24
HOLY_JIANG| | 2011-11-17 10:17 | 只看该作者
问题找到  更改while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==0);  

看的 STM8S资料      把 标志位搞反了

使用特权

评论回复
25
xp1314520| | 2013-6-11 11:56 | 只看该作者
zhangyong1818 发表于 2010-8-10 13:50
经过同事的指点,我把AD转换的结果在LCD显示出来了,挺准确,冤枉芯片了。不过在初始化配置上还是存在疑问 ...

我是初学者,楼主能分享下 例子吗?万分感谢

使用特权

评论回复
26
shenwuzhe| | 2013-6-28 11:18 | 只看该作者
zhangyong1818 发表于 2010-8-10 13:50
经过同事的指点,我把AD转换的结果在LCD显示出来了,挺准确,冤枉芯片了。不过在初始化配置上还是存在疑问 ...

你好, 怎么处理的, 我现在一直有问题, 读出来的ad 值一直不对, 初始化按官方的库帮我看下
        CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);
       
        ADC_DeInit(ADC1);

        ADC_DMACmd(ADC1, DISABLE);

        GPIO_Init(GPIOE, GPIO_Pin_5, GPIO_Mode_In_FL_No_IT);

        ADC_Init(ADC1, ADC_ConversionMode_Single,ADC_Resolution_12Bit, ADC_Prescaler_2);

        ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles);

        ADC_VrefintCmd(ENABLE);

        ADC_Cmd(ADC1, ENABLE);

        ADC_ChannelCmd(ADC1, ADC_Channel_23, ENABLE);

        ADC_SchmittTriggerConfig(ADC1, ADC_Channel_23, ENABLE);

        ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);

使用特权

评论回复
27
sun1238898| | 2013-7-1 18:01 | 只看该作者
楼主好用了吗

使用特权

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

本版积分规则