正點原子STM32H743單片機實現ADC多通道檢測

目標

使用STM32CubeMX工具,配置ADC相關參數,實現在STM32H743單片機上獲取ADC多通道電壓值。共14個ADC引腳,ADC2有5個,ADC3有9個,全部設置單通道

ADC引腳

PF3
PF4
PF5
PF10
PC0
PC2
PC3
PH2
PH3
PA3
PB0
PB1
PA4
PA5
PA6

?STM32cubeMX配置ADC

ADC2配置5個模擬輸入IO,多通道輪詢,配置各通道參數,使能中斷

ADC3配置9個模擬輸入IO,多通道輪詢,配置各通道參數,使能中斷

??時鐘頻率配置

在處理ADC時發現ADC時鐘配置需要處理,可能默認即可,這里試了下是沒問題的,一開始使用的HSE作為ADC時鐘,導致無法獲取ADC參數。在ADC3的屬性配置中,Resolution對應12位分辨率有可能錯誤,如果有問題可以嘗試加大改為16位分辨率,不過改動分辨率之后,在代碼中就需要修改對應的算法,即12位算法(電壓值= adc值*參考電壓/2的12次方-1),16位算法(電壓值= adc值*參考電壓/2的16次方-1)。

?代碼

啟動adc轉換前必須先校準adc,在HAL_ADC_ConvCpltCallback中斷回調函數中,處理對應ADC的代碼,由于HAL_ADC_Start_IT調用后會一直不間斷輪詢,通過HAL_ADC_GetValue函數可直接獲取ADC值,HAL_ADC_Stop_IT函數作用關閉當前ADC轉換。

#define ADC2_CHANNELS 5
#define ADC3_CHANNELS 9uint16_t adc2_values[ADC2_CHANNELS];
uint16_t adc3_values[ADC3_CHANNELS];
volatile uint8_t adc_ready = 0; // 數據就緒標志位void Start_ADC2_DMA(void) {/* 初始化后校準ADC */HAL_ADCEx_Calibration_Start(&hadc2, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED); // 執行ADC校準/* 啟動ADC連續轉換(不間斷輪詢) */HAL_ADC_Start_IT(&hadc2);
}void Start_ADC3_DMA(void) {/* 初始化后校準ADC */HAL_ADCEx_Calibration_Start(&hadc3, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED); // 執行ADC校準/* 啟動ADC連續轉換(不間斷輪詢) */HAL_ADC_Start_IT(&hadc3);
}void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) {if (hadc->Instance == ADC2)  // 確認是ADC2的轉換完成{for (int i = 0; i < ADC2_CHANNELS; i++) {adc2_values[i] = HAL_ADC_GetValue(&hadc2); // 讀取轉換結果
//			HAL_ADC_PollForConversion(&hadc2, 100);}adc_ready |= 0x01; // 標記ADC2數據就緒HAL_ADC_Stop_IT(&hadc2);} else if (hadc->Instance == ADC3)  // 確認是ADC3的轉換完成{for (int i = 0; i < ADC3_CHANNELS; i++) {adc3_values[i] = HAL_ADC_GetValue(&hadc3); // 讀取轉換結果
//			HAL_ADC_PollForConversion(&hadc3, 100);}adc_ready |= 0x02; // 標記ADC3數據就緒HAL_ADC_Stop_IT(&hadc3);}
}

?AdcTask線程任務當ADC2和ADC3都進行轉換之后,在當前線程中處理所有ADC數值并轉換為電壓值輸出打印,結束后清除標志位,等待下次轉換觸發。該線程使用最小棧內存大小128Words。

void AdcTask(void *argument)
{/* USER CODE BEGIN AdcTask */Start_ADC2_DMA();Start_ADC3_DMA();int i = 0;float voltage;/* Infinite loop */for (;;) {if (adc_ready == 0x03) { // 等待兩組ADC數據就緒/* 打印ADC2數據 */for (i = 0; i < ADC2_CHANNELS; i++) {voltage = adc2_values[i] * 3.3f / 4095.0f;printf("ADC2[%d] = %d.%dV\r\n", i, (uint32_t) voltage,(uint32_t) (voltage * 100) % 100);}printf("\n");/* 打印ADC3數據 */for (i = 0; i < ADC3_CHANNELS; i++) {voltage = adc3_values[i] * 3.3f / 4095.0f;printf("ADC3[%d] = %d.%dV\r\n", i, (uint32_t) voltage,(uint32_t) (voltage * 100) % 100);}printf("\n\n");adc_ready = 0; // 清除標志位}osDelay(10);}/* USER CODE END AdcTask */
}

共勉!!!

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

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

相關文章

深度學習基礎(四)——計算量(FLOPs)、參數量(Params)、計算速度(FLOPS/TOPS))

一、計算量FLOPs FLOPs&#xff0c;全稱為Floating Point Operations, (s為復數縮寫&#xff09;&#xff0c;浮點運算數&#xff0c;指模型完成一次前向傳播所需的浮點運算次數&#xff0c;可以理解為計算量&#xff08;模型的時間復雜度&#xff09;&#xff0c;用來衡量算法…

電子秤檢測管理系統開發實戰:從數據采集到可視化大屏

簡介 電子秤作為現代工業生產和商業流通中的核心計量設備,其準確性直接關系到產品質量和交易公平。針對仙貝生產企業的電子秤管理需求,我們開發了一套集電子秤檢測信息錄入、產品信息管理、實時稱重數據采集和后臺可視化大屏于一體的綜合管理系統。該系統基于Django框架構建…

Cesium添加WMS,WMTS,地形圖圖,3D Tiles數據

在 Cesium 中&#xff0c;你可以添加 WMS、WMTS、地形圖 和 3D Tiles 數據源。以下是詳細的實現方法&#xff1a; 1. 添加 WMS 服務 WMS&#xff08;Web Map Service&#xff09;是一種動態地圖服務&#xff0c;適用于加載柵格地圖圖層。 代碼示例 const viewer new Cesium…

數據庫基本概念:數據庫的定義、特點、分類、組成、作用

一&#xff1a;數據庫相關概念 1.1 定義 &#xff08;1&#xff09;數據庫&#xff1a;存儲數據的倉庫 &#xff08;2&#xff09;數據庫管理系統&#xff1a;模擬和管理數據庫的大型軟件 &#xff08;3&#xff09;SQL&#xff1a;操作關系型數據庫的編程語言&#xff0c;定義…

【項目篇之消息序列化】仿照RabbitMQ模擬實現消息隊列

實現消息序列化 為什么不使用JSON來序列化直接使用二進制序列化實現序列化方法toBytes()1&#xff1a; 創建內存緩沖區??2 &#xff1a;創建對象序列化通道?3&#xff1a;執行序列化操作?4&#xff1a;提取二進制數據&#xff0c;轉換成byte[]序列化圖示流程&#xff1a;序…

單片機-89C51部分:13、看門狗

飛書文檔https://x509p6c8to.feishu.cn/wiki/LefkwDPU7iUUWBkfKE9cGLvonSh 一、作用 程序發生死循環的時候&#xff08;跑飛&#xff09;&#xff0c;能夠自動復位。 啟動看門狗計數器->計數器計數->指定時間內不對計數器賦值&#xff08;主程序跑飛&#xff0c;無法喂…

C++23/26 靜態反射機制深度解析:編譯時元編程的新紀元

目錄 引言 一、C靜態反射的核心特性 1. 編譯時元數據獲取 2. 元信息操作的語法革新 3. 與現有特性的深度融合 二、應用場景&#xff1a;從理論到實踐 1. 序列化與反序列化 2. 領域特定語言&#xff08;DSL&#xff09;與代碼生成 3. 動態插件系統 4. 調試與元編程增強…

RISCV學習(5)GD32VF103 MCU架構了解

RISCV學習&#xff08;5&#xff09;GD32VF103 MCU架構了解 1、芯片內核功能簡介 GD32VF103 MCU架構&#xff0c;采用Bumblebee內核&#xff0c;芯來科技&#xff08;Nuclei System Technology&#xff09;與臺灣晶心科技&#xff08;Andes Technology&#xff09;聯合開發&am…

【Java學習筆記】遞歸

遞歸&#xff08;recursion&#xff09; 思想&#xff1a;把一個復雜的問題拆分成一個簡單問題和子問題&#xff0c;子問題又是更小規模的復雜問題&#xff0c;循環往復 本質&#xff1a;棧的使用 遞歸的注意事項 &#xff08;1&#xff09;需要有遞歸出口&#xff0c;否者就…

滲透測試中的那些“水洞”:分析與防御

1. Nginx 版本泄露 風險分析&#xff1a; Nginx 默認會在響應頭中返回 Server: nginx/x.x.x&#xff0c;攻擊者可利用該信息匹配已知漏洞進行攻擊。 防御措施&#xff1a; 修改 nginx.conf 配置文件&#xff0c;隱藏版本信息&#xff1a;server_tokens off;使用 WAF 進行信息…

基于C#開發的適合Windows開源文件管理器

使用DDD從零構建一個完整的系統 推薦一個功能強大且直觀的開源文件管理器&#xff0c;適用于Windows平臺。 01 項目簡介 該項目是一個基于C#開發、開源的文件管理器&#xff0c;適用于Windows&#xff0c;界面UI美觀、方便輕松瀏覽文件。此外&#xff0c;支持創建和提取壓縮…

實習入職的總結

我是4月14號入職的&#xff0c;到現在差不多已經三個禮拜了&#xff0c;今天想總結一下這段時間的工作情況&#xff0c;并給學弟學妹們提供一些指引。 目前&#xff0c;我所在的公司是一家初創企業&#xff0c;專注于IPC安防領域。作為一名大專生&#xff0c;我深知自己的學歷在…

Ubuntu 系統上部署 Kubernetes 的完整指南

Ubuntu 系統上部署 Kubernetes 的完整指南 一、環境準備&#xff08;Ubuntu 22.04/24.04&#xff09;1. 系統初始化2. 安裝容器運行時&#xff08;containerd&#xff09;3. 安裝 Kubernetes 組件&#xff08;kubeadm, kubelet, kubectl&#xff09; 二、部署 Kubernetes 集群1…

partition_pdf 和chunk_by_title 的區別

from unstructured.partition.pdf import partition_pdf from unstructured.chunking.title import chunk_by_titlepartition_pdf 和 chunk_by_title 初看有點像&#xff0c;都在"分塊"&#xff0c;但是它們的本質完全不一樣。 先看它們核心區別 partition_pdfchun…

基于深度學習的醫療診斷輔助系統設計

標題:基于深度學習的醫療診斷輔助系統設計 內容:1.摘要 隨著醫療數據的爆炸式增長和深度學習技術的飛速發展&#xff0c;開發基于深度學習的醫療診斷輔助系統具有重要的現實意義。本研究的目的在于設計一個高效、準確的醫療診斷輔助系統&#xff0c;以輔助醫生進行更精準的診斷…

Matlab/Simulink - BLDC直流無刷電機仿真基礎教程(四) - PWM調制模擬

Matlab/Simulink - BLDC直流無刷電機仿真基礎教程&#xff08;四&#xff09; - PWM調制模擬 前言一、PWM調制技術基本原理二、仿真模型中加入PWM調制三、逆變電路MOS管添加體二極管四、模擬添加機械負載五、仿真模型與控制框圖文章相關模型文件下載鏈接參考鏈接 前言 本系列文…

Curl 全面使用指南

Curl&#xff08;Client URL&#xff09;是一個跨平臺命令行工具&#xff0c;支持多種協議&#xff08;HTTP/HTTPS/FTP/SFTP等&#xff09;&#xff0c;用于數據傳輸、API調試、文件上傳/下載等場景。以下從 核心功能、用戶疑問解答、高級技巧 三方面系統總結&#xff0c;并整合…

PyTorch中“原地”賦值的思考

在開發一個PyTorch模塊時&#xff0c;遇到了一個詭異的現象&#xff0c;將他描述出來就是下面這樣&#xff1a; f[..., :p_index - 1] f[..., 1:p_index] 這個操作將f張量的部分數值進行左移&#xff0c;我在模型訓練的時候還能正常跑&#xff0c;但是當我將模型部署到項目中…

什么是:云邊端一體化架構

什么是云邊端一體化架構 文章目錄 什么是云邊端一體化架構云、邊、端云計算邊緣計算終端設備 云邊端一體化協同云邊端一體化架構協同的流程云邊端一體化架構協同的應用云邊端一體化架構協同的價值云邊端一體化架構協同未來發展趨勢 云、邊、端 云&#xff08;Cloud&#xff09…

gephi繪圖

參考&#xff1a; 如何在Gephi中正確的顯示中文&#xff1f; Gephi繪制網絡圖初步探索 gephi 節點標簽 調節_圖分析與可視化-從Gephi開始