给下面的C语言添加详细的注释PC1 ADC123_11void ADC11_Initvoid RCC_APB2PeriphClockCmdRCC_APB2Periph_GPIOCENABLE; RCC_APB2PeriphClockCmdRCC_APB2Periph_ADC1ENABLE; RCC_ADCCLKConfigRCC_PCLK2_Div6; GPIO_InitTypeDef GPI
//PC1 ADC123_11 // 初始化ADC11 void ADC11_Init(void) { // 使能GPIOC和ADC1的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); // 设置ADC时钟分频为PCLK2的6分之一 RCC_ADCCLKConfig(RCC_PCLK2_Div6);
// 配置GPIOC.1为模拟输入模式
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStruct);
// 配置ADC1的通道11为正常转换模式,采样时间为55.5个周期
ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 1, ADC_SampleTime_55Cycles5);
// 配置ADC1的参数
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_InitStruct.ADC_NbrOfChannel = 1; // 转换通道数量为1
ADC_InitStruct.ADC_ScanConvMode = DISABLE; // 扫描模式禁止
ADC_Init(ADC1, &ADC_InitStruct);
// 使能ADC1
ADC_Cmd(ADC1, ENABLE);
// 复位ADC1的校准寄存器
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1) == SET); // 等待校准寄存器复位完成
// 开始ADC1的校准
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1) == SET); // 等待校准完成
}
// 获取ADC转换结果 uint16_t ADC_return(void) { // 启动ADC1的软件转换 ADC_SoftwareStartConvCmd(ADC1, ENABLE); while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); // 等待转换完成 return ADC_GetConversionValue(ADC1); // 返回转换结果
原文地址: https://www.cveoy.top/t/topic/iVZ0 著作权归作者所有。请勿转载和采集!