STM32CubeIDE開發筆記5 ADC DMA

2021-10-01 22:35:01 字數 1992 閱讀 7227

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...