[STM32-HAL庫]ADC采集-DMA中斷采集-平均值濾波-STM32CUBEMX開發-HAL庫開發系列-主控STM32F103C8T6

目錄

一、前言

二、實現步驟

? ? ? ? 1.STM32CUBEMX配置

? ? ? ? 2.Keil工程程序設計

三、結語


一、前言

? ? ? ? 本文通過STM32CUBEMX實現對ADC的數據采集和濾波操作,幫助各位開發者完成與模擬量輸入的采集工作。

二、實現步驟

? ? ? ? 1.STM32CUBEMX配置

? ? ? ? 以STM32F103C8T6為例,打開STM32CUBEMX,配置好系統時鐘為72MHz后,在ADC中使能IN1、IN2(數量不限,但兩個以上有額外操作)

? ? ? ? 隨后,由于我們選擇了兩個輸入口,因此我們還需要按照下圖進行配置。先將Number of conversion設置為2,隨后將Rank 2channel設置為Channel 1(此處對應IN1)

? ? ? ? 這樣的配置可以實現同時采集兩個通道的值。

? ? ? ? 隨后使能連續轉換模式,如下圖。

? ? ? ? 按照下圖步驟配置DMA。

? ? ? ? 隨后使能中斷,配置中斷優先級

? ? ? ? 再次來到時鐘樹配置頁,關閉錯誤提示。

? ? ? ? 修改下圖處配置,將ADC采集頻率設定為12MHz

? ? ? ? 配置完工程的其他必要信息后,生成代碼并打開。

? ? ? ? 2.Keil工程程序設計

? ? ? ? 先定義ADC-DMA數據數組,此處定義數組大小為100,代表采集100次數據。

? ? ? ? 隨后在主函數初始化部分開啟DMA采集。

? ? ? ? 開啟后,相關數據將會被采集并存儲在ADC數組中,以上述配置為例,數組內的存儲順序是ADC[0]是IN0的值,ADC[1]是IN1的值,ADC[2]是IN0的值......一直循環,如下表所示。?

數據ADC[0]ADC[1]ADC[2]ADC[...]ADC[98]ADC[99]
采集口IN0IN1IN0...IN0IN1

?

? ? ? ? 對于得到的值,我們還需要進行轉換才能得到真正的電壓值。以上使用的代碼和轉換公式如下。

uint32_t ADC[100]={0};
HAL_ADC_Start_DMA(&hadc1,(uint32_t *)ADC,100);電壓值Val=ADC[0]/4096.0 *量程

? ? ? ? 上述的情況下,相當于我們一共采集的100次的值,每個通道50次,而我們只使用第一次的值,這不符合編程規范,我們應該對其取平均值做濾波處理。濾波函數如下。

float GetValue(int start,int step,int size){int i,count=0;float value=0;for(i=start;i<size;i+=step){value+=ADC[i]/4096.0*3.3;count++;}return value/count;	
}

? ? ? ? 這時,我們可以調用函數來獲取平均值了。以本文配置為例,start代表起始為0,步長為2,最大為100。

float val=GetValue(0,2,100);

? ? ? ? 隨后我們可以對值進行打印或其他操作。

三、結語

? ? ? ? 通過上述步驟,我們可以實現DMA方式采集ADC的數據,并且通過對數據進行平均值濾波的處理后得到穩定的ADC值,這種方法可以運用于搖桿、光敏等等傳感器的數據采集上,穩定性好、可靠性高。

? ? ? ? 如果對上述相關程序有疑義,歡迎評論區交流。水平有限,僅作技術分享;若有錯誤,懇請批評指正。

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

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

相關文章

3D 生成重建015-nerf2mesh從神經輻射場中提取mesh和紋理!

3D 生成重建015-nerf2mesh從神經輻射場中提取mesh和紋理&#xff01; 文章目錄 0 論文工作1 論文方法2 效果 0 論文工作 NeRF2Mesh 提出了一種從多視角 RGB 圖像重建紋理表面網格的新方法。它克服了傳統 NeRF 模型的局限性&#xff0c;由于其隱式表示&#xff0c;傳統 NeRF 模…

高斯分步正態分布

高斯分布&#xff0c;也稱為正態分布&#xff08;Normal Distribution&#xff09;&#xff0c;是統計學和概率論中最重要的分布之一。它由德國數學家卡爾弗里德里希高斯&#xff08;Carl Friedrich Gauss&#xff09;首先系統研究并命名。以下是關于高斯分布的詳細介紹&#x…

基于 Pre-commit 的 Python項目代碼風格統一實踐

背景信息 統一代碼風格首先需要定義參照的規范&#xff0c;每個團隊可能會有自己的規范&#xff0c;我們選擇的規范是 yapf mypy isort&#xff0c;如果保證所有的研發人員都遵循相關規范呢&#xff1f; 鼓勵 IDE 中對應的插件的安裝&#xff0c;通過直接對應的插件&#x…

bootstrap實現天平效果

之前提到了&#xff0c;最近&#xff0c;孩子的幼兒園讓家長體驗“半日助教活動”&#xff0c;每個家長需要講授15-20分鐘的課程。作為一名程序員&#xff0c;實在沒有能教的課程&#xff0c;只能做了一個小游戲&#xff0c;帶著小朋友們熟悉數字。 在上一章博客中&#xff0c…

【讀書】讀書筆記——理科生的視角:底層邏輯+數學之美

1&#xff0c;底層邏輯1&#xff08;看清這個世界的底牌&#xff09; 劉潤 著 0&#xff09;什么是底層邏輯&#xff1f; 底層邏輯是&#xff1a;事物之間共同點、變化背后不變的東西事&#xff1b;看清事物的本質&#xff0c;才能在復雜變化中從根本上解決問題。 1&#x…

【Java繼承】(超級詳細!!!)

【Java繼承】&#xff08;超級詳細&#xff01;&#xff01;&#xff01;&#xff09; 1、 繼承的概念2 、繼承的語法3、 父類成員訪問3.1 子類中訪問父類的成員變量3.2 子類中訪問父類的成員方法 4、 super關鍵字5 、子類的構造方法6、 繼承關系上的執行順序7、protected 關鍵…

ubuntu20.04安裝后配置:wifi、屏幕亮度、Nvidia驅動等

文章目錄 一、安裝時最好用英語&#xff0c;否則Downloads等home下文件夾是中文二、安裝后開機無法進入系統圖形界面三、清理不必要軟件&#xff0c;更新系統四、屏幕亮度、Nvidia驅動五、wifi 一、安裝時最好用英語&#xff0c;否則Downloads等home下文件夾是中文 安裝完再在…

error: ‘address‘ in ‘class school‘ does not name a type school:: address = “

錯誤代碼 class school{ public:string name;static string address; public:static string getAddress(){return address;} };school::address "南京路";原因 school::address “南京路”;前面未加類型&#xff0c;導致編譯錯誤 解決 class school{ public:stri…

選項卡式小部件QTabWidget

文章目錄 1. 詳細介紹2. 常用屬性3. 信號4. 常用函數5. 官方示例Tab Dialog QTabWidget提供一堆選項卡式小部件。 1. 詳細介紹 選項卡式部件提供一個選項卡欄和一個用于顯示與每個選項卡相關的頁面的頁面區域。 默認情況下&#xff0c;選項卡欄顯示在頁面區域上方&#xff0c;…

Vue.js - 計算屬性與偵聽器 【0基礎向 Vue 基礎學習】

文章目錄 計算屬性 computedcomputed 的使用方法computed 與 method 的區別計算屬性完整寫法 watch 偵聽器&#xff08;監視器&#xff09;簡單寫法 → 簡單類型數據&#xff0c;直接監視完整寫法 → 添加額外配置項 計算屬性 computed computed 的使用方法 **概念&#xff1…

web題解,基礎知識鞏固(qsnctf)

1.文章管理系統 1&#xff09;打開題目&#xff0c;把它頁面翻完了&#xff0c;沒看懂它有啥用 2&#xff09;看了看源碼&#xff0c;也是一樣的&#xff0c;沒找到有用的東西 3&#xff09;想著可能還是在隱藏文件里找&#xff0c;那我就直接用dirsearch掃掃看 4&#xff09;…

初識C++ · 模擬實現vector

目錄 前言&#xff1a; 1 部分簡單函數的實現 2 push_back和pop_back 3 reserve和resize 4 Print_vector 5 insert和erase 6 拷貝構造 7 構造 8 賦值 9 memcpy的問題 10 迭代器失效 前言&#xff1a; 繼上文模擬實現了string之后&#xff0c;接著就模擬實現vector&…

DataFrame—數據匯總9

s3.sort_index() 文章最前&#xff1a; 我是Octopus&#xff0c;這個名字來源于我的中文名--章魚&#xff1b;我熱愛編程、熱愛算法、熱愛開源。所有源碼在我的個人github &#xff1b;這博客是記錄我學習的點點滴滴&#xff0c;如果您對 Python、Java、AI、算法有興趣&#xf…

MyBatis復習筆記

3.Mybatis復習 3.1 xml配置 properties&#xff1a;加載配置文件 settings&#xff1a;設置駝峰映射 <settings><setting name"mapUnderscoreToCamelCase" value"true"/> </settings>typeAliases&#xff1a;類型別名設置 #這樣在映射…

如何去除視頻上的文字?免費無痕去水印分享!視頻制作良器!

對于需要進行二次創作的視頻素材&#xff0c;去除原有的文字可以提供一個更加干凈的畫布&#xff0c;方便創作者在其基礎上進行新的創作和編輯。同時&#xff0c;去除文字后的視頻也更方便分享到各種平臺&#xff0c;避免因為平臺對文字的限制而導致視頻無法發布或傳播。 要去除…

Kotlin 標準函數 with、run、apply 的定義和使用

Kotlin 標準函數 with、run、apply 的定義和使用 1. with 函數 定義&#xff1a; with 函數允許你在一個對象的上下文中執行一個 lambda 表達式&#xff0c;而不需要在 lambda 表達式中重復引用該對象。 kotlin.internal.InlineOnly public inline fun <T, R> with(r…

云計算期末復習(1)

云計算基礎 作業&#xff08;問答題&#xff09; &#xff08;1&#xff09;總結云計算的特點。 透明的云端計算服務 “無限”多的計算資源&#xff0c;提供強大的計算能力 按需分配&#xff0c;彈性伸縮&#xff0c;取用方便&#xff0c;成本低廉資源共享&#xff0c;降低企…

python 3.10 install on centos

CentOS 7 安裝 Python 3.10_yum python3.10-CSDN博客

Homebrew安裝mysql之后,啟動和使用MySQL服務:

啟動MySQL服務&#xff1a; brew services start mysql 手動啟動服務&#xff1a; mysql.server start 例如&#xff1a; mysql.server start Starting MySQL .. SUCCESS! 停止 MySQL服務&#xff1a; brew services stop mysql 或者 mysql.server stop 重啟MySQL服務&a…

IDEA使用Maven打包項目的所有的依賴

要使用 Maven 命令將 Spring Boot 項目的依賴打包到 lib 文件夾中&#xff0c;你可以在終端中運行以下命令&#xff1a; mvn dependency:copy-dependencies -DoutputDirectory./lib這個命令會將項目的所有依賴&#xff08;包括運行時依賴&#xff09;復制到當前目錄的 lib 文件…