stm32cubeide所用版本:1.1.0
韌體庫包:f1 1.8.0
測試平台stm32f103c8t6
adc的配置很簡單,如下圖:
當然,你配置好後要注意adc的採集時鐘頻率的配置,這樣匯入時才不會報錯。
這樣就配置好了,匯入工程。
在個人變數裡新增
/* user code begin pv */
uint16_t ad_value =
0;
在while裡新增如下程式:
/* user code begin while */
while(1
)/* user code end 3 */
}
其中
hal_adc_start(&hadc1);為啟動adc轉換。
hal_adc_pollforconversion(&hadc1, 50);表示等待轉換完成,第二個引數表示超時時間,單位ms。這個我用的時候感覺影響不大,可有可無。
hal_adc_getvalue(&hadc1);讀取adc轉換資料,資料為12位。檢視資料手冊可知,暫存器為16位儲存轉換資料,資料右對齊,則轉換的資料範圍為0~2^12-1,即0 ~4095。
還有其他的函式可用,如:
hal_adc_getstate(&hadc1);為換取adc狀態,hal_adc_state_reg_eoc表示轉換完成標誌位,轉換資料可用。
配合使用
hal_is_bit_set(hal_adc_getstate(&hadc1), hal_adc_state_reg_eoc);就是判斷轉換完成標誌位是否設定。
使用dma來進行adc採集更方便,配置如下:
配置好後先注意初始化的順序是不是先dma再adc,下圖是正確的:
具體原因上節講過了,感興趣的可以去上節(串列埠通訊的注意裡看。
然後先在變數處新增變數。
/* user code begin pv */
uint16_t adc_value[
100]
;uint8_t i;
uint32_t ad1;
再在主函式內新增啟動函式
第乙個引數是adc控制代碼
第二個引數是儲存採集回來的adc值的位址
第三個引數是一次adc採集的值的個數
/* user code begin 2 */
hal_adc_start_dma
(&hadc1,
&adc_value,
100)
;/* user code end 2 */
最後在while裡新增下面**:
/* user code begin 3 */
for(i =
0,ad1 =
0; i <
100;
) ad1 /
=100
;
STM32CubeIDE入坑指南
stm32cubeide使用筆記 01 基礎說明與開發流程 stm32cubeide使用筆記 02 stm32cubemx配置與 生成 stm32cubeide使用筆記 03 使用st link除錯程式 stm32cubeide使用筆記 04 雜項記錄 要點 方法 技巧等等 stm32cubeide...
STM32CubeIDE 介紹及安裝
安裝官網位址 stm32cubeide是乙個多功能的整合開發工具,整合了truestudio和stm32cubemx,它是stm32cube軟體生態系統的一部分。stm32cubeide是乙個先進的c c 開發平台,具有stm32微控制器的ip配置,生成,編譯和除錯功能。它基於eclipse cdt...
STM32CubeIDE 多通道ADC DMA轉換
1 adc1引數設定如下,本歷程開啟了9路adc通道 2 設定dma 3 設定dma資料寬度,把資料寬度有預設的half word改為word,否則兩路的adc值會合併成乙個資料 採集 如下 user code begin header starttaskchecktemp uint32 t adc...