1. 程式人生 > >STM32 DMA模式ADC多通道採集

STM32 DMA模式ADC多通道採集

ADC取樣基準電壓3.3V    3個通道採集資料

採集資料存放位置

ADC_ConvertedValue[0]

ADC_ConvertedValue[1]

ADC_ConvertedValue[2]

三個值對應ADC三個通道採集出來的值

實際電壓為 = 取樣值*基準電壓/4095

但是實際使用過程中如果電壓過大 可以分壓 之後傳給ADC 這時計算實際電壓時也要乘以分壓時的倍數   基準電壓要穩定 不穩定的時候會出現計算誤差。

ADC多通道採集時,採集轉換之後資料會自動賦給我們傳進去的引數ADC_ConvertedValue,然後進行下一個通道或者下一次的資料採集轉換。

採集週期太快會出現採集資料失敗的情況,所以在不影響使用的情況下ADC取樣週期加長一點(ADC_SAMPLETIME_160CYCLES_5)

採集資料儘量多一點 做一下資料處理  比如:平均值求法

STM32L051c8T6ADC配置如下:

void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc)

{

  GPIO_InitTypeDef                 GPIO_InitStruct;

  static DMA_HandleTypeDef         DmaHandle;

  /*##-1- 開啟時鐘#################################*/

  /* Enable GPIO clock ****************************************/

  __HAL_RCC_GPIOA_CLK_ENABLE();

  __HAL_RCC_GPIOB_CLK_ENABLE();

  /* ADC1 Periph clock enable */

  __HAL_RCC_ADC1_CLK_ENABLE();

  /* Enable DMA1 clock */

  __HAL_RCC_DMA1_CLK_ENABLE();

  /*##- 2-配置GPIO引腳 #########################################*/

  /* ADC3 Channel8 GPIO pin configuration */

  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_2;

  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;

  GPIO_InitStruct.Pull = GPIO_NOPULL;

  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = GPIO_PIN_1;

   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  /*##- 3- Configure DMA #####################################################*/

  /*********************** 配置DMA引數***************************/

  DmaHandle.Instance                = DMA1_Channel1;   DMA通道1

  DmaHandle.Init.Direction           = DMA_PERIPH_TO_MEMORY;

  DmaHandle.Init.PeriphInc           = DMA_PINC_DISABLE;

  DmaHandle.Init.MemInc              = DMA_MINC_ENABLE;

  DmaHandle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;

  DmaHandle.Init.MemDataAlignment    = DMA_MDATAALIGN_WORD;

  DmaHandle.Init.Mode                = DMA_CIRCULAR;

  DmaHandle.Init.Priority            = DMA_PRIORITY_MEDIUM;

  DmaHandle.Init.Request             = DMA_REQUEST_0;

  /* 初始化新的DMA傳輸工具 */

  HAL_DMA_DeInit(&DmaHandle);  

  HAL_DMA_Init(&DmaHandle);

  /* 關聯DMA控制代碼 */

  __HAL_LINKDMA(hadc, DMA_Handle, DmaHandle);

  /* NVIC配置DMA輸入資料中斷 */

  HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 1, 0);

  HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);

}

void ADC_init(void)

{

/* ### - 1 -ADC外部初始化 #################################### */

AdcHandle.Instance = ADC1;           

AdcHandle.Init.OversamplingMode    = DISABLE; //過取樣特性失能

AdcHandle.Init.ClockPrescaler        = ADC_CLOCK_SYNC_PCLK_DIV4;//ADC時鐘源選擇

AdcHandle.Init.LowPowerAutoPowerOff  = DISABLE;

AdcHandle.Init.LowPowerFrequencyMode = ENABLE;

AdcHandle.Init.LowPowerAutoWait      = DISABLE;

AdcHandle.Init.Resolution            = ADC_RESOLUTION_12B;   //12位ADC取樣值

AdcHandle.Init.SamplingTime     = ADC_SAMPLETIME_160CYCLES_5;  //ADC取樣時間

AdcHandle.Init.ScanConvMode          = ADC_SCAN_ENABLE;//

AdcHandle.Init.DataAlign             = ADC_DATAALIGN_RIGHT;

AdcHandle.Init.ContinuousConvMode    = ENABLE;

AdcHandle.Init.DiscontinuousConvMode = DISABLE;

AdcHandle.Init.ExternalTrigConvEdge  = ADC_EXTERNALTRIGCONVEDGE_NONE;

AdcHandle.Init.EOCSelection          = ADC_EOC_SINGLE_CONV;

AdcHandle.Init.DMAContinuousRequests = ENABLE;    //連續轉換使能

HAL_ADC_Init(&AdcHandle) ;

//2ADC 校準 使用之前儘量校準

HAL_ADCEx_Calibration_Start(&AdcHandle, ADC_SINGLE_ENDED);

  /* ### - 3 - ADC通道初始化 ######################################## *

sConfig.Channel = ADC_CHANNEL_0;  //ADC通道

sConfig.Rank = 1;   //轉換次序編號

HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);

sConfig.Channel = ADC_CHANNEL_2;

sConfig.Rank = 2;   

HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);

sConfig.Channel = ADC_CHANNEL_9;

sConfig.Rank = 3;   

HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);  

HAL_ADC_Start_DMA(&AdcHandle,ADC_ConvertedValue, 3) ; //ADC取樣開啟

//ADC_ConvertedValue存放ADC取樣的值

}

使用是什麼時候用到取樣值就直接獲取ADC_ConvertedValue數組裡面的值。

相關推薦

STM32 DMA模式ADC通道採集

ADC取樣基準電壓3.3V    3個通道採集資料 採集資料存放位置 ADC_ConvertedValue[0] ADC_ConvertedValue[1] ADC_ConvertedValue[2] 三個值對應ADC三個通道採集出來的值 實際電壓為 = 取樣值*

STM32F4 adc+dma通道採集

這裡使用STM32F407實現adc的多通道採集,使用的感測器為灰度感測器與紅外感測器,在面放出程式碼,具體的解釋在註釋中都寫的很詳細。 感測器的IO口配置 void DMA_GPIO_config() { GPIO_InitTypeDef GPIO_InitSt

STM32F10X ADC通道讀取小教程(包含DMA

有 18 個通道,可測量 16 個外部和 2 個內部訊號源。各通道的 A/D 轉換可以單次、連續、掃描或間斷模式執行 ;ADC的結果可以左對齊或右對齊方式儲存在 16 位資料暫存器中 ;模擬看門狗特性允許應用程式檢測輸入電壓是否超出使用者定義的高 / 低閾值。

STM32ADC通道採集模擬量

前言: 最近在除錯STM32L152晶片ADC單通道採集資料程式,總結下STM32L152晶片ADC單通道採集模擬量的使用方法。 硬體平臺:STM32L152 軟體平臺:keil v5+cubeMX 函式庫:HAL庫 ADC配置過程: 1.先初始化ADC的管腳,本

ADC通道逐次轉換(不用DMA

之前看到一篇文章【】原博主用的是規則組間斷模式,但是我參考他的例程自己讀取出來的結果每次都只有最後一通道的值,原因暫時不明。 因為我用的通道不多,就用了一個比較笨的方法。 ADC配置如下: RCC_APB2PeriphClockCmd(RCC_APB2Periph_

STM32F0 中 ADC 通道轉換結果相同的問題

type 前段時間 isp external res lin version splay flag 前言 前段時間調試 STM32F030 的 ADC,在多通道轉換時遇到了奇怪的問題,使用官方的例程和庫函數連續轉換多個 ADC 通道,得到的幾個通道的結果是一樣的,解決辦法參

STM32 通道ADC採集詳解(DMA模式和非DMA模式

ADC相關問題: 1.採集到的值如何轉化計算?   在STM32系列晶片大都是12位只有少部分是16位的,如:F373晶片。   12位解析度意味著我們採集電壓的精度可以達到:Vref / 4096。    採集電壓= Vref * ADC_DR / 4096;  

stm32 通道ADC+DMA採集

/******************************************************************* ** Variables Definitions ** **********************************

STM32——通道ADCDMA方式採集方法

前言: 最近在除錯STM32F205晶片ADC多通道DMA方式採集資料,總結下STM32多通道ADC的DMA方式採集的使用方法。 硬體平臺:STM32F205 軟體平臺:keil v5 函式庫:標準庫 多通道ADC的配置 #define Ch

STM32通過DMA採集通道AD

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

STM32F1xx 系列 通道ADC DMA採集與非DMA採集

ADC 多通道 DMA 採集 #include "ADcx.h" #include <stdio.h> #include "stm32f10x.h" #include "stm32f10x_rcc.h" #include "stm32f10x_adc.h" #inclu

STM32 ADC通道通道_DMA學習筆記

#include "stm32f10x.h"//這個標頭檔案包括STM32F10x所有外圍暫存器、位、記憶體映 射的定義#include "eval.h" //標頭檔案(包括串列埠、按鍵、LED的函式宣告)#include "SysTickDelay.h" #include "UART_INTERFACE.h

stm32 TIM1PWM通道捕獲模式測速

因為一個專案的要求,需要測速,之前就想學一下stm32的捕獲模式了,借這個機會,剛好利用一下,現在分享出來。 硬體: MCU:stm32f103zet6 平臺:航太電子流行7號智慧小車 顯示:mini12864 軟體: 語言:C語言 IDE:keil5 測速部分環境是典

STM32ADC取樣與通道ADC取樣

一 單通道取樣 參考資料: 《STM32庫開發實戰指南》 劉火良,楊森著 原理性質的東西還是少講,因為上面那本書裡面講解的很詳細了,直接來看硬體電路圖 這裡使用的是3362電位器(10K),即用STM32來測量PB0和GND兩端的電壓,這樣的電路設

新唐N76E003AT20 通道ADC採集方法

    不得不說N76E003的功能在8051核心微控制器中功能已經是非常強大了,並且官方開提供了BSP 開發庫,這些都是可以直接在官網中直接找到的。對於N76E003的ADC,因為作者沒有用過很早之前的版本,作者使用的時候官方已經提供了VBG反推VDD的例程,但是這種做法還

STM32待機模式Standby Mode與ADC DMA模式測試備忘

1)STM32執行十秒後自動進入待機,使用WakeUp引腳喚醒CPU後,重複以上動作。 int main(void) { time_cnt = 0; HAL_Init(); SystemClock_Config(); HAL_GPIO_

STM32F407的ADCDMA通道+溫度

這裡是在上一章中加上了溫度 上圖是溫度計算公式:其中Vsense為採集到溫度通道的ADC值   stm32f407溫度通道是ADC1的16通道。 Avg_Slope一般取0.0025 和上一張比主要是該了下的內容: 1、增加ADC_TempSensorVrefintC

stm32之TIM+ADC+DMA采集50HZ交流信號

eba bsp 軟件 tco 輸入 工作方式 int32 rest ext http://cache.baiducontent.com/c?m=9d78d513d98207f04fece47f0d01d7174a02d1743ca6c76409c3e03984145b563

STM32的DS18B20單總線上掛載採集

DS18B20中文資料手冊及程式程式碼下載連結: https://pan.baidu.com/s/1IHSgMN9AQzW3L7jO3_PKlA 提取碼:yhki   DS18B20單總線上多路採集的關鍵在於讀取ROM指令,通過ROM指令讀取指定的DS18B20溫度。

通道高速採集卡 高速採集卡 高速採集記錄 射頻資訊採集

多通道寬頻訊號高速資料採集記錄儲存系統基於高效能PCI EXPRESS及SRIO協議,實現標準化、 模組化、可擴充套件、可重構的高速資料採集記錄儲存處理平臺。採用高效能的ADC、DAC和超大 容量固態FLASH及高速海量磁碟陣列儲存,廣泛適用於軍用、民用領域的機