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

求助,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条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-11-22 12:01
    关注
    评论

报告相同问题?

问题事件

  • 创建了问题 11月22日

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料