【GD32】02-ADC模擬數字轉換器

ADC

在電子和通信技術中,ADC(模擬數字轉換器)是一種將模擬信號轉換為數字信號的電子設備。這種轉換是電子系統中非常關鍵的一個環節,因為數字信號更易于處理、存儲和傳輸。ADC的工作原理通常包括采樣、保持、量化和編碼等步驟。采樣是從模擬信號中提取離散的值,保持是確保在采樣期間信號值不變,量化是將采樣值轉換為最接近的數字值,而編碼則是將這些數字值表示為二進制代碼。ADC的性能指標包括分辨率、轉換速率和精度等。

ADC在多個領域都有廣泛的應用。在通信領域,ADC用于將模擬信號(如語音信號)轉換為數字信號,以便在無線通信、有線通信和光纖通信系統中進行傳輸。在醫療領域,ADC用于將生物信號(如心電圖和腦電圖)轉換為數字信號,以便于進行醫學分析和診斷。此外,在汽車領域,ADC用于檢測傳感器信號,如發動機轉速、車速和油位等,以實現對汽車系統的精確控制。

?以上介紹來自文心一言。

GD32E230C8T6中的ADC

GD32E230C8T6只有一個ADC,但是可以用的外部通道有10個,還是夠用的。

那么我們需要看看ADC的不同通道對應著哪些GPIO。

可用的GPIO是GPIOA的0號引腳到7號引腳,以及GPIOB的0和1號引腳。

接下來我們來看看怎么使用ADC。

固件庫函數

在介紹ADC相關固件庫之前我們需要先打開外設時鐘。?

    rcu_periph_clock_enable(RCU_ADC);

還需要指定一下ADC的時鐘。

rcu_adc_clock_config

可以選擇的選項在上面表格中。關于如何選擇,我們還需要看看GD32E230的時鐘樹。

由于ADC最大只能28MHz,因此配置的時鐘頻率不能大于28MHz。

ADC相關的固件庫函數很多,我這邊就挑著講。

adc_enable

無需參數,調用即可使能ADC外設。

當然了,這個函數我們需要等ADC配置完再調用,可以參考STM32的ADC。這邊先講是因為我按照固件庫使用指南的順序說的,函數具體調用的時機可以參考我最后的示例代碼。

adc_disable

有使能就有失能。調用之后就相當于關閉了ADC外設。

adc_calibration_enable

開啟ADC校準復位。也就是讓ADC開始校準,在STM32中也有類似的做法,不過在GD32的固件庫中我們只需要調用這個函數即可。

adc_channel_length_config

配置通道組的長度,一般來說都是用的規則組(ADC_REGULAR_CHANNEL),我們一共用到幾個ADC通道,我們第二個參數就填幾。

adc_regular_channel_config

設置規則組,設置rank也就是通道序列,還有ADC的通道,一般來說通道幾我們的rank也就是幾。還有就是采樣時間,可供選擇的參數可以參考上表,采樣周期越長,采樣結果越精確,按照實際需求配置就行。

adc_external_trigger_config

配置ADC外部觸發。我們選擇規則組和使能。

這個函數描述會有點歧義,我們ADC一般是由軟件觸發的,實際上軟件觸發也屬于外部觸發的一種,這邊外部觸發的外部和外部中斷的外部不太一樣。

adc_external_trigger_source_config

選擇外部觸發源,我們選擇軟件觸發。?

adc_software_trigger_enable

開啟軟件轉換。

adc_regular_data_read

讀取規則組的ADC的轉換值,但是我們需要在ADC轉換之后再讀取。

adc_flag_get

獲取ADC的標志位,我們在讀取數據之前需要等待ADC轉換結束,用的就是這個函數。

adc_resolution_config

配置ADC分辨率,可以選6,8,10,12位,一般來說我們就多多益善,選擇12位的分辨率。

adc_special_function_config

開啟ADC特殊功能,我們這邊打開掃描模式。如果有用到DMA的話可以選擇連續模式。

adc_data_alignment_config

選擇數據對齊方式,因為存放ADC轉換結果的寄存器是16位,而我們的分辨率是小于16位的,因此我們需要選擇把這12位的數據靠左放還是靠右放,一般就是右對齊。

示例代碼

我們再梳理一下,首先先調用配置函數,配置函數的順序無所謂,都可以。

然后是使能ADC,接著是校準。

最后是讀取數據,開啟軟件觸發之后我們就等待轉換完畢,轉換結束之后調用函數讀取即可。

#include "gd32e23x.h"
#include "systick.h"
#include <stdio.h>
#include "OLED.h"uint16_t getValue(uint8_t  ADC_CHANNEL_x){adc_regular_channel_config(0, ADC_CHANNEL_x, ADC_SAMPLETIME_239POINT5); //設置采集通道adc_software_trigger_enable(ADC_REGULAR_CHANNEL);                       //開始軟件轉換while ( adc_flag_get(ADC_FLAG_EOC) == RESET ) ;                         //等待 ADC 采樣完成 uint16_t res = adc_regular_data_read();                                 //讀取采樣值return res;
}int main(void){systick_config();       //延時函數初始化OLED_Init();            //OLED初始化rcu_periph_clock_enable(RCU_GPIOA);   //開啟GPIOA的外設時鐘rcu_periph_clock_enable(RCU_ADC);     //開啟ADC的外設時鐘rcu_adc_clock_config(RCU_ADCCK_APB2_DIV4);  //指定ADC的時鐘為5分頻的APB2(72MHz/4)gpio_mode_set(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_0);     //將ADC的對應通道的對應引腳設為模擬輸入adc_special_function_config(ADC_SCAN_MODE, ENABLE);                     //開啟掃描模式adc_external_trigger_config(ADC_REGULAR_CHANNEL,ENABLE);                //開啟規則組外部觸發adc_external_trigger_source_config(ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_NONE);  //配置規則組為軟件觸發adc_regular_channel_config(0, ADC_CHANNEL_0, ADC_SAMPLETIME_239POINT5); //設置規則組通道adc_data_alignment_config(ADC_DATAALIGN_RIGHT);                         //數據右對齊adc_resolution_config(ADC_RESOLUTION_12B);                              //配置分辨率為12位adc_channel_length_config(ADC_REGULAR_CHANNEL, 1);                      //配置規則組長度為1adc_enable();                       //使能ADC    adc_calibration_enable();           //開啟校準uint16_t val;OLED_ShowString(1,1,"Hello World");while(1){val=getValue(ADC_CHANNEL_0);OLED_ShowNum(2,1,val,6);delay_ms(1000);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10870.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10870.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10870.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

http協議 tomcat如何訪問資源 servlet理論介紹

tomcat介紹 bin是啟動命令&#xff1b; conf是配置&#xff0c;可以修改端口號&#xff1b; lib是依賴的jar包&#xff1b; logs是日志 webapps是重點&#xff0c;在這里新建我們自己的javaWeb項目 tomcat如何訪問資源 tomcat通過統一資源定位符&#xff08;URL&#xff09;來…

鄉村振興與農村基礎設施建設:加大農村基礎設施建設投入,提升農村公共服務水平,改善農民生產生活條件,構建宜居宜業的美麗鄉村

一、引言 鄉村振興是我國現代化進程中的重要戰略&#xff0c;而農村基礎設施建設則是鄉村振興的基石。隨著城市化進程的加快&#xff0c;農村基礎設施建設滯后的問題日益凸顯&#xff0c;成為制約鄉村發展的瓶頸。因此&#xff0c;加大農村基礎設施建設投入&#xff0c;提升農…

打造一套在線教育系統,如何在教育這個慢行業打造品牌?

品牌對于教育行業非常重要&#xff0c;很多從事教育行業的朋友一直想塑造屬于自己的品牌形象&#xff0c;但做起來卻沒那么容易。因為教育行業相對來說是一個慢行業&#xff0c;用戶必須看到效果才會認可&#xff0c;而教育的效果往往需要經過長期的學習才能看到。 我覺得&…

AI大模型探索之路-訓練篇21:Llama2微調實戰-LoRA技術微調步驟詳解

系列篇章&#x1f4a5; AI大模型探索之路-訓練篇1&#xff1a;大語言模型微調基礎認知 AI大模型探索之路-訓練篇2&#xff1a;大語言模型預訓練基礎認知 AI大模型探索之路-訓練篇3&#xff1a;大語言模型全景解讀 AI大模型探索之路-訓練篇4&#xff1a;大語言模型訓練數據集概…

華為OD機試 - 執行任務賺積分 - 動態規劃(Java 2024 C卷 100分)

華為OD機試 2024C卷題庫瘋狂收錄中,刷題點這里 專欄導讀 本專欄收錄于《華為OD機試(JAVA)真題(A卷+B卷+C卷)》。 刷的越多,抽中的概率越大,每一題都有詳細的答題思路、詳細的代碼注釋、樣例測試,發現新題目,隨時更新,全天CSDN在線答疑。 一、題目描述 現有 N 個任…

Gradle基礎學習(六) 認識任務Task

理解Gradle中的任務 Gradle的構建過程基于任務&#xff08;Task&#xff09;的概念&#xff0c;而每個任務都可以包含一個或多個動作&#xff08;Action&#xff09;。 任務是構建中執行的一些獨立的工作單元&#xff0c;例如編譯類、創建JAR、生成Javadoc或將存檔發布到倉庫…

4.5網安學習第四階段第五周回顧(個人學習記錄使用)

本周重點 ①部署域環境&#xff08;Win2008&#xff09; ②域組策略 ③域內信息收集 ④(重點)哈希傳遞攻擊PTH ⑤MS14-068 提權漏洞 ⑥黃金票據偽造 ⑦白銀票據偽造 ⑧ZeroLogon (CVE-2020-1472) 漏洞復現 本周主要內容 ①部署域環境&#xff08;Win2008&#xff09;…

【算法】滑動窗口——串聯所有單詞的子串

今天來以“滑動窗口”的思想來詳解一道比較困難的題目——串聯所有單詞的子串&#xff0c;有需要借鑒即可。 目錄 1.題目2.下面是示例代碼3.總結 1.題目 題目鏈接&#xff1a;LINK 這道題如果把每個字符串看成一個字母&#xff0c;就是另外一道中等難度的題目&#xff0c;即&…

對象,字符串的解構賦值

大家想了解更多&#xff0c;可以去看阮一峰的ECMAScript6(ES6)標準入門課程 對象 簡介 解構不僅可以用于數組&#xff0c;還可以用于對象。 let { foo, bar } { foo: aaa, bar: bbb }; foo // "aaa" bar // "bbb" 對象的解構與數組有一個重要的不同。…

[CAM_REQ_MGR_EVENT_MAX]高通6225平臺相機老化異常重啟

報錯log 相機老化出現20/7萬比例的老化異常重啟&#xff0c;具體報錯log入下 <4>[ 167.506585] [1970:01:02 18:52:26](0) [0:swapper/0]cam_v4l2_event_queue_notify_error: 251 callbacks suppressed 7 3339<6>[ 167.506602] [1970:01:02 18:52:26](0) [0:swap…

面試試題一

封裝&#xff08;Encapsulation&#xff09; 面試問題&#xff1a; 封裝在面向對象編程中扮演什么角色&#xff1f;如何在Java中實現封裝&#xff1f;有哪些最佳實踐可以幫助提高類的封裝性&#xff1f; 詳細答案&#xff1a; 封裝的角色&#xff1a; 封裝是面向對象編程的核…

CMake 的繼承關系

1. CMake如何確定繼承關系 在 CMake 中&#xff0c;父子關系是通過文件系統中的目錄結構來定義的。當你在一個目錄中創建一個 CMakeLists.txt 文件時&#xff0c;該目錄就被視為一個 CMake 項目的目錄&#xff0c;而該文件中的內容將被用于配置和構建該目錄中的項目。 當你在父…

不同路徑| 和 不同路徑||

不同路徑| 一個機器人位于一個 m x n 網格的左上角 &#xff08;起始點在下圖中標記為 “Start” &#xff09;。 機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角&#xff08;在下圖中標記為 “Finish” &#xff09;。 問總共有多少條不同的路徑&#xf…

Tomcat啟動閃退問題解決辦法

本文將通過一系列診斷步驟幫助您找出原因&#xff0c;并提供相應的解決辦法。 診斷步驟 查看日志文件 Tomcat的日志文件是解決啟動問題的第一線工具。查看logs目錄下的catalina.out和其他日志文件&#xff0c;這些文件經常記錄了錯誤信息和系統崩潰的線索。 cat /path/to/to…

C++編程與朱元墇的關系

學編程和英語沒關系&#xff0c;我說這句話&#xff0c;沒人會相信&#xff0c;也不會有人說我什么嘩眾取寵。 我說學編程和朱元墇有關系&#xff0c;一定有人說我放P&#xff0c;其實這個P也和朱元墇有關系&#xff0c; 和朱元墇有什么P關系啊。 真有這P事啊&#xff0c; 朱元…

LeetCode刷題筆記之圖論

1. 797【所有可能的路徑】 題目&#xff1a; 給你一個有 n 個節點的 有向無環圖&#xff08;DAG&#xff09;&#xff0c;請你找出所有從節點 0 到節點 n-1 的路徑并輸出&#xff08;不要求按特定順序&#xff09;。graph[i] 是一個從節點 i 可以訪問的所有節點的列表&#xf…

大學生體質測試|基于Springboot+vue的大學生體質測試管理系統設計與實現(源碼+數據庫+文檔)

大學生體質測試管理系統 目錄 基于Springboot&#xff0b;vue的大學生體質測試管理系統設計與實現 一、前言 二、系統設計 三、系統功能設計 1系統功能模塊 2管理員功能模塊 3用戶功能模塊 4教師功能模塊 四、數據庫設計 五、核心代碼 六、論文參考 七、最新計算…

MySQL數據庫基礎功能

MySQL是一種常用的關系型數據庫管理系統&#xff0c;它廣泛應用于網站開發、數據分析和其他許多領域。 咋可以不專業搞這個&#xff0c;但是基礎的最好能看懂和應用&#xff0c;快去學習吧 下面是10個不同案例&#xff0c;展示MySQL的用法。 ①創建數據庫&#xff1a;使用CR…

C++筆試強訓day20

目錄 1.經此一役小紅所向無敵 2.連續子數組最大和 3.非對稱之美 1.經此一役小紅所向無敵 鏈接 簡單模擬即可。 需要注意的是&#xff1a; 除完之后有無余數&#xff0c;若有&#xff0c;則還可以再挨一次打。 #include <iostream> using namespace std; #define in…

設計模式——結構型模式——代理模式(靜態代理、動態代理:JDK、CGLIB)

目錄 代理模式 代理模式簡介 代理模式的分類 代理模式組成 代理模式的優缺點 靜態代理 背景前置 編寫代碼 JDK動態代理 編寫代碼 使用Arthas分析JDK動態代理底層原理 CGLIB動態代理 編寫代碼 三種代理的對比 代理模式使用場景 代理模式 代理模式簡介 代理模式屬…