suncheng7808 2023-08-22 17:53 采纳率: 0%
浏览 36

STM32F0 ADC 问题,单片机

芯片型号:STM32F071CBU6

问题:

使用PA7,PB0(ADC_IN7, ADC_IN8)作为 ADC的输入引脚,检测电压。但获取的ADC值一直都是4095,仿真跟踪ADCx->DR值一直为

0x00000FFF

使用过hal 库,DMA 方式。标准库。并且使用 众拳f0教程里的 《09. 电位器ADC模拟量输入》源码(修改ADC 输入IO) 结果都一样。值都是4095. 硬件也检查过VDDA的电压也是3.295V ,VSSA 接地良好。也将ADC引脚换PA0,PA1,结果也是一直为4095。这个问题困扰了好久了,各位帮忙指点一下。
谢谢了!

img

img

硬件电路图如下:

img

代码如下:


/********************************* adc.c   ******************************************/
void DWQ_ADC_GPIO(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;                                            //声明结构变量
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;          //定义PB0,ADC_IN8
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;                     //IO口为模拟输入模式
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;            //AD口设置为浮空输入
    GPIO_Init(GPIOB, &GPIO_InitStructure); 
}

void DWQ_ADC_Config(void)
{

    ADC_InitTypeDef ADC_InitStuctrue;                             //声明ADC结构变量
    RCC_ADCCLKConfig(RCC_ADCCLK_PCLK_Div4) ;                        //时钟分频48M/4=12M 最大时钟不超过14M

    ADC_DeInit(ADC1);                                               //ADC复位
    ADC_DMACmd(ADC1, DISABLE);                                       //禁止DMA

    ADC_StructInit(&ADC_InitStuctrue);                            //根据ADC_InitStuctrue中指定参数初始化ADC1的寄存器
    ADC_InitStuctrue.ADC_Resolution=ADC_Resolution_12b;                     //采集设为12位精度即4095
//    ADC_InitStuctrue.ADC_ContinuousConvMode=DISABLE;                      //禁止持续ADC,设为单次ADC采集
    ADC_InitStuctrue.ADC_ContinuousConvMode = ENABLE;           //持续ADC采集
    ADC_InitStuctrue.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_None;        //不用外部触发,软件触发转换
    ADC_InitStuctrue.ADC_DataAlign=ADC_DataAlign_Right;                                          //数据右对齐
    ADC_InitStuctrue.ADC_ScanDirection=ADC_ScanDirection_Backward;                 //数据覆盖/浏览方向
    ADC_Init(ADC1,&ADC_InitStuctrue);                                                //按以上参数设置ADC1

    ADC_ChannelConfig(ADC1,ADC_Channel_8,ADC_SampleTime_239_5Cycles); //配置ADC1通道1即PA1,/采样周期239.5个周期
    ADC_GetCalibrationFactor(ADC1);                                                           //校准ADC1
    ADC_Cmd(ADC1,ENABLE);                                                                     //使能ADC1
    while(ADC_GetFlagStatus(ADC1,ADC_FLAG_ADEN)==RESET);          //等待ADC准备
    ADC_StartOfConversion(ADC1);                                                    //软件启动ADC转换
                                                         
}

void DWQ_ADC_Demo(void)
{
        uint32_t ad=0;

    while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET); 
    ad=ADC_GetConversionValue(ADC1);
    printf("adc_val = %d\r\n",ad);        

}

/********************* main.c ****************************************************/
void RCC_Configuration(void)
{  
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
}

void BSP_Configuration(void)
{    
    RCC_Configuration();
    RS232_GPIO();
    RS232_Configuration();
    DWQ_ADC_GPIO();
    DWQ_ADC_Config();
}

static void NVIC_Configuration(void)
{
    NVIC_InitTypeDef   NVIC_InitStructure;
    // rs232
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPriority = 0x01;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

int main(void)
{
     BSP_Configuration();
    NVIC_Configuration();
    printf("init done!\r\n");
    while(1)
    {
        DWQ_ADC_Demo();
        delay_ms(1000);
    }
}


  • 写回答

2条回答 默认 最新

  • 少林and叔叔 2023-08-23 16:38
    关注

    查看下芯片的手册,确定ADC1的通道8是否对应PA7这个引脚~

    评论

报告相同问题?

问题事件

  • 创建了问题 8月22日

悬赏问题

  • ¥15 jetson nano
  • ¥15 :app:debugCompileClasspath'.
  • ¥15 windows c++内嵌qt出现数据转换问题。
  • ¥20 公众号如何实现点击超链接后自动发送文字
  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问
  • ¥15 用MATLAB汇总拟合图
  • ¥15 智能除草机器人方案设计
  • ¥15 对接wps协作接口实现消息发送
  • ¥15 SQLite 出现“Database is locked” 如何解决?