01. ADC概述
STM32F4xx 系列一般都有 3 个 ADC,这些 ADC 可以独立使用,也可以使用双重/三重模式(提高采样率)。STM32F4 的 ADC 是 12 位逐次逼近型的模拟数字转换器。它有 19 个通道,可测量 16 个外部源、2 个内部源和 Vbat 通道的信号。这些通道的 A/D 转换可以单次、连续、扫描或间断模式执行。ADC 的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。
相关文件为 stm32f4xx_adc.h和 stm32f4xx_adc.c。
02. 相关类型
03. 相关函数
- /* Function used to set the ADC configuration to the default reset state *****/
- void ADC_DeInit(void);
- /* Initialization and Configuration functions *********************************/
- void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);
- void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);
- void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct);
- void ADC_CommonStructInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct);
- void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);
- /* 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);
- void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel);
- /* 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);
- void ADC_SoftwareStartConv(ADC_TypeDef* ADCx);
- FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx);
- void ADC_EOCOnEachRegularChannelCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
- void ADC_ContinuousModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
- void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number);
- void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
- uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);
- uint32_t ADC_GetMultiModeConversionValue(void);
- /* Regular Channels DMA Configuration functions *******************************/
- 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);
- 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);
复制代码
04. 结构体封装
- /**
- * @brief Analog to Digital Converter
- */
- typedef struct
- {
- __IO uint32_t SR; /*!< ADC status register, Address offset: 0x00 */
- __IO uint32_t CR1; /*!< ADC control register 1, Address offset: 0x04 */
- __IO uint32_t CR2; /*!< ADC control register 2, Address offset: 0x08 */
- __IO uint32_t SMPR1; /*!< ADC sample time register 1, Address offset: 0x0C */
- __IO uint32_t SMPR2; /*!< ADC sample time register 2, Address offset: 0x10 */
- __IO uint32_t JOFR1; /*!< ADC injected channel data offset register 1, Address offset: 0x14 */
- __IO uint32_t JOFR2; /*!< ADC injected channel data offset register 2, Address offset: 0x18 */
- __IO uint32_t JOFR3; /*!< ADC injected channel data offset register 3, Address offset: 0x1C */
- __IO uint32_t JOFR4; /*!< ADC injected channel data offset register 4, Address offset: 0x20 */
- __IO uint32_t HTR; /*!< ADC watchdog higher threshold register, Address offset: 0x24 */
- __IO uint32_t LTR; /*!< ADC watchdog lower threshold register, Address offset: 0x28 */
- __IO uint32_t SQR1; /*!< ADC regular sequence register 1, Address offset: 0x2C */
- __IO uint32_t SQR2; /*!< ADC regular sequence register 2, Address offset: 0x30 */
- __IO uint32_t SQR3; /*!< ADC regular sequence register 3, Address offset: 0x34 */
- __IO uint32_t JSQR; /*!< ADC injected sequence register, Address offset: 0x38 */
- __IO uint32_t JDR1; /*!< ADC injected data register 1, Address offset: 0x3C */
- __IO uint32_t JDR2; /*!< ADC injected data register 2, Address offset: 0x40 */
- __IO uint32_t JDR3; /*!< ADC injected data register 3, Address offset: 0x44 */
- __IO uint32_t JDR4; /*!< ADC injected data register 4, Address offset: 0x48 */
- __IO uint32_t DR; /*!< ADC regular data register, Address offset: 0x4C */
- } ADC_TypeDef;
复制代码
|