国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【STM32+HAL+Proteus】系列學習教程---ADC(查詢、中斷、DMA模式下的電壓采集)

這篇具有很好參考價值的文章主要介紹了【STM32+HAL+Proteus】系列學習教程---ADC(查詢、中斷、DMA模式下的電壓采集)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

實現目標

1、學會STM32CubeMX軟件關于ADC的配置

2、掌握ADC三種模式(查詢、中斷、DMA)編程

3、具體目標:1、將開發(fā)板單片機采集到的電壓值上傳至上位機串口調試助手顯示。


一、ADC? 概述

1、什么是ADC?

ADC(Analog to Digital Converter)即模數轉換器,用來將模擬信號轉換為數字信號。

【STM32+HAL+Proteus】系列學習教程---ADC(查詢、中斷、DMA模式下的電壓采集),STM32 應用開發(fā)教程(基礎),stm32,proteus,嵌入式硬件,單片機

A/D轉換過程

分辨率:?A/D轉換器對輸入模擬量微小變化的分辨能力,通常用二進制數的有效位表示。

【STM32+HAL+Proteus】系列學習教程---ADC(查詢、中斷、DMA模式下的電壓采集),STM32 應用開發(fā)教程(基礎),stm32,proteus,嵌入式硬件,單片機

在最大輸入電壓一定時,位數越多,量化單位越小,誤差越小,分辨率越高。

2、STM32F103 的ADC

(1)簡介

????????STM32F103 系列最多有3個ADC控制器(ADC1,ADC2,ADC3),多達18個通道,可測量16個外部和2個內部信號源。各通道的A/D轉換可以單次、連續(xù)掃描或間斷模式執(zhí)行。ADC的結果可以左對齊右對齊方式存儲在16位數據寄存器中。ADC為12位,是一種逐次逼近型模擬數字轉換器。

【STM32+HAL+Proteus】系列學習教程---ADC(查詢、中斷、DMA模式下的電壓采集),STM32 應用開發(fā)教程(基礎),stm32,proteus,嵌入式硬件,單片機

(2)ADC通道與引腳對應關系

【STM32+HAL+Proteus】系列學習教程---ADC(查詢、中斷、DMA模式下的電壓采集),STM32 應用開發(fā)教程(基礎),stm32,proteus,嵌入式硬件,單片機

(3)STM32分為兩種組轉換模式

規(guī)則通道:
????????規(guī)則通道相當于你正常運行的程序,看它的名字就可以知道,很規(guī)矩,就是正常執(zhí)行程序
注入通道:
????????注入通道可以打斷規(guī)則通道,聽它的名字就知道不安分,如果在規(guī)則通道轉換過程中,有注入通道進行轉換,那么就要先轉換完注入通道,等注入通道轉換完成后,再回到規(guī)則通道的轉換流程。

【STM32+HAL+Proteus】系列學習教程---ADC(查詢、中斷、DMA模式下的電壓采集),STM32 應用開發(fā)教程(基礎),stm32,proteus,嵌入式硬件,單片機

(4)ADC配置說明

【STM32+HAL+Proteus】系列學習教程---ADC(查詢、中斷、DMA模式下的電壓采集),STM32 應用開發(fā)教程(基礎),stm32,proteus,嵌入式硬件,單片機

配置選項說明:

模式設置

1、ADCs_Common_Settings??DC模式設置

?ADC_Mode_Independent? ? ??獨立模式

????????獨立模式模式下,雙ADC不能同步,每個ADC接口獨立工作。所以如果不需要ADC同步或者只是用了一個ADC的時候,應該設成獨立模式,多個ADC同時使用時會有其他模式,如雙重ADC同步模式,兩個ADC同時采集一個或多個通道,可以提高采樣率

ADC常規(guī)設置

1、Data Alignment?(數據對齊方式): 右對齊/左對齊

2、Scan Conversion Mode( 掃描模式 )?:

如果只是用了一個通道的話,DISABLE,果使用了多個通道的話,會自動設置為ENABLE。

3、Continuous Conversion Mode(連續(xù)轉換模式)?:

????????設置為ENABLE,即連續(xù)轉換。如果設置為DISABLE,則是單次轉換。兩者的區(qū)別在于連續(xù)轉換直到所有的數據轉換完成后才停止轉換,而單次轉換則只轉換一次數據就停止,要再次觸發(fā)轉換才可以進行轉換。

4、Discontinuous Conversion Mode(間斷模式)?

這里只用到了1個ADC,所以這個直接不使能即可。

規(guī)則通道設置

1、Enable Regular Conversions (啟用常規(guī)轉換模式)??? ENABLE

使能 否則無發(fā)進行下方配置

2、Number OF Conversion(轉換通道數)??? 1
用到幾個通道就設置為幾,多個通道會自動使能掃描模式

3、Extenal Trigger Conversion Source (外部觸發(fā)轉換源)

默認采用:Regular Conversion launched by software?規(guī)則的軟件觸發(fā)?調用函數觸發(fā)即可

Rank?轉換順序

1、多個通道時會有多個Rank,可以設定每個通道的轉換順序。

2、ADC總轉換時間如下計算:

TCONV = 采樣時間+ 12.5個周期? ?其中1周期為1/ADCCLK

????????為了保證ADC轉換結果的準確性,ADC的時鐘最好不超過14M。當ADCCLK=14MHz(最大),采樣時間為1.5周期(最快)時,TCONV =1.5+12.5=14周期=1μs。STM32的ADC最大的轉換速率為1MHz,也就是說最快轉換時間為1us,

注入通道設置

1、注入通道的設置,和規(guī)則通道設置差不多。

WahchDog

1、當ADC轉換的模擬電壓值低于低閾值或高于高閾值時,便會產生中斷。閾值的高低值由ADC_LTR和ADC_HTR配置模擬看門狗。

(5)ADC的三種工作模式

1)阻塞模式(也叫查詢模式);2)中斷模式;3) DMA 模式

二、原理圖設計

【STM32+HAL+Proteus】系列學習教程---ADC(查詢、中斷、DMA模式下的電壓采集),STM32 應用開發(fā)教程(基礎),stm32,proteus,嵌入式硬件,單片機

三、STM32CubeMX 配置串口重定向(printf)

此項目利用printf 打印ADC采樣值,先對USART1重定向,詳細教程參考前面的教程:

https://blog.csdn.net/luojuan198780/article/details/138044075

【STM32+HAL+Proteus】系列學習教程---ADC(查詢、中斷、DMA模式下的電壓采集),STM32 應用開發(fā)教程(基礎),stm32,proteus,嵌入式硬件,單片機

代碼設計:

/* USER CODE BEGIN Includes */
 
#include <stdio.h>
 
/* USER CODE END Includes */
/* USER CODE BEGIN 4 */
 
/*********************************************************
*
*重定義 fputc 函數
*
*********************************************************/
int fputc(int ch,FILE *f)
{
	HAL_UART_Transmit (&huart1 ,(uint8_t *)&ch,1,HAL_MAX_DELAY );
	return ch;
}
/* USER CODE END 4 */

四、STM32CubeMX 配置及程序設計(單通道)

1.阻塞模式(查詢模式)

1.1CubeMX 配置 (單通道輪詢)

【STM32+HAL+Proteus】系列學習教程---ADC(查詢、中斷、DMA模式下的電壓采集),STM32 應用開發(fā)教程(基礎),stm32,proteus,嵌入式硬件,單片機

配置:打開通道8,其他默認

1.2 程序設計

Step1 : 啟用ADC
Step2 :? ?等待EOC標志位
Step3: 讀取寄存器的數據 、<-- 查詢環(huán)節(jié)
缺點:占用cpu的使用率

主要函數:
HAL_StatusTypeDef? HAL_ADC_Start (ADC_HandleTypeDefhadc); //打開ADC的轉換通道
HAL_StatusTypeDef? HAL_ADC_Stop (ADC_HandleTypeDefhadc) //關閉ADC
HAL_StatusTypeDef? HAL_ADC_PollForConversion (ADC_HandleTypeDef*hadc,uint32_t Timeout); // 查詢函數

(1)在main.c中定義一個全局變量

uint16_t ADC_Value;

(2)在main 初始化中開啟ADC校準

HAL_ADCEx_Calibration_Start(&hadc1);    //AD校準

(3)在while 中編寫ADC控制程序

 HAL_ADC_Start(&hadc1);     //啟動ADC轉換
 HAL_ADC_PollForConversion(&hadc1, 50);   //等待轉換完成,50為最大等待時間,單位為ms
 
 
 if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))
 {
      ADC_Value = HAL_ADC_GetValue(&hadc1);   //獲取AD值
      printf("ADC值: %d \r\n",ADC_Value);
      printf("采樣電壓 : %.2f V\r\n",ADC_Value*3.3f/4096);

}
HAL_Delay(1000);

2.中斷模式(單通道)

2.1CubeMX 配置

【STM32+HAL+Proteus】系列學習教程---ADC(查詢、中斷、DMA模式下的電壓采集),STM32 應用開發(fā)教程(基礎),stm32,proteus,嵌入式硬件,單片機

配置:其打開ADC中斷。他與查詢模式一樣,

2.2 程序設計

Step1 : 啟用ADC,使能中斷
Step2 :? ?等待EOC自動觸發(fā)中斷
Step3: 在中斷中讀取寄存器的數據
主要函數
HAL_StatusTypeDef?HAL_ADC_Start_IT (ADC_HandleTypeDefhadc) //使能ADC,打開中斷標志位
HAL_StatusTypeDef HAL_ADC_Stop——IT (ADC_HandleTypeDefhadc)
HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)//回調函數

?(1)在main.c中定義一個全局變量

uint16_t ADC_Value;

(2)在main函數中開啟ADC中斷

HAL_ADC_Start_IT(&hadc1);

(3)編寫中斷回調函數

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)//回調函數
{
	 ADC_Value =  HAL_ADC_GetValue(&hadc1) * 3.3 /4096;
     printf("采樣電壓 : %.2f V\r\n",ADC_Value );
}

3.DMA 模式(單通道)

DMA 有兩種模式,分別為循環(huán)模式circular和正常模式normal
circular模式:DMA 的circular模式只需要調用一次DMA 開啟函數,DMA 就會持續(xù)的搬運數據,提高了數據的刷新速度,但是在circular模式下,不管ADC新的一輪數據采集是否完成,有可能直接將舊數據搬運走.
normal模式:該模式下,DMA 啟動函數調用一次,DMA 通道只會搬運一次數據,這樣每調一次DMA 啟動函數,DMA 只會搬運一次數據,等待數據傳輸完成后再次開啟DMA 啟動函數,這樣更能保證ADC數據采集的可靠性.

3.1CubeMX 配置(circular模式)

【STM32+HAL+Proteus】系列學習教程---ADC(查詢、中斷、DMA模式下的電壓采集),STM32 應用開發(fā)教程(基礎),stm32,proteus,嵌入式硬件,單片機

配置1:開啟連續(xù)轉換

【STM32+HAL+Proteus】系列學習教程---ADC(查詢、中斷、DMA模式下的電壓采集),STM32 應用開發(fā)教程(基礎),stm32,proteus,嵌入式硬件,單片機

配置2:添加DMA,模式選擇為循環(huán)模式circular

3.1?程序設計

(1)在main.c中定義一個全局變量

 uint16_t ADC_Value=0;

(2)在main函數中開啟ADC的?DMA

 HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&AD_value,sizeof(AD_value));

(3)在while 中編寫ADC控制程序

      printf("ADC值: %d \r\n",ADC_Value);
      printf("采樣電壓 : %.2f V\r\n",ADC_Value*3.3f/4096);
      HAL_Delay(100);

五、STM32CubeMX 配置及程序設計(多通道)

1.阻塞模式(多通道)

1.1CubeMX 配置?

【STM32+HAL+Proteus】系列學習教程---ADC(查詢、中斷、DMA模式下的電壓采集),STM32 應用開發(fā)教程(基礎),stm32,proteus,嵌入式硬件,單片機

多個通道時必須開啟間斷模式,并且每個間斷組中只有一個通道,否則每次只能讀取到每組最后一個通道的值。

1.2 程序設計

(1)在main.c中定義一個全局變量

uint16_t AD_value[2]={0};

(2)在while 中編寫ADC控制程序

for(i=0;i<2;i++)
{
    HAL_ADC_Start(&hadc1);
    HAL_ADC_PollForConversion(&hadc1,10);
    AD_value[i]=HAL_ADC_GetValue(&hadc1);
    printf("i= %d;AD_value%d\r\n",i,AD_value[i]);
    printf("i= %d;電壓值 = %.3f v\r\n",i,AD_value[i]*3.3/4096);
}
HAL_Delay(500);

2.中斷模式(多通道)

????????多通道情況下使用中斷來讀取數據理論上是可行的,但是讀取的數據會混淆,即無法確定讀取的數據是屬于哪一個通道的,因此一般不使用。

3.DMA(多通道)

3.1CubeMX 配置?

【STM32+HAL+Proteus】系列學習教程---ADC(查詢、中斷、DMA模式下的電壓采集),STM32 應用開發(fā)教程(基礎),stm32,proteus,嵌入式硬件,單片機

開啟DMA并采用circular模式

【STM32+HAL+Proteus】系列學習教程---ADC(查詢、中斷、DMA模式下的電壓采集),STM32 應用開發(fā)教程(基礎),stm32,proteus,嵌入式硬件,單片機

3.2 程序設計

(1)在main.c中定義變量

/* USER CODE BEGIN 1 */
   uint16_t ADC_Value1,i;
	uint16_t AD_Buf[2]={0};//兩個通道采集數據存在這個數組里面
  /* USER CODE END 1 */

(2)在main函數中開啟ADC的?DMA

//開啟ADC的校準
HAL_ADCEx_Calibration_Start(&hadc1);
//開啟ADC的DMA,采集的數據放入 AD_Buf數組
HAL_ADC_Start_DMA(&hadc1,(uint32_t *)&AD_Buf,2);

(3)在while 中編寫ADC控制程序文章來源地址http://www.zghlxwxcb.cn/news/detail-858603.html

		printf("AD1=%d\n\r",AD_Buf[0]);
        printf("AD2=%d\n\r",AD_Buf[1]);
		HAL_Delay(100);

總結

到了這里,關于【STM32+HAL+Proteus】系列學習教程---ADC(查詢、中斷、DMA模式下的電壓采集)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【STM32】標準庫與HAL庫對照學習教程十四--CAN總線

    【STM32】標準庫與HAL庫對照學習教程十四--CAN總線

    STM32全部教程 :【STM32】標準庫與HAL庫對照學習系列教程大全 本篇介紹如何使用STM32的標準庫與HAL庫對CAN總線的使用,由于我那塊普中的STM32F103ZET6開發(fā)板送人了,因此我這邊用STM32F103C8最小系統(tǒng)板,進行簡單的演示一下功能,最主要的還是需要理解CAN總線的原理,在本篇中,

    2024年02月15日
    瀏覽(17)
  • stm32——hal庫學習筆記(ADC)

    stm32——hal庫學習筆記(ADC)

    ADC,全稱:Analog-to-Digital Converter,指模擬/數字轉換器 優(yōu)點:轉換速度快 缺點:成本高、功耗高、分辨率低 優(yōu)點:結構簡單、低功耗 缺點:轉換速度較慢 特點: 分辨率和采樣速度相互矛盾, 分辨率越高,采樣速率越低 ①參考電壓/模擬部分電壓 ②輸入通道 ③轉換序列 ④觸

    2024年02月22日
    瀏覽(20)
  • Proteus使用STM32F103系列芯片仿真ADC電壓總是為0問題解答

    Proteus使用STM32F103系列芯片仿真ADC電壓總是為0問題解答

    STM32F103芯片有一組ADC參考電壓端口 ?對應到Proteus中,發(fā)現原理圖上并沒有但是在“配置供電網”中存在 可以看出,VSSA與VDDA同為3.3V,這就導致采集到的電壓沒有0電位參考,所以需要將 VSSA 轉移到 GND 組 ? 此時再允許正確的ADC程序就可以采集到正確的電壓了 ? ? ?

    2024年02月13日
    瀏覽(21)
  • 基于STM32的ADC采樣及各式濾波實現(HAL庫,含VOFA+教程)

    基于STM32的ADC采樣及各式濾波實現(HAL庫,含VOFA+教程)

    ? ? ? ? 前言: 本文為手把手教學 ADC采樣 及 各式濾波算法 的教程,本教程的 MCU 采用 STM32F103ZET6 。以 HAL庫 的 ADC采樣 函數為基礎進行教學,通過各式 常見濾波 的實驗結果進行分析對比,搭配 VOFA+工具 直觀的展示濾波效果。 ADC 與 濾波算法 都是嵌入式較為常見的,希望這

    2024年02月03日
    瀏覽(18)
  • 基于STM32的ADC采樣及各式濾波實現(HAL庫,含VOFA+教程)_數據采集濾波算法stm32(3)

    基于STM32的ADC采樣及各式濾波實現(HAL庫,含VOFA+教程)_數據采集濾波算法stm32(3)

    2.2 VOFA+使用方法 VOFA+ 的數據協議引擎有 3種 : FireWater , JustFloat , RawData 。每種數據協議引擎都有自己特殊的使用效果,讀者朋友可以根據自己的實際需要去選擇使用。作者這里主要給大家演示一下 FireWater協議 下的VOFA+使用效果和方法。 FireWater協議 是 CSV風格 的字符串流,

    2024年04月23日
    瀏覽(23)
  • 學習筆記|ADC|NTC原理|測溫程序|STC32G單片機視頻開發(fā)教程(沖哥)|第十九集:ADC應用之NTC

    學習筆記|ADC|NTC原理|測溫程序|STC32G單片機視頻開發(fā)教程(沖哥)|第十九集:ADC應用之NTC

    NTC(Negative Temperature Coefficient)是指隨溫度上升電阻呈指數關系減小、具有負溫度系數的熱敏電阻現象和材料。該材料是利用錳、銅、硅、鈷、鐵、鎳、鋅等兩種或兩種以上的金屬氧化物進行充分混合、成型、燒結等工藝而成的半導體陶瓷,可制成具有負溫度系數(NTC)的熱

    2024年02月07日
    瀏覽(31)
  • STM32野火教程學習筆記

    STM32野火教程學習筆記

    雖然經歷了疫情期間的價格起飛,但是STM32系列的單片機仍然是各個控制領域內主流的微控制器。它是控制人的必修課之一。 我們在學習51單片機的時候,通常是通過編寫程序直接對其輸入輸出(i/o)口進行操作。而STM32單片機更加高級,它有更復雜的底層。因此我們對STM32單

    2024年02月06日
    瀏覽(25)
  • STM32學習·HAL庫·STM32CubeMX系列學習(安裝和使用)

    STM32學習·HAL庫·STM32CubeMX系列學習(安裝和使用)

    目錄 ?編輯 1.? STM32CubeMX簡介 2.??STM32CubeMX安裝 2.1??STM32CubeMX軟件獲取 2.1.1? 獲取Java軟件 2.1.2??STM32CubeMX軟件獲取 2.2? 搭建Java運行環(huán)境 2.3? 安裝STM32CubeMX軟件 2.4? 下載和關聯STM32cube固件包 ????????STM32CubeMX 是 ST 微電子公司推出的一款圖形化配置工具,用于快速啟動

    2024年02月19日
    瀏覽(19)
  • 學習筆記|ADC反推電源電壓|掃描按鍵(長按循環(huán)觸發(fā))|課設級實戰(zhàn)練習|STC32G單片機視頻開發(fā)教程(沖哥)|第十八集:ADC實戰(zhàn)

    學習筆記|ADC反推電源電壓|掃描按鍵(長按循環(huán)觸發(fā))|課設級實戰(zhàn)練習|STC32G單片機視頻開發(fā)教程(沖哥)|第十八集:ADC實戰(zhàn)

    19.5.4 利用ADC第15通道(內部1.19V參考信號源)測量外部電壓或電池電壓 注意:這里的1.19V不是ADC 的基準電壓ADC-Vref+,而是ADC15通道的固定輸入信號源,1.19V STC32G系列ADC的第15通道用于測量內部參考信號源,由于內部參考信號源很穩(wěn)定,約為1.19V,且不會隨芯片的工作電壓的改變而變化

    2024年02月07日
    瀏覽(28)
  • STM32 HAL庫 STM32CubeMX -- ADC

    STM32 HAL庫 STM32CubeMX -- ADC

    ADC(Analog-to-Digital Converter)指模/數轉換器或者模擬/數字轉換器。 是指將連續(xù)變量的模擬信號轉換為離散的數字信號的器件。 也就是將 模擬信號 轉化為 數字信號 。 STM32f103 系列有3 個ADC,精度為12 位,每個ADC 最多有16 個外部通道和2個內部信號源。其中ADC1 和ADC2 都有16 個外部

    2024年02月15日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包