欢迎光临散文网 会员登陆 & 注册

江科大学习笔记 _9.模数转换

2023-06-12 10:09 作者:自闭选手的Z23  | 我要投稿



1. RCC时钟 ADC、GPIO,ADC分频器CLK配置

2. 配置GPIO,模拟输入

3. 配置多路开关

4. 配置ADC转换器

 

 

 1.RCC时钟 ADC、GPIO,ADC分频器CLK配置

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

RCC_ADCCLKConfig(RCC_PCLK2_Div6);

 

2.配置GPIO,模拟输入

    GPIO_InitTypeDef GPIO_InitStruct;

    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;//模拟输入

    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;

    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStruct);

 

3.配置多路开关

ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);

 

4.配置ADC转换器

    ADC_InitTypeDef ADC_InitStruct;

    ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;//是否是连续转换模式

    ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;//右对齐

ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

//外部触发方式,不使用外部触发

    ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;//单ADC

    ADC_InitStruct.ADC_NbrOfChannel = 1;             //通道数目,仅在扫描模式下有用

    ADC_InitStruct.ADC_ScanConvMode = DISABLE;      //是否是连续扫描模式

    ADC_Init(ADC1, &ADC_InitStruct);

 

 ADC_Cmd(ADC1, ENABLE);

 

开启ADC之后,根据手册建议,进行校准

    ADC_ResetCalibration(ADC1);//复位校准

    while(ADC_GetResetCalibrationStatus(ADC1) == SET);//等待复位校准完成

    ADC_StartCalibration(ADC1);//启动校准

while(ADC_GetCalibrationStatus(ADC1) == SET);//等待校准完成

 

 

uint16_t AD_GetValue(uint8_t ADC_Channel)

{

    ADC_SoftwareStartConvCmd(ADC1, ENABLE);

    while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);

    return ADC_GetConversionValue(ADC1);

}


江科大学习笔记 _9.模数转换的评论 (共 条)

分享到微博请遵守国家法律