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