1、勾选标准外设库
2、代码实现
mian.c
#include <stm32f10x.h>
#include "delay.h"
#include "adc.h"
int main(void)
{
uint16_t adc_result;
float adc_value;
adc_init();
while(1)
{
adc_result = adc_getresult();
adc_value = adc_result * 3.3 / 4095;
delay_s(2);
}
}
adc.h
#ifndef _ADC_H
#define _ADC_H
#include <stm32f10x.h>
void adc_init(void);
uint16_t adc_getresult(void);
#endif
adc.c
#include "adc.h"
void adc_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
//打开ADC1 GPIOA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE);
//配置PA1为模拟输入模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* ADC1 configuration*/
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);
/* ADC1 regular channels configuration */
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_28Cycles5);
/* Enable ADC1 */
ADC_Cmd(ADC1, ENABLE);
//ADC校准
/* Enable ADC1 reset calibration register */
ADC_ResetCalibration(ADC1);
/* Check the end of ADC1 reset calibration register */
while(ADC_GetResetCalibrationStatus(ADC1));
/* Start ADC1 calibration */
ADC_StartCalibration(ADC1);
/* Check the end of ADC1 calibration */
while(ADC_GetCalibrationStatus(ADC1));
//启动ADC转换
/* Start ADC1 Software Conversion */
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
uint16_t adc_getresult(void)
{
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);
return (ADC_GetConversionValue(ADC1));
}