qq_28445389 2022-11-22 09:52 采纳率: 0%
浏览 4

求助,adc读取电压值不对

目的是希望通过adc读取pa1脚的电压值
目前读出的电压值是0.2v左右,但实际应该读出的电压是1.65v左右,初学者,搞不清问题出在哪里,以下是代码。

uint16_t adcnum;
float temp;
int main(void)
{ 
    delay_init(168); 
    Adc_Init();    
    while(1)
    {    
        adcnum=Get_Adc();    

        temp=(float)adcnum*(3.3/4096);           
        delay_ms(250);    
    }
}

void  Adc_Init(void)
{ 
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能ADC1时钟
  
   GPIO_InitTypeDef  GPIO_InitStructure;
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模拟输入
   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//不带上下拉
   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
   GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化  
 
    
    ADC_RegularChannelConfig(ADC1,ADC_Channel_0, 1, ADC_SampleTime_480Cycles);    //ADC1,ADC通道
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE);      //ADC1复位
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE);    //复位结束     
 
  ADC_CommonInitTypeDef ADC_CommonInitStructure;
  ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式
  ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间的延迟5个时钟
  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //多adc模式下DMA失能
  ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div6;//预分频6分频。
  ADC_CommonInit(&ADC_CommonInitStructure);//初始化
    
    ADC_InitTypeDef       ADC_InitStructure;
   ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12位模式
  ADC_InitStructure.ADC_ScanConvMode = DISABLE;//非扫描模式    
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//adc连续模式
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//禁止触发检测,使用软件触发
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐    
  ADC_InitStructure.ADC_NbrOfConversion = 1;//只转换规则序列1 
  ADC_Init(ADC1, &ADC_InitStructure);//ADC初始化
    
    ADC_Cmd(ADC1, ENABLE);//开启AD转换器        
}              

uint16_t Get_Adc(void)   
{
    ADC_SoftwareStartConv(ADC1);        //使能指定的ADC1的软件转换启动功能,让adc开始转换
    while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
    return ADC_GetConversionValue(ADC1);
}

  • 写回答

2条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 创建了问题 11月22日

      悬赏问题

      • ¥15 Qt Vs2017使用Charts异常
      • ¥15 将位图选入内存DC失败,但没有出错信息
      • ¥20 如何从 .html url 启动/激活 .py 文件(sql debug)
      • ¥15 c#调用soap出错,soapui中可以
      • ¥100 CBIS-DDSM kaggle 资料处理
      • ¥30 python 在 excel 用 OpenPyXL 怎么实现以下代码
      • ¥15 pywinauto 无法捕获到元素
      • ¥15 ARfoundation (可能由于没打开摄像头的)黑屏问题
      • ¥15 C++类模板继承模板本身,有偿
      • ¥15 pycharm打包项目包含mp3文件,运行exe程序后mp3文件没有执行。