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模式,則一次...