天天看點

STM32Cubemx——ADC采集+DMA傳輸一、準備工具二、前置知識2.STM32Cubemx配置3.Keil編寫代碼工程下載下傳位址

文章目錄

  • 一、準備工具
  • 二、前置知識
    • 1.ADC簡介
    • 2.DMA簡介
  • 2.STM32Cubemx配置
    • 1.建立工程
    • 2.時鐘源選擇及時鐘樹配置
    • 3.時基選擇調試接口選擇
    • 4.配置ADC采集
      • 1.選擇要配置為ADC采集的引腳
      • 2.開啟DMA傳輸,循環模式
      • 3.選擇分辨率,使能ADC持續轉換,DMA持續請求
      • 4.選擇觸發源
    • 5.生成工程
  • 3.Keil編寫代碼
    • 4.燒錄觀察
  • 工程下載下傳位址

一、準備工具

STM32F407VE核心闆

STM32Cubemx 版本 6.0.1

Keil 版本 5.31

杜邦線

ST-Link

二、前置知識

1.ADC簡介

12 位 ADC 是逐次趨近型模數轉換器。它具有多達 19 個複用通道,可測量來自 16 個外部源、兩個内部源和 VBAT 通道的信号。這些通道的 A/D 轉換可在單次、連續、掃描或不連續采樣模式下進行。ADC 的結果存儲在一個左對齊或右對齊的 16 位資料寄存器中。

ADC采集通道分為兩組,規則轉換和注入轉換,每個組包含一個轉換序列, 該序列可按任意順序在任意通道上完成,可了解為注入轉換的優先級比規則轉換高。本節隻使用一個ADC通道,使用規則通道。

2.DMA簡介

直接存儲器通路 (DMA) 用于在外設與存儲器之間以及存儲器與存儲器之間提供高速資料傳輸。可以在無需任何 CPU 操作的情況下通過 DMA 快速移動資料。這樣節省的 CPU 資源可供其它操作使用。DMA 控制器基于複雜的總線矩陣架構,将功能強大的雙 AHB 主總線架構與獨立的 FIFO 結合在一起,優化了系統帶寬。兩個DMA 控制器總共有 16 個資料流(每個控制器 8 個),每一個 DMA 控制器都用于管理一個或多個外設的存儲器通路請求。每個資料流總共可以有多達 8 個通道(或稱請求)。每個通道都有一個仲裁器,用于處理 DMA 請求間的優先級。

2.STM32Cubemx配置

1.建立工程

STM32Cubemx——ADC采集+DMA傳輸一、準備工具二、前置知識2.STM32Cubemx配置3.Keil編寫代碼工程下載下傳位址

選擇相應單片機型号

2.時鐘源選擇及時鐘樹配置

STM32Cubemx——ADC采集+DMA傳輸一、準備工具二、前置知識2.STM32Cubemx配置3.Keil編寫代碼工程下載下傳位址
STM32Cubemx——ADC采集+DMA傳輸一、準備工具二、前置知識2.STM32Cubemx配置3.Keil編寫代碼工程下載下傳位址

3.時基選擇調試接口選擇

STM32Cubemx——ADC采集+DMA傳輸一、準備工具二、前置知識2.STM32Cubemx配置3.Keil編寫代碼工程下載下傳位址

4.配置ADC采集

1.選擇要配置為ADC采集的引腳

STM32Cubemx——ADC采集+DMA傳輸一、準備工具二、前置知識2.STM32Cubemx配置3.Keil編寫代碼工程下載下傳位址

2.開啟DMA傳輸,循環模式

STM32Cubemx——ADC采集+DMA傳輸一、準備工具二、前置知識2.STM32Cubemx配置3.Keil編寫代碼工程下載下傳位址

3.選擇分辨率,使能ADC持續轉換,DMA持續請求

當然分辨率越高,轉換所需時間就越長

STM32Cubemx——ADC采集+DMA傳輸一、準備工具二、前置知識2.STM32Cubemx配置3.Keil編寫代碼工程下載下傳位址

4.選擇觸發源

STM32Cubemx——ADC采集+DMA傳輸一、準備工具二、前置知識2.STM32Cubemx配置3.Keil編寫代碼工程下載下傳位址

在此我選擇了軟體觸發,也可以使用定時器的PWM信号來觸發,可以使采集間隔時間固定,可用來分析信号波形,幅頻特性等。

5.生成工程

STM32Cubemx——ADC采集+DMA傳輸一、準備工具二、前置知識2.STM32Cubemx配置3.Keil編寫代碼工程下載下傳位址
STM32Cubemx——ADC采集+DMA傳輸一、準備工具二、前置知識2.STM32Cubemx配置3.Keil編寫代碼工程下載下傳位址

生成并打開工程。

3.Keil編寫代碼

/* USER CODE BEGIN PV */
uint16_t ADC_Value[100]={0};  
uint32_t Value=0;   //存儲平均值
float V=0;      //存儲電壓值
/* USER CODE END PV */
           

為提高準确度,定義數組,取平均值做為測量值

/* USER CODE BEGIN 2 */
   HAL_ADC_Start_DMA(&hadc1,(uint32_t *)ADC_Value,100);
  /* USER CODE END 2 */
           

在初始化後開啟DMA傳輸,ADC開始轉換

while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
         
          for(int i=0;i<100;i++)
          Value+=ADC_Value[i];//求和
          Value/=100;  //取平均值
          V=Value*3300/4096;  //ADC最大值為4096,代表3300mV
          HAL_Delay(10);
  }
  /* USER CODE END 3 */
}

           

主循環内對采集資料求平均,并計算出實際電壓。

4.燒錄觀察

燒錄代碼後,通過調試觀察V變量,可以測量0-3.3V電壓(機關mV),如果需要測量更大範圍,需要加外圍電路,将電壓規整到0-3.3V内。

工程下載下傳位址

連結:https://pan.baidu.com/s/1IU4tsS8mzrc5AzWH7XbfhA

提取碼:csa1

繼續閱讀