江科大學(xué)習(xí)筆記 _9.模數(shù)轉(zhuǎn)換


1.?RCC時鐘 ADC、GPIO,ADC分頻器CLK配置
2.?配置GPIO,模擬輸入
3.?配置多路開關(guān)
4.?配置ADC轉(zhuǎn)換器
?
?
?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.配置多路開關(guān)
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);
?
4.配置ADC轉(zhuǎn)換器
????ADC_InitTypeDef ADC_InitStruct;
????ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;//是否是連續(xù)轉(zhuǎn)換模式
????ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;//右對齊
ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
//外部觸發(fā)方式,不使用外部觸發(fā)
????ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;//單ADC
????ADC_InitStruct.ADC_NbrOfChannel = 1; ????????????//通道數(shù)目,僅在掃描模式下有用
????ADC_InitStruct.ADC_ScanConvMode = DISABLE; ?????//是否是連續(xù)掃描模式
????ADC_Init(ADC1, &ADC_InitStruct);
?
?ADC_Cmd(ADC1, ENABLE);
?
開啟ADC之后,根據(jù)手冊建議,進行校準(zhǔn)
????ADC_ResetCalibration(ADC1);//復(fù)位校準(zhǔn)
????while(ADC_GetResetCalibrationStatus(ADC1) == SET);//等待復(fù)位校準(zhǔn)完成
????ADC_StartCalibration(ADC1);//啟動校準(zhǔn)
while(ADC_GetCalibrationStatus(ADC1) == SET);//等待校準(zhǔn)完成
?
?
uint16_t AD_GetValue(uint8_t ADC_Channel)
{
????ADC_SoftwareStartConvCmd(ADC1, ENABLE);
????while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
????return ADC_GetConversionValue(ADC1);
}