stm32cubemx 單通道adc采集 dma版
- 開發環境
- stm32cubemx配置
- 代碼實作
開發環境
單片機:stm32f103c8t6
軟體:stm32cubemx,keil
其餘的時鐘等操作與其他一緻.
stm32cubemx配置
勾選adc1,随便勾一個引腳,開連續模式,将采樣時間拉到最大
選擇adc1的dma
循環模式,位址自動增加,位元組大小,half word 即每次增16位
勾個序列槽
工程其餘配置一緻
代碼實作
建立DMA的緩存區
在外設初始化後
進行adc校準,以及開啟dma,因為是循環模式,是以會一直采樣。
其中因為adc_buf是16位,緩存區位32位,是以采樣數為2
HAL_Delay(1000);
HAL_ADCEx_Calibration_Start(&hadc1);
HAL_ADC_Start_DMA(&hadc1, (uint32_t*) adc_buf, 2); //通道數1
隻采一次可以在stm32cubemx中配置成normal模式
多次采樣需要加緩存區和采樣次數
循環中實作資料轉換和列印
adc_buf[0]=adc_buf[0]*3300/4096;
adc_buf[1]=adc_buf[1]*3300/4096;
//printf("ADC1 = %d,ADC2 = %d\r\n",adc_buf[0],adc_buf[1]);
//printf("voltage: %f \r\n, (float)adc_buf[0]/4096*3.3");
HAL_Delay(1000);
列印看這點這裡
date:2021.5.24
author:dawn_z