文章
博客 网店

 STM32 ADC示例程序(不使用DMA)


前提条件:
1.项目中要包含相对的库文件
2.GPIO引脚时钟已使能


void AdcInit(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  ADC_InitTypeDef ADC_InitStructure;

  // 使能 ADC1 and GPIOC clock 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
                   
  //配置PC4为模拟输入(ADC Channel 8)
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  // 配置ADC1, 不用DMA, 用软件自己触发 
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;////独立模式
  ADC_InitStructure.ADC_ScanConvMode = DISABLE;  //连续多通道模式
  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);

  //将channel 8作为ADC1的规则配置通道
  ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_55Cycles5);
  
  ADC_Cmd(ADC1, ENABLE);// 使能 ADC1
  
  ADC_ResetCalibration(ADC1);  //重置指定的ADC1 的校准寄存器
  
  while(ADC_GetResetCalibrationStatus(ADC1));//获取ADC1 重置校准寄存器的状态
  
  ADC_StartCalibration(ADC1);  //开始指定ADC1 的校准状态
  
  while(ADC_GetCalibrationStatus(ADC1));//获取指定ADC1 的校准程序结束
  
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);//开始转换(连续转换)
}

uint16_t AdcGetVal(void)
{
  return   ADC_GetConversionValue(ADC1);//读取最近一次ADC1规则组的转换结果
}


芯艺工作室    蒙ICP备06005492号
Copyright© 2004-2023 ChipArt Studio All Rights Reserved