步骤
1.开启RCC时钟(ADC,GPIO),ADCCLK分频器(最大频率14MHZ,因此需要要6分频)
2.配置GPIO(模拟输入)
3.配置多路开关,把左边的通道接入右边的规则组列表
4.配置ADC转换器(参数:单次转换/连续转换;扫描/非扫描;通道数;触发源;数据左对齐/右对齐)
函数
//配置ADCCLk分频器
void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);
//ADC
void ADC_DeInit(ADC_TypeDef* ADCx); //恢复初始配置
void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);//初始化
void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);//结构体初始化
void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);//ADC上电(开关控制)
void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState);//开启DMA输出信号
void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState);//中断输出控制(用于控制中断能不能通往NVIC)
//控制校准
void ADC_ResetCalibration(ADC_TypeDef* ADCx);//复位校准
FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx);//获取复位校准状态
void ADC_StartCalibration(ADC_TypeDef* ADCx);//开始校准
FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx);//获取开始校准状态
void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);//ADC软件开始转换控制(软件触发转换)
FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx);//ADC获取软件开始转换状态(不能获取转换是否结束/一般不用)
FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);//判断转换是否结束(转换结束,EOC标志位置1)
//配置间断模式
void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number);//每隔几个通道开启间断模式
void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);//启动间断模式
//
void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);//ADC规则组配置通道
void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);//ADC外部触发中断控制
uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);//ADC获取转换值(读取转换结果时使用)
uint32_t ADC_GetDualModeConversionValue(void);//ADC获取双模式转换值
//配置模拟看门狗
void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);//是否启动模拟看门狗
void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);//配置高低阈值
void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv);//配置看门狗通道
void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);//开启内部两通道(温度;电压)
FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);//获取标志位状态
void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);//清除标志位
ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT);//获取中断状态
void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT);//清除中断挂起位