STM32F1 ADC實驗(HAL庫版)

2022-05-04 09:00:09 字數 3165 閱讀 8491

adc(analog-to-digital converter)即模數轉換器,輸入模擬電壓即可轉換為數字量。

一、stm32的adc

stm32f1有三個adc,分別是adc1、adc2、adc3,根據stm32參考手冊可知,adc1和adc2均有16個輸入通道,adc3有若干個輸入通道(根據晶元型別不同有差異),還有有乙個內部溫度感測器通道和乙個光敏感測器通道。分布在各個引腳上,可根據stm32 晶元手冊查詢。如adc1 in1 (通道1)在pa1上。

二、stm32 adc的一些概念 (單次轉換、連續轉換、掃瞄模式)

3、掃瞄模式:對多通道的轉換進行逐個轉換。若此時開啟單次轉換模式,掃瞄完所有通道後需要手動啟動下一次掃瞄轉換;若此時開啟連續轉換模式,掃瞄完成後自動進入下一次掃瞄轉換,所以掃瞄模式需要配合dma才能讀取資料。

三、adc的配置(hal庫版)

要使用adc,必須先對其進行配置,hal庫提供了若干函式來對adc進行配置。

1、配置adc時鐘,這個基本沒有什麼修改的餘地

rcc_periphclkinittypedef adc_clkinit;

adc_clkinit.periphclockselection=rcc_periphclk_adc; //

adc外設時鐘

adc_clkinit.adcclockselection=rcc_adcpclk2_div6; //

分頻因子6時鐘為72m/6=12mhz

hal_rccex_periphclkconfig(&adc_clkinit); //

設定adc時鐘

2、配置adc,使用到哪個adc就配置哪個

__hal_rcc_adc1_clk_enable();            //使能adc1時鐘

adc1_handler.instance=adc1;

adc1_handler.init.dataalign=adc_dataalign_right; //

右對齊adc1_handler.init.scanconvmode=disable; //

不掃瞄模式

adc1_handler.init.continuousconvmode=disable; //

不連續轉換

adc1_handler.init.nbrofconversion=1; //

乙個規則通道轉換

adc1_handler.init.discontinuousconvmode=disable; //

禁止不連續取樣模式

adc1_handler.init.nbrofdiscconversion=0; //

不連續取樣通道數為0

adc1_handler.init.externaltrigconv=adc_software_start; //

軟體觸發

hal_adc_init(&adc1_handler); //

初始化

其中掃瞄模式和連續轉換模式根據需求改,規則轉換通道數nbrofconversion 為你要使用的adc轉換通道數。

3、自動校準adc,呼叫即可

hal_adcex_calibration_start(&adc1_handler);                     //

校準adc

4、配置輸入的i/o口

gpio_inittypedef gpio_initure;

__hal_rcc_gpioa_clk_enable(); //

開啟gpioa時鐘

gpio_initure.pin=gpio_pin_1|gpio_pin_0; //

pa1和pa0

gpio_initure.mode=gpio_mode_analog; //

模擬輸入

gpio_initure.pull=gpio_nopull; //

不帶上下拉

hal_gpio_init(gpioa,&gpio_initure);

5、配置通道之後開啟adc轉換

adc_channelconftypedef adc1_chanconf;

adc1_chanconf.channel=ch; //

通道adc1_chanconf.rank=1; //

第1個序列,序列1

adc1_chanconf.samplingtime=adc_sampletime_239cycles_5;

//取樣時間

hal_adc_configchannel(&adc1_handler,&adc1_chanconf); //

通道配置

hal_adc_start(&adc1_handler); //

開啟adc

6、hal庫提供了乙個輪詢轉換和乙個獲取轉換結果的函式

hal_adc_pollforconversion(&adc1_handler,10);                //

輪詢轉換

hal_adc_getvalue(&adc1_handler); //

返回最近一次adc1規則組的轉換結果

三、應用

若需要採用多通道掃瞄模式進行轉換,需要用到dma功能,我還在學習中,以後再更。

若使用單次轉換進行兩個通道轉換,序列單次轉換兩次即可。

STM32F103 PWM輸出實驗(HAL庫)

1 晶元輸出pwm波形打碼步驟 1.0主函式 int main void 1.1初始化輸出pwm波形的定時器和io口 例程使用定時器1的通道1,輸出在pa8 gpio inittypedef gpio initure hal rcc tim1 clk enable 使能定時器1 hal rcc gp...

STM32F1系列HAL庫讀寫內部FLASH

測試環境 注 本章節 只適合stm32f1系列!移植修改區 flash大小 128k define stm32flash size 0x00020000ul flash起始位址 define stm32flash base flash base flash結束位址 define stm32flash...

STM32 HAL庫連續ADC問題記錄

目標 使用stm32的連續adc功能,通過dma將adc結果存入緩衝,應用中直接從緩衝獲取adc結果。問題1 緩衝中的結果僅上電時存入一次,不能持續重新整理 原因1 dma模式配置不正確。如下圖,mode選擇circular模式,則dma可以迴圈向緩衝儲存資料,如果使用預設的normal模式,則一次...