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