stm32 ADC模数转换

来源:互联网 发布:并查集算法 编辑:程序博客网 时间:2024/06/05 06:23

1 2
通过调节电位器,改变AD转换值和电压值

STM32F1 ADC 配置步骤

1.使能GPIO时钟和ADC时钟
2.配置引脚模式为模拟输入
3.配置ADC的分频因子
4.初始化ADC参数,ADC_InitTypeDef
5.使能ADC
6.执行ADC校准
7.设置ADC软件启动
8.读取ADC转换值
9.设置ADC规则,采样时间等
10.使能ADC的软件转换
11.读取ADC转换结果

举例

u16 ADC_value(u8 time){    u8 i = 0;    u16 value;    ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5); //设置ADC规则,采样时间239.5周期    for(i = 0; i < time; i++)    {        ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能ADC的软件转换        while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) != SET);        value += ADC_GetConversionValue(ADC1); //读取ADC转换结果    }    return value/time;}typedef struct{    uint32_t ADC_Mode; //双模式选择    FunctionalState ADC_ScanConvMode; //扫描模式     FunctionalState ADC_ContinuousConvMode; //连续转换    uint32_t ADC_ExternalTrigConv;  //注入通道的外部触发转换模式    uint32_t ADC_DataAlign; //数据对齐    uint8_t ADC_NbrOfChannel; //规则通道序列长度}ADC_InitTypeDef;void ADC_init(){    GPIO_InitTypeDef gpio =     {        GPIO_Pin_1,        GPIO_Speed_50MHz,        GPIO_Mode_AIN //模拟输入    };    ADC_InitTypeDef adc =    {        ADC_Mode_Independent, //独立模式        DISABLE, //关闭扫描模式        DISABLE, //单次转换模式        ADC_ExternalTrigConv_None, //不用外部事件启动转换        ADC_DataAlign_Right, //右对齐        1, //通道数目1    };    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE); //使能GPIO时钟和ADC时钟    GPIO_Init(GPIOA, &gpio); //配置引脚模式    RCC_ADCCLKConfig(RCC_PCLK2_Div6); //配置ADC的分频因子    ADC_Init(ADC1, &adc); //初始化ADC参数    ADC_Cmd(ADC1, ENABLE); //使能ADC    ADC_ResetCalibration(ADC1); //执行ADC复位校准    while(ADC_GetResetCalibrationStatus(ADC1) == SET); //等待校准完成    ADC_StartCalibration(ADC1); //执行ADC校准    while(ADC_GetCalibrationStatus(ADC1) == SET);    ADC_SoftwareStartConvCmd(ADC1, ENABLE); //ADC软件启动}int main(void){    ADC_init();    while(1)    {        adc = ADC_value(15); //15次平均值        printf("ADC_value is %d.\n", adc);        printf("vol is %.3fV.\n", adc * (3.3 / 4096)); //电压值        delay_ms(500);        led1 = ~led1;    }}

电压计算

vol = ADC * (3.3 / 4096);

ADC的参考电压VREF+为3.3V。ADC为12位转换精度, 2^12为4096

原创粉丝点击