STM32学习笔记—ADC


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);


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM