打印

stm32f105 AD采样结果是4095,

[复制链接]
4162|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
megaf|  楼主 | 2011-9-21 14:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 megaf 于 2011-9-21 14:46 编辑

void ADC_HardInit(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    ADC_InitTypeDef ADC_InitStructure;
   
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC|RCC_AHBPeriph_DMA1, ENABLE);
    //DMA_Configuration();
   
    /* Configure PC.0 (ADC Channel 12) as analog input -------------------------*/
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
   
     /* ADC1 configuration ------------------------------------------------------*/
    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
    ADC_InitStructure.ADC_ScanConvMode = ENABLE;
    ADC_InitStructure.ADC_ContinuousConvMode =  ENABLE;
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_NbrOfChannel = 1;
    ADC_Init(ADC1, &ADC_InitStructure);     
   
    /* ADC1 regular channel12 configuration */
    ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 1, ADC_SampleTime_55Cycles5);
  
    /* Enable ADC1 */
    ADC_Cmd(ADC1, ENABLE);
   // ADC_DMACmd(ADC1, ENABLE);
    /* Enable ADC1 reset calibaration register */   
    ADC_ResetCalibration(ADC1);
    /* Check the end of ADC1 reset calibration register */
    while(ADC_GetResetCalibrationStatus(ADC1));
    /* Start ADC1 calibaration */
    ADC_StartCalibration(ADC1);
    /* Check the end of ADC1 calibration */
    while(ADC_GetCalibrationStatus(ADC1));
}
u8 ADC_GetChannel(u8 channel, u16* value)
{
    switch (channel)
    {
    case 0x12:
        channel = ADC_Channel_12;
        break;
    case 0x16:
        channel = ADC_Channel_16;
        ADC_TempSensorVrefintCmd(ENABLE);
        break;
     default:
        channel = ADC_Channel_16;
        break;
    }
    /* ADC1 regular channel12 configuration */
    ADC_RegularChannelConfig(ADC1, channel, 1, ADC_SampleTime_55Cycles5);
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);
    ADC_Delay(2);
    if(IS_ADC_GET_FLAG(ADC_FLAG_EOC))
    {
        *value = ADC_GetConversionValue(ADC1);
              return 0;
    }
        return 1;
}
u16 ad_value;
void BatteryCtl(void)
{
  float out,voltage;
  u16 out2;
   
       ADC_GetChannel(0x12,&ad_value);
    printf("\r\n ad_value %d",ad_value);
   
   
   
    ADC_GetChannel(0x16,&ad_value);
    printf("\r\n TempSensorVrefintCmd %d",ad_value);
      
}
源代码如上,只测一个pc0--in12测得结果老是4095,但是用表测量电压时2.2v,我把pco接地测得结果就是0.郁闷中.....
沙发
megaf|  楼主 | 2011-9-21 14:06 | 只看该作者
自已顶一个

使用特权

评论回复
板凳
megaf|  楼主 | 2011-9-21 14:36 | 只看该作者
刚刚试了一下,采集ADC_Channel_17都正常,程序应该没问题,难道pc0有特殊之处,但看看好像没有啊,郁闷。。。。。。。。。

使用特权

评论回复
地板
IJK| | 2011-9-21 15:15 | 只看该作者
或许芯片有问题?

使用特权

评论回复
5
iris_1| | 2011-9-21 15:25 | 只看该作者
或许该用示波器看下PC0

使用特权

评论回复
6
anzil| | 2011-9-21 22:39 | 只看该作者
看看这个管教是不是被复用了

使用特权

评论回复
7
FKRTOY| | 2017-5-4 19:27 | 只看该作者
想问一下,你的问题解决了吗,我的AD采集数据除了接GND之外其余的都是4095,我用万用表测量该引脚电压值并不是3.3V。

使用特权

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

本版积分规则

个人签名:呵呵,赶上中国机器人发展的时代,中国机器人就靠我们这代人了,任重道远。

24

主题

81

帖子

1

粉丝