天天看點

stm32cubemx 單通道adc采集 dma版開發環境stm32cubemx配置代碼實作

stm32cubemx 單通道adc采集 dma版

  • 開發環境
  • stm32cubemx配置
  • 代碼實作

開發環境

單片機:stm32f103c8t6

軟體:stm32cubemx,keil

其餘的時鐘等操作與其他一緻.

stm32cubemx配置

勾選adc1,随便勾一個引腳,開連續模式,将采樣時間拉到最大

stm32cubemx 單通道adc采集 dma版開發環境stm32cubemx配置代碼實作

選擇adc1的dma

stm32cubemx 單通道adc采集 dma版開發環境stm32cubemx配置代碼實作

循環模式,位址自動增加,位元組大小,half word 即每次增16位

stm32cubemx 單通道adc采集 dma版開發環境stm32cubemx配置代碼實作

勾個序列槽

stm32cubemx 單通道adc采集 dma版開發環境stm32cubemx配置代碼實作

工程其餘配置一緻

代碼實作

建立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

繼續閱讀