【螢火工場GD32VW553-IOT開發板】ADC電壓的LabVIEW采集

【螢火工場GD32VW553-IOT開發板】ADC電壓的LabVIEW采集

🔋 本文介紹了螢火工場 GD32VW553-IOT 開發板通過串口中斷查詢的方式采集 ADC 電壓及溫度轉換數據,并進一步結合LabVIEW上位機實現數據自動采集和實時監測的項目設計。

項目介紹

  • 串口中斷查詢,獲取 ADC 電壓數據,以及溫度轉換數據 🍦
  • LabVIEW 上位機程序設計 🥧
  • 開發板結合 LabVIEW上位機實現 ADC 電壓和溫度數據采集、實時演化曲線的顯示、數據保存 🍫

硬件連接

  • RXD -> PB15
  • TXD -> PA8
  • 3V3 -> VCC
  • GND -> GND

示意圖

在這里插入圖片描述

實物連接

在這里插入圖片描述

工程創建

  • 運行 Embedded Builder 軟件,File - New - Project ...

  • 選擇 C/C++ - C Project - 點擊 Next ;

  • 設置工程名稱、工程路徑,目標設備選擇 GD32VW553HMQ7 ,點擊 Finished 完成工程創建。

流程圖

在這里插入圖片描述

工程代碼

📊 打開 src/main.c 文件,修改代碼如下

#include "gd32vw55x.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"
#include "gd32vw553h_eval.h"uint16_t adc_value[2]; // storage adc valuevoid led_spark(void){}void rcu_config(void);
void adc_config(void);
void dma_config(void);
void usart_config(void);int main(void)
{/* system clocks configuration */rcu_config();/* systick configuration */systick_config();/* DMA configuration */dma_config();/* ADC configuration */adc_config();/* USART configuration */gd_eval_com_init(EVAL_COM0);usart_config();while (1){}
}/*!\brief      USART interrupt function\param[in]  none\param[out] none\retval     none
*/
void USART0_IRQHandler(void) {static uint8_t comdata[3];static uint8_t com_index = 0;float temperature;float vref_value;if (usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)){uint8_t data = usart_data_receive(USART0); // 讀取數據comdata[com_index++] = data;if (com_index >= 3){if(comdata[0] == 0x55){if(comdata[1] == 0xAA){switch(comdata[2]){case 0x10:while (!adc_flag_get(ADC_FLAG_EOC));vref_value = (adc_value[1] * 3.3f / 4096);printf("%5.3f\r\n", (double)vref_value);break;case 0x11:while (!adc_flag_get(ADC_FLAG_EOC));temperature = (1.43f - adc_value[0]*3.3f/4096) * 1000 / 4.3f + 25;printf("%2.2f\r\n", (double)temperature);break;}}}com_index = 0;}}
}/*!\brief      Enable USART interrupt\param[in]  none\param[out] none\retval     none
*/
void usart_config(void)
{usart_interrupt_enable(USART0, USART_INT_RBNE); // 接收緩沖區非空中斷eclic_irq_enable(USART0_IRQn, 0, 0); // 使能 USART0 中斷usart_enable(USART0);
}/*!\brief      configure the different system clocks\param[in]  none\param[out] none\retval     none
*/
void rcu_config(void)
{/* enable ADC1 clock */rcu_periph_clock_enable(RCU_ADC);/* enable DMA clock */rcu_periph_clock_enable(RCU_DMA);/* config ADC clock */adc_clock_config(ADC_ADCCK_PCLK2_DIV6);
}
/*!\brief      configure the DMA peripheral\param[in]  none\param[out] none\retval     none
*/
void dma_config(void)
{/* ADC_DMA_channel configuration */dma_single_data_parameter_struct dma_single_data_parameter;/* ADC DMA_channel configuration */dma_deinit(DMA_CH0);/* initialize DMA single data mode */dma_single_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA);dma_single_data_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE;dma_single_data_parameter.memory0_addr = (uint32_t)(&adc_value);dma_single_data_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE;dma_single_data_parameter.periph_memory_width = DMA_PERIPH_WIDTH_16BIT;dma_single_data_parameter.direction = DMA_PERIPH_TO_MEMORY;dma_single_data_parameter.number = 2;dma_single_data_parameter.priority = DMA_PRIORITY_HIGH;dma_single_data_mode_init(DMA_CH0, &dma_single_data_parameter);dma_channel_subperipheral_select(DMA_CH0, DMA_SUBPERI0);/* enable DMA circulation mode */dma_circulation_enable(DMA_CH0);/* enable DMA channel */dma_channel_enable(DMA_CH0);
}
/*!\brief      configure the ADC peripheral\param[in]  none\param[out] none\retval     none
*/
void adc_config(void)
{/* ADC contineous function enable */adc_special_function_config(ADC_CONTINUOUS_MODE, ENABLE);/* ADC scan mode disable */adc_special_function_config(ADC_SCAN_MODE, ENABLE);/* ADC data alignment config */adc_data_alignment_config(ADC_DATAALIGN_RIGHT);/* ADC channel length config */adc_channel_length_config(ADC_ROUTINE_CHANNEL, 2U);/* ADC regular channel config */adc_routine_channel_config(0U, ADC_CHANNEL_9, ADC_SAMPLETIME_55POINT5);adc_routine_channel_config(1U, ADC_CHANNEL_10, ADC_SAMPLETIME_55POINT5);/* ADC trigger config */adc_external_trigger_config(ADC_ROUTINE_CHANNEL, EXTERNAL_TRIGGER_DISABLE);adc_tempsensor_vrefint_enable();/* ADC DMA function enable */adc_dma_request_after_last_enable();adc_dma_mode_enable();/* enable ADC interface */adc_enable();delay_1ms(1U);/* ADC software trigger enable */adc_software_trigger_enable(ADC_ROUTINE_CHANNEL);
}

🍟 保存代碼,編譯工程,生成 Debug 文件夾,右鍵 bin 文件 - Show In - System Explorer ,打開文件夾并獲得 *.bin 固件。

固件上傳

📡 采用 ISP 方式上傳固件至開發板。

  • 將 BOOT0 拉高,USB 轉 TTL 工具連接開發板;

  • 運行 GD32 All-In-One Programmer 軟件;

  • 設備端口選擇、串口參數設置,設備名稱選擇 GD32VW553HMQ7 ,點擊 Connect 按鈕(若連接失敗,則短按復位鍵);

  • 加載鏡像固件、設置起始地址,點擊 Download 按鈕;

  • 待加載完成,跳帽恢復,將 BOOT0 拉低;

  • 短按 RST 復位鍵,程序開始運行。

效果演示

📡 打開串口調試助手,配置串口參數,打開串口,即可觀察到串口輸出文本。

動態演示

在這里插入圖片描述

LabVIEW 上位機

🔎 LabVIEW 上位機的設計包括 前面板程序框圖 兩部分。

🧵 結合開發板程序可知,

  • 當串口接收到 55 AA 10 指令時,反饋 ADC 電壓數據;
  • 當串口接收到 55 AA 11 指令時,反饋 ADC 溫度數據。

🔮 由此通信協議,設計串口上位機程序,每隔 500 毫秒查詢一次數據,并繪制演化曲線,實時監測電壓和溫度變化情況。

前面板

💡 前面板包括串口配置、儀表盤、演化曲線、保存路徑、數組等模塊。

在這里插入圖片描述

操作流程
  • 選擇串口對應的設備端口號,設置波特率;
  • 點擊左上角箭頭按鈕,運行程序,設置數據采集保存文檔的路徑;
  • 點擊 START 按鈕,開始采集數據和實時監測 ADC 電壓和溫度演化曲線;
  • 采集完成后,點擊 Stop 按鈕結束,同時數據保存至預設路徑;
  • 點擊 Terminate 按鈕終止和退出程序。

程序框圖

page 1

在這里插入圖片描述

page 2

在這里插入圖片描述

效果

🛠? 程序開始運行后,左側儀表盤顯示實時采集的電壓和溫度數值,曲線繪制相應的數據點和演化曲線。

在這里插入圖片描述

數據保存

🎨 數據保存為 dat 格式,其中第 1 列為日期時刻、第 2 列為 ADC 電壓值、第 3 列為溫度值。

在這里插入圖片描述

總結

🔋 本文介紹了螢火工場 GD32VW553-IOT 開發板通過串口中斷查詢的方式采集 ADC 電壓及溫度轉換數據,并進一步結合LabVIEW上位機實現數據自動采集和實時監測的項目設計,為相關嵌入式開發和自動化應用設計提供了參考。

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

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

相關文章

視頻監控管理平臺EasyCVR結合AI分析技術構建高空拋物智能監控系統,筑牢社區安全防護網

高空拋物嚴重威脅居民生命安全與公共秩序&#xff0c;傳統監管手段存在追責難、威懾弱等問題。本方案基于EasyCVR視頻監控與AI視頻分析技術&#xff08;智能分析網關&#xff09;&#xff0c;構建高空拋物智能監控系統&#xff0c;實現24小時實時監測、智能識別與精準預警&…

Python----循環神經網絡(LSTM:長短期記憶網絡)

一、RNN的長期依賴問題 可以看到序列越長累乘項項數越多&#xff0c;項數越多就可能會讓累乘結果越小&#xff0c;此時對于W 的更新就取決于第一項或者是前幾項&#xff0c;也就是RNN模型會丟失很多較遠時刻的信息而 更關注當前較近的幾個時刻的信息&#xff0c;即沒有很好的長…

【跨端框架檢測】使用adb logcat檢測Android APP使用的跨端框架方法總結

目錄 Weex 跨端框架使用了uni-app的情況區分使用了uni-app還是Weex 判斷使用了Xamarin判斷使用了KMM框架判斷使用了 ??Ionic 框架判斷使用了Cordova框架判斷使用了Capacitor 框架使用了React Native框架使用了QT框架使用了Cocos框架使用了Electron 框架使用了flutter 框架使用…

以加減法計算器為例,了解C++命名作用域與函數調用

************* C topic: 命名作用域與函數調用 ************* The concept is fully introducted in the last artical. Please refer to 抽象&#xff1a;C命名作用域與函數調用-CSDN博客 And lets make a calculator to review the basic structure in c. 1、全局函數 A…

AIGC小程序項目

一、文生文功能 &#xff08;1&#xff09;前端部分 使用 Pinia 狀態管理庫創建的聊天機器人消息存儲模塊&#xff0c;它實現了文生文&#xff08;文本生成文本&#xff09;的核心邏輯。 1.Pinia狀態管理 這個模塊管理兩個主要狀態&#xff1a; messages&#xff1a;存儲所…

Axios中POST、PUT、PATCH用法區別

在 Axios 中&#xff0c;POST、PUT 和 PATCH 是用于發送 HTTP 請求的三種不同方法&#xff0c;它們的核心區別源自 HTTP 協議的設計語義。以下是它們的用法和區別&#xff1a; 1. POST 語義&#xff1a;用于創建新資源。 特點&#xff1a; 非冪等&#xff08;多次調用可能產生…

[爬蟲知識] Cookie與Session

相關實戰案例&#xff1a;[爬蟲實戰] 爬取小說標題與對應內容 相關爬蟲專欄&#xff1a;JS逆向爬蟲實戰 爬蟲知識點合集 爬蟲實戰案例 一、引入場景 在http協議中&#xff0c;瀏覽器是無狀態&#xff08;即無記憶&#xff09;的&#xff0c;對于請求與響應的產生數據&#…

怎樣改變中斷優先級?

在STM32中改變中斷優先級可以通過STM32CubeMX配置和代碼中設置兩種方式來實現。以下以STM32F1系列為例進行說明: 使用STM32CubeMX配置 打開工程:在STM32CubeMX中打開你的工程。進入NVIC配置:在Pinout & Configuration選項卡中,點擊NVIC進入中斷向量控制器配置界面。選…

科學計算中的深度學習模型精解:CNN、U-Net 和 Diffusion Models

關鍵要點 模型概述:卷積神經網絡(CNN)、U-Net 和 Diffusion Models 是深度學習中的核心模型,廣泛應用于科學計算任務,如偏微分方程(PDE)求解、圖像分割和數據生成。科學計算應用:CNN 可用于高效求解 PDEs,U-Net 擅長醫學圖像分割和材料分析,Diffusion Models 在生成合…

解決Docker無法拉取鏡像問題:Windows系統配置鏡像加速全指南

問題背景 在使用 Docker 時&#xff0c;你是否遇到過以下報錯&#xff1f; Unable to find image ‘mysql:latest’ locally docker: Error response from daemon: Get “https://registry-1.docker.io/v2/”: dial tcp 128.242.250.155:443: i/o timeout. 這類問題通常是由于…

Spring AI 使用教程

Spring AI 使用教程&#xff08;2025年5月24日更新&#xff09; 一、環境搭建與項目初始化 創建Spring Boot項目 使用IDEA或Spring Initializr創建項目&#xff0c;選擇JDK 17或更高版本&#xff08;推薦21&#xff09;。勾選依賴項&#xff1a;Spring Web、Lombok&#xff0c;…

iOS 直播特殊禮物特效實現方案(Swift實現,超詳細!)

特殊禮物特效是提升直播互動體驗的關鍵功能&#xff0c;下面我將詳細介紹如何在iOS應用中實現各種高級禮物特效。 基礎特效類型 1.1 全屏動畫特效 class FullScreenAnimationView: UIView {static func show(with gift: GiftModel, in view: UIView) {let effectView FullS…

分布式事務之Seata

概述 Seata有四種模式 AT模式&#xff1a;無侵入式的分布式事務解決方案&#xff0c;適合不希望對業務進行改造的場景&#xff0c;但由于需要添加全局事務鎖&#xff0c;對影響高并發系統的性能。該模式主要關注多DB訪問的數據一致性&#xff0c;也包括多服務下的多DB數據訪問…

信息收集與搜索引擎

6.1 常見的搜索引擎&#xff08;一、二&#xff09; 6.1.1 通用搜索引擎 Google/Bing&#xff1a; 用途&#xff1a;基礎信息收集&#xff08;域名、子域名、敏感文件&#xff09;。 高級語法&#xff1a; site:target.com&#xff1a;限定搜索目標域名。 filetype:pdf&am…

【Java項目測試報告】:在線聊天平臺(Online-Chat)

被測試項目已部署&#xff1a;登錄頁面http://123.249.78.82:8080/login.html 一、項目背景 1.1 測試目標 驗證系統功能完整性&#xff0c;確保用戶管理、消息傳輸、好友管理等核心模塊符合需求。 1.2 項目技術棧 后端&#xff1a;Spring Boot/Spring MVC/WebSocket 數據…

RAGFlow與Dify的深度刨析

目錄 一、RAGFlow 框架 二、Dify 框架 三、兩者集成 四、深度對比 1. 核心定位對比 2. 核心功能對比 3. 技術架構對比 4. 部署與成本 5. 適用場景推薦 總結 一、RAGFlow 框架 RAGFlow 是一個專注于深度文檔理解和檢索增強生成&#xff08;RAG&#xff09;技術的框架…

CQF預備知識:一、微積分 -- 1.2.2 函數f(x)的類型詳解

文中內容僅限技術學習與代碼實踐參考&#xff0c;市場存在不確定性&#xff0c;技術分析需謹慎驗證&#xff0c;不構成任何投資建議。 &#x1f4d6; 數學入門全解 本系列教程為CQF(國際量化金融分析師證書)認證所需的數學預備知識&#xff0c;涵蓋所有需要了解的數學基礎知識…

嵌入式工程師常用軟件

1、 Git Git 是公司常用的版本管理工具&#xff0c;人人都要會。在線的 git 教程可以參考菜鳥教程&#xff1a; https://www.runoob.com/git/git-tutorial.html 電子書教程請在搜索欄搜索&#xff1a; git Git 教程很多&#xff0c;常用的命令如下&#xff0c;這些命令可…

TReport組件指南總結

1. TReport 組件簡介 TReport 是一個用于生成和打印報表的組件,通常用于連接數據集(如 TDataSet)并設計復雜的報表布局。它支持動態數據綁定、多頁報表、分組統計、圖表插入等功能。 2. 安裝與配置 安裝:如果使用的是第三方報表工具(如 Rave Reports),需在 Delphi 中通…

spark任務的提交流程

目錄 spark任務的提交流程1. 資源申請與初始化2. 任務劃分與調度3. 任務執行4. 資源釋放與結果處理附:關鍵組件協作示意圖擴展說明SparkContext介紹 spark任務的提交流程 用戶創建一個 Spark Context;Spark Context 去找 Cluster Manager 申請資源同時說明需要多少 CPU 和內…