1.STM32ADC介绍
2.STM32F40X_adc库函数汇总
3.单次非扫描ADC库函数配置方法
——————————————————————————————————————————————————————————————————————
——————————————————————————————————————————————————————————————————————
待解决问题:1规则、注入通道的实际应用,扫描和间断模式的应用,DMA的应用问题
2.规则注入组怎么设置?(解决) 使用ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime); 函数在软件中rank值设置特定通道的转换优先级
3.与STM32F103相比少了数据校准
——————————————————————————————————————————————————————————————————————
——————————————————————————————————————————————————————————————————————
1.STM32ADC介绍
-12位逐次逼近型,18通道,可测16外部和2内部信号源
-各通道可以进行单次,连续,扫描或间断模式运行
-连续模式是在一个通道上循环,扫描模式是在选定通道之间循环
-结果放在可设置对齐方式的16位寄存器中
-具有模拟看门口检测电压
-ADC输入时钟不能超过14M,由PCLK2分频得到
-多重模式(双ADC模式)
2.STM32F40X_adc库函数汇总
/* Function used to set the ADC configuration to the default reset state *****/ 设置ADC参数为默认复位值(缺省值)
void ADC_DeInit(void);
/* Initialization and Configuration functions *********************************/初始化和配置函数
void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct); 配置ADCx参数
void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct); 配置adc为缺省
void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct); 设置ADC通用寄存器ccr
void ADC_CommonStructInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct); 设置ADC通用寄存器为缺省值
void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);使能ADCx
/* Analog Watchdog configuration functions ************************************/模拟看门狗配置函数
void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog);
void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold,uint16_t LowThreshold); ADCx高低阀值
void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel); ADCx通道选择
/* Temperature Sensor, Vrefint and VBAT management functions ******************/温度传感器和内部参考电压管理函数
void ADC_TempSensorVrefintCmd(FunctionalState NewState);温度传感器
void ADC_VBATCmd(FunctionalState NewState);内部参考电压
/* Regular Channels Configuration functions ***********************************/规则通道配置函数
void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime); 指定ADC规则通道组设置其转换顺序和采样时间
void ADC_SoftwareStartConv(ADC_TypeDef* ADCx); 软件启动ADC
FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx);
void ADC_EOCOnEachRegularChannelCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_ContinuousModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState); ADC连续模式使能函数
void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number); 间断模式配置
void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx); 读取ADCx数据
uint32_t ADC_GetMultiModeConversionValue(void); 多重模式ADC的值
/* Regular Channels DMA Configuration functions *******************************/规则通道DMA配置函数
void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState); 使能
void ADC_DMARequestAfterLastTransferCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_MultiModeDMARequestAfterLastTransferCmd(FunctionalState NewState);
/* Injected channels Configuration functions **********************************/注入通道配置函数
void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);
void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length);
void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset);
void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv);
void ADC_ExternalTrigInjectedConvEdgeConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConvEdge);
void ADC_SoftwareStartInjectedConv(ADC_TypeDef* ADCx);
FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx);
void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel);
/* Interrupts and flags management functions **********************************/中断和标志管理函数
void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState); ADC中断
FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG); ADC标志位
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); 清除ADC中断待处理位
3.单次非扫描ADC库函数配置方法
(1)开启GPIO、ADC时钟配置相应通道的IO
(2)设置ADC通用功能参数ADC_CommonInit();
-ADC_Mode:独立、多重模式
-ADC_TwoSamplingDelay:俩个采样阶段的延迟周期数
-ADC_dmaAccessMode:DMA模式选择
-ADC_precaler:ADC预分频系数
(3)初始化ADCx参数:ADC_Init();
-ADC_Resolution:ADC转换分辨率
-ADC_ScanConvmode:扫描方式
-ADC_ExternalTrigConVmode:外部通道的触发使能和检测方式
-ADC_DataAlign:数据对齐
-ADC_Nbrofconversion规则序列长度
-ADC_ExternalTrifconv:
(4)开启AD:ADC_Cmd();
(5)启动ADC: ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);
表示规则通道中规则序列几中第几个转换(rank),采样周期
软件启动:ADC_SoftwareStartConv(ADC_TypeDef* ADCx);
(6)读取ADC值:ADC_GetConversionValue(ADC_TypeDef* ADCx);
转换状态读取:FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);