GD32F103VE使用DMA傳輸讀取內部溫度和參考電壓值

GD32F103VE使用DMA傳輸讀取內部溫度和參考電壓值。出廠CPU芯片不同,溫度誤差不同,不要糾結了。

GD32F103的ADC為12位AD轉換器,ADC轉換結果保存在16位數據寄存器中;

模擬輸入通道:
16個外部模擬輸入通道;
1個內部溫度傳感器通道(Vsense)
1個內部參考電壓輸入通道(VrefInt)

觸發轉換:
軟件觸發;
硬件觸發;

轉換模式:
單通道轉換或多通道掃描轉換;
單次模式,選擇指定的模擬輸入通道后,觸發一次,則轉換一次;
連續模式,選擇指定的模擬輸入通道后,連續進行AD轉換;用于DMA
同步模式,當同時使用ADC0,ADC1和ADC2時,這3個設備就可以同時進行AD轉換;
間斷模式;

ADC的VDDA電源引腳需要接入3.3V;
ADC輸入模擬量的范圍:Vref- 至Vref+之間;

ADC_RSQ0~ADC_RSQ2寄存器規定了"規則組通道"的選擇;
ADC_RSQ0的RL[3:0]用來指定"規則通道組"轉換序列的長度,即"規則通道組"選擇;
連續進行AD轉換的通道總數為(RL[3:0]+1),在DMA傳輸中要知道有多少個通道參與AD轉換

ADC_ISQ寄存器規定了"注入組通道"的選擇;
ADC_ISQ0的IL[3:0]用來指定"整個注入通道組"轉換序列的長度,即"規則通道組"選擇
連續進行AD轉換的通道總數為(IL[3:0]+1),在DMA傳輸中要知道有多少個通道參與AD轉換

注意:ADC同時使用"規則組通道"和"注入組通道",則"注入組通道"的采樣周期不能1.5和7.5個采樣周期;

GD32F103的ADC0映射到DMA0的通道0
GD32F103的ADC2映射到DMA1的通道4
GD32F103的ADC1沒有DMA功能
注意:在多通道AD轉換中,DMA使用循環工作模式比較好;

ADC0_CH16為溫度傳感器通道,Internal temperature sensor output voltage;
ADC0_CH17為內部參考電壓通道,Internal voltage reference output voltage;
Vref-引腳必須連接至VSSA引腳,Vref+連接到VDDA,但在64腳以下的CPU(含64腳),其Vref+和Vref-已經在內部連接至VDDA和VSSA;
注意:ST和GD的手冊里都寫著不同芯片最大偏差45度

#include "ADC.h"
#include "delay.h"
#include "stdio.h"  //getchar(),putchar(),scanf(),printf(),puts(),gets(),sprintf()/*
GD32F103的ADC為12位AD轉換器,ADC轉換結果保存在16位數據寄存器中;模擬輸入通道:
16個外部模擬輸入通道;
1個內部溫度傳感器通道(Vsense)
1個內部參考電壓輸入通道(VrefInt)觸發轉換:
軟件觸發;
硬件觸發;轉換模式:
單通道轉換或多通道掃描轉換;
單次模式,選擇指定的模擬輸入通道后,觸發一次,則轉換一次;
連續模式,選擇指定的模擬輸入通道后,連續進行AD轉換;用于DMA
同步模式,當同時使用ADC0,ADC1和ADC2時,這3個設備就可以同時進行AD轉換;
間斷模式;ADC的VDDA電源引腳需要接入3.3V;
ADC輸入模擬量的范圍:Vref- 至Vref+之間;ADC_RSQ0~ADC_RSQ2寄存器規定了"規則組通道"的選擇;
ADC_RSQ0的RL[3:0]用來指定"規則通道組"轉換序列的長度,即"規則通道組"選擇;
連續進行AD轉換的通道總數為(RL[3:0]+1),在DMA傳輸中要知道有多少個通道參與AD轉換ADC_ISQ寄存器規定了"注入組通道"的選擇;
ADC_ISQ0的IL[3:0]用來指定"整個注入通道組"轉換序列的長度,即"規則通道組"選擇
連續進行AD轉換的通道總數為(IL[3:0]+1),在DMA傳輸中要知道有多少個通道參與AD轉換注意:ADC同時使用"規則組通道"和"注入組通道",則"注入組通道"的采樣周期不能1.5和7.5個采樣周期;GD32F103的ADC0映射到DMA0的通道0
GD32F103的ADC2映射到DMA1的通道4
GD32F103的ADC1沒有DMA功能
注意:在多通道AD轉換中,DMA使用循環工作模式比較好;ADC0_CH16為溫度傳感器通道,Internal temperature sensor output voltage;
ADC0_CH17為內部參考電壓通道,Internal voltage reference output voltage;
Vref-引腳必須連接至VSSA引腳,Vref+連接到VDDA,但在64腳以下的CPU(含64腳),其Vref+和Vref-已經在內部連接至VDDA和VSSA;
注意:ST和GD的手冊里都寫著不同芯片最大偏差45度
*/#define ADC0_CH_Number   2
#define ADC0_cnt         20
#define ADC0_Buffer_Size 40
uint16_t ADC0_Buffer[ADC0_cnt][ADC0_CH_Number];void DMA0_DMA_CH0_config(void);
void ADC0_Init(void);
void ADC0_To_DMA0_Init(void);
void Read_TemperatureValue(void);void DMA0_DMA_CH0_config(void)
{dma_parameter_struct dma_init_ADC0;dma_deinit(DMA0,DMA_CH0);dma_init_ADC0.direction = DMA_PERIPHERAL_TO_MEMORY;//DMA傳送方向:從外設到內存dma_init_ADC0.periph_addr = (uint32_t)(&ADC_RDATA(ADC0));//源數據塊首地址為:ADC0寄存器dma_init_ADC0.periph_inc = DMA_PERIPH_INCREASE_DISABLE;  //源數據塊地址不遞增dma_init_ADC0.periph_width = DMA_PERIPHERAL_WIDTH_16BIT; //源數據塊的數據寬度為16位dma_init_ADC0.memory_addr = (uint32_t)(&ADC0_Buffer);//目的數據首地址為:ADC0_Buffer[]dma_init_ADC0.memory_inc = DMA_MEMORY_INCREASE_ENABLE;//目的數據塊地址遞增dma_init_ADC0.memory_width = DMA_MEMORY_WIDTH_16BIT;//目的數據塊的數據寬度為16位dma_init_ADC0.number = (uint32_t)ADC0_Buffer_Size;//目的數據塊的數據長度dma_init_ADC0.priority = DMA_PRIORITY_ULTRA_HIGH;      //超高的優先級dma_init(DMA0,DMA_CH0,&dma_init_ADC0);//使用dma_init_struct數據結構初始化DMA0通道0配置"DMA0通道5工作模式"開始///dma_circulation_enable(DMA0,DMA_CH0);//使能"DMA0通道0循環工作模式"//DMA0觸發后,會按照指定的序號,循環觸發讀取ADC的值//在多通道AD轉換中,DMA使用循環工作模式比較好
//	dma_circulation_disable(DMA0, DMA_CH0);//不使能"DMA0通道0循環工作模式"dma_memory_to_memory_disable(DMA0, DMA_CH0); //不使能"DMA0通道0內存到內存傳輸模式"
配置"DMA0通道5工作模式"結束///
///配置串口DMA接收開結束dma_channel_enable(DMA0,DMA_CH0);//使能指定的DMA0通道0	
}void ADC0_Init(void)
{adc_deinit(ADC0);//reset ADC0adc_tempsensor_vrefint_enable();//channel 16 and 17 enable of ADC0 //使能溫度傳感器通道和內部參考電壓通道adc_mode_config(ADC_MODE_FREE);//只使用一個ADC,屬于獨立模式adc_special_function_config(ADC0,ADC_SCAN_MODE,ENABLE);//在多通道AD轉換,要使用"掃描模式"adc_special_function_config(ADC0,ADC_CONTINUOUS_MODE,ENABLE);//設置AD轉換為"連續模式"adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);//使用軟件觸發AD轉換,ADC trigger configadc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);//ADC data alignment configadc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL,2);//連續進行AD轉換的通道總數為2,在DMA傳輸中要知道有多少個通道參與AD轉換/* ADC regular channel config */adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_16, ADC_SAMPLETIME_71POINT5);//將ADC0中ADC_CHANNEL_16通道放在第0位置優先進行AD轉換,采樣時間為71.5個時鐘周期//配置讀取內部溫度adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_17, ADC_SAMPLETIME_71POINT5);//將ADC0中ADC_CHANNEL_17通道放在第1位置優先進行AD轉換,采樣時間為71.5個時鐘周期//配置讀取內部參考電壓adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);//使用軟件觸發AD轉換adc_external_trigger_config(ADC0,ADC_REGULAR_CHANNEL,ENABLE);//使能ADC規則通道組外部觸發,enable ADC regular channel group external triggeradc_enable(ADC0);//使能ADC0delay_ms(10);     //等待10msadc_calibration_enable(ADC0);//等待ADC0校準完成adc_dma_mode_enable(ADC0);//使能ADC轉DMA功能,ADC DMA function enableadc_software_trigger_enable(ADC0,ADC_REGULAR_CHANNEL);//觸發ADC0設備執行1次AD轉換//由于前面配置"ADC0為連續轉換模式",所以啟動轉換后,就可以連續執行AD轉換了
}void ADC0_To_DMA0_Init(void)
{rcu_periph_clock_enable(RCU_ADC0);//使能ADC0時鐘rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);//配置ADC時鐘8分頻//由于ADC最大時鐘頻率為14MHz,經過8分頻后,變為1.75MHz//	rcu_periph_clock_enable(RCU_GPIOA);//使能GPIOA端口時鐘
//	rcu_periph_clock_enable(RCU_GPIOB);
//	rcu_periph_clock_enable(RCU_GPIOC);//使能GPIOC端口時鐘
//	rcu_periph_clock_enable(RCU_GPIOD);
//	rcu_periph_clock_enable(RCU_GPIOE);
//	rcu_periph_clock_enable(RCU_GPIOF);
//	rcu_periph_clock_enable(RCU_GPIOG);//	rcu_periph_clock_enable(RCU_AF);rcu_periph_clock_enable(RCU_DMA0);
//	rcu_periph_clock_enable(RCU_DMA1);
//	rcu_periph_clock_enable(RCU_I2C1);
//	rcu_periph_clock_enable(RCU_ADC0);
//	rcu_periph_clock_enable(RCU_ADC2);
//	rcu_periph_clock_enable(RCU_ADC1);//使能ADC1時鐘
//  rcu_periph_clock_enable(RCU_TIMER1);//	gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE);//使用SW下載,不使用JTAG下載,管腳用作其它功能//  gpio_init(GPIOA,GPIO_MODE_AIN,GPIO_OSPEED_50MHZ,GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6);//配置PA4,PA5和PA6引腳為模擬輸入口//PA4復用到ADC01_IN4引腳,即ADC0/ADC1的第4通道//PA5復用到ADC01_IN5引腳,即ADC0/ADC1的第5通道//PA6復用到ADC01_IN6引腳,即ADC0/ADC1的第6通道
//	gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ,GPIO_PIN_4);
//	//配置PA4引腳為模擬輸入口,復用到ADC01_IN4引腳,即ADC0/ADC1的第4通道
//	gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ,GPIO_PIN_5);
//	//配置PA5引腳為模擬輸入口,復用到ADC01_IN5引腳,即ADC0/ADC1的第5通道
//	gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ,GPIO_PIN_6);
//	//配置PA6引腳為模擬輸入口,復用到ADC01_IN6引腳,即ADC0/ADC1的第6通道//  gpio_init(GPIOC,GPIO_MODE_AIN,GPIO_OSPEED_50MHZ,GPIO_PIN_3 | GPIO_PIN_4);//配置PC3和PC4引腳為模擬輸入口//PC3復用到ADC012_IN13引腳,即ADC0/ADC1/ADC2的第13通道//PC4復用到ADC01_IN14,即ADC0/ADC1的第14通道
//	gpio_init(GPIOC, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ,GPIO_PIN_3);
//	//配置PC3引腳為模擬輸入口,復用到ADC012_IN13引腳,即ADC0/ADC1/ADC2的第13通道
//	gpio_init(GPIOC, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ,GPIO_PIN_4);
//	//配置PC4引腳為模擬輸入口,復用到ADC01_IN14,即ADC0/ADC1的第14通道DMA0_DMA_CH0_config();ADC0_Init();
}/*
溫度(°C) = {(V25 - VSENSE) / Avg_Slope} + 25
V25 = VSENSE在25°C時的數值,這里取1.43V
Avg_Slope = 溫度與VSENSE曲線的平均斜率,4.3mV/°C
即:(1.43 - voltage) / 0.0043 + 25;
ST和GD的手冊里都寫著不同芯片最大偏差45度,
*/
void Read_TemperatureValue(void)
{uint8_t i;uint32_t sum1,sum2;uint16_t *p;float f;sum1=0;sum2=0;p=&ADC0_Buffer[0][0];for(i=0;i<ADC0_cnt;i++){sum1=*p+sum1;p++;//內部溫度數據累加sum2=*p+sum2;p++;//內部電壓數據累加}sum1=sum1/ADC0_cnt;//計算平均值sum2=sum2/ADC0_cnt;//計算平均值printf("\r\nADC0_16: %d ", sum1);f = sum1;f = f	* 3.300;f = f / 4096;  //轉換成電壓值單位為Vprintf("\r\nADC0_16_Voltage: %0.3fV", f);f = V25 -f;f =f / AvgSlope;f= f+25; //計算溫度值printf("\r\nTmoerature: %0.1f\r\n", f);printf("\r\nADC0_17: %d ", sum2);f = sum2;f = f	* 3.300;f = f / 4096;  //轉換成電壓值單位為Vprintf("\r\nInternalVoltage: %0.3fV\r\n", f);
}
#ifndef __ADC_H
#define __ADC_H#include "gd32f10x.h" //使能uint8_t,uint16_t,uint32_t,uint64_t,int8_t,int16_t,int32_t,int64_t#define V25       1.430   //V
#define AvgSlope  0.0043  //V/°Cextern void ADC0_To_DMA0_Init(void);
extern void Read_TemperatureValue(void);
#endif

main.c如下:
?

#include "gd32f10x.h" //使能uint8_t,uint16_t,uint32_t,uint64_t,int8_t,int16_t,int32_t,int64_t
#include "delay.h"#include "UART3.h"
#include "stdio.h"  //getchar(),putchar(),scanf(),printf(),puts(),gets(),sprintf()
#include "ADC.h"uint16_t volValue = 0;const char CPU_Reset_REG[]="\r\nCPU reset!\r\n";
int main(void)
{//NVIC_PRIGROUP_PRE4_SUB0:搶占優先級為4bit(取值為0~15),子優先級為0bit(沒有響應優先級)//NVIC_PRIGROUP_PRE3_SUB1:搶占優先級為3bit(取值為0~7),子優先級為1bit(取值為0~1)//NVIC_PRIGROUP_PRE2_SUB2:搶占優先級為2bit(取值為0~3),子優先級為2bit(取值為0~3)//NVIC_PRIGROUP_PRE1_SUB3:搶占優先級為1bit(取值為0~1),子優先級為3bit(取值為0~7)//NVIC_PRIGROUP_PRE0_SUB4:搶占優先級為0bit(沒有搶占優先級),子優先級為3bit(取值為0~15)nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0);//設置系統中斷優先級"搶占優先級為4bit,子優先級為0bit"delay_init();INTX_ENABLE();//開啟所有中斷UART3_Init(115200);//初始化UART3printf("%s",CPU_Reset_REG);//調試串口輸出"\r\nCPU reset!\r\n"ADC0_To_DMA0_Init();while(1){delay_ms(500);Read_TemperatureValue();}
}

?

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

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

相關文章

【electron】electron安裝過慢和打包報錯:Unable to load file:

文章目錄 一、安裝過慢問題:二、打包報錯&#xff1a;Unable to load file: 一、安裝過慢問題: 一直處于安裝過程 【解決】 #修改npm的配置文件 npm config edit#添加配置 electron_mirrorhttps://cdn.npm.taobao.org/dist/electron/二、打包報錯&#xff1a;Unable to load…

camera hal|如何學習一個新平臺

全網最具價值的Android Camera開發學習系列資料~ 作者:8年Android Camera開發,從Camera app一直做到Hal和驅動~ 歡迎訂閱,相信能擴展你的知識面,提升個人能力~ 我自己目前從事的是android camera hal 的工作,工作上接觸到的芯片平臺要么是高通的,要么是mtk的。 其實…

c語言作業

作業1&#xff1a; 關于實參和形參 形參是實參的一份臨時拷貝。 形參是在函數調用的時候才實例化&#xff0c;才開辟內存空間。 函數調用如果采用傳值調用&#xff0c;改變形象不影響實參。 改變形參不是影響實參。 作業2&#xff1a; 函數調用exec&#xff08;&#xf…

C++QT教程3——手冊4.11.1自帶教程(筆記)——創建一個基于Qt Widget的應用程序

文章目錄 創建一個基于Qt Widget的應用程序創建Text Finder項目素材文件 填補缺失的部分設計用戶界面完成頭文件完成源文件創建資源文件 編譯和運行程序 參考文章 創建一個基于Qt Widget的應用程序 本教程介紹如何使用Qt Creator創建一個小型Qt應用程序&#xff0c;名為Text F…

電腦IP地址錯誤無法上網怎么辦?

電腦出現IP地址錯誤后就將無法連接網絡&#xff0c;從而無法正常訪問互聯網。那么當電腦出現IP地址錯誤時該怎么辦呢&#xff1f; 確認是否禁用本地連接 你需要先確定是否禁用了本地網絡連接&#xff0c;如果發現禁用&#xff0c;則將其啟用即可。 啟用方法&#xff1a;點擊桌…

Spring 使用注解開發、代理模式、AOP

使用注解開發 在Spring4之后&#xff0c;要使用注解開發&#xff0c;必須要保證AOP的包導入了 項目搭建&#xff1a; 在配置文件中導入約束&#xff0c;增加注解支持 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.spri…

uniapp把城市換成26個字母和城市排序

后端返回的數據 我們要得效果 <template><view><view v-for"(value,key) in cities" :key"key"><view style"color: red;"> {{ key }} </view><view style"border: 1rpx solid black;"><tex…

PostgreSql 備份恢復

一、概述 數據庫備份一般可分為物理備份和邏輯備份&#xff0c;其中物理備份又可分為物理冷備和物理熱備&#xff0c;下面就各種備份方式進行詳細說明&#xff08;一般情況下&#xff0c;生產環境采取的定時物理熱備邏輯備份的方式&#xff0c;均是以下述方式為基礎進一步研發編…

Linux 基礎

鞏固基礎&#xff0c;砥礪前行 。 只有不斷重復&#xff0c;才能做到超越自己。 能堅持把簡單的事情做到極致&#xff0c;也是不容易的。 linux的目錄結構 linux的文件系統采用樹狀的目錄結構&#xff0c;在此結構的最上層是根目錄“/”&#xff0c; 然后在此目錄下再創建其他…

【算法——雙指針】LeetCode 1089 復寫零

千萬不要被這道題標注著“簡單”迷惑了&#xff0c;實際上需要注意的細節很多。 題目描述&#xff1a; 解題思路&#xff1a; 正序遍歷&#xff0c;確定結果數組的最后一個元素所在的位置&#xff1b;知道最后一個元素的位置后倒序進行填充。 先找到最后一個需要復寫的數 先…

javaee dom4j讀取xml文件

引入jar包 dom4j-1.6.1.jar 創建xml文件 <?xml version"1.0" encoding"UTF-8"?> <books><book id"1"><title ID"t1">背影</title><price>88</price><author>三毛</author>…

Excel表格制作,快速提升效率好方法!

“作為一個剛開始工作的職場新人&#xff0c;每天要做各種不同的表格&#xff0c;真的讓我很崩潰&#xff0c;感覺我對這些表格制作一點都不了解&#xff0c;Excel表格制作有什么比較好的方法嗎&#xff1f;” Excel作為一款廣泛應用于各個領域的管理和分析工作&#xff0c;給我…

【STM32】FreeRTOS消息隊列和信號量學習

一、消息隊列&#xff08;queue&#xff09; 隊列是一種用于實現任務與任務之間&#xff0c;任務與中斷之間消息交流的機制。 注意&#xff1a;1.數據的操作是FIFO模式。 2.隊列需要明確數據的大小和隊列的長度。 3.寫和讀都會出現堵塞。 實驗&#xff1a;創建一個消息隊列…

解決 Oracle 數據庫中表被鎖問題的方案和方法

我們經常會遇到表被鎖的情況&#xff0c;這可能會嚴重影響數據庫的性能和可用性。我將與大家分享如何識別、分析和解決這些問題&#xff0c;以及如何使用特定的 SQL 查詢來執行解鎖操作。 了解表鎖的原因 首先&#xff0c;讓我們來了解一下導致表被鎖的常見原因。長時間運行的…

(四)Unity開發Vision Pro——參考文檔

4.參考文檔 4.1 支持的功能和組件 4.1.1 支持的 Unity 功能和組件 大多數 Unity 組件無需修改即可在此平臺上運行 - 包括大多數自定義 MonoBehaviours、動畫邏輯、物理、輸入處理、資產管理、AI 等。然而&#xff0c;需要渲染的組件需要特殊的支持。因此&#xff0c;一些組件…

qt5.15.2 使用mysql8.1

報錯&#xff1a; QMYSQL driver not loaded 報錯&#xff1a;無 QMYSQL 使用 QStringList drivers QSqlDatabase::drivers(); //獲取現在可用的數據庫驅動 foreach(QString driver, drivers) qDebug() << driver; “QSQLITE” “QMARIADB” “QMYSQL” “QMYSQL3” “…

Linux常用命令——dmidecode命令

在線Linux命令查詢工具 dmidecode 在Linux系統下獲取有關硬件方面的信息 補充說明 dmidecode命令可以讓你在Linux系統下獲取有關硬件方面的信息。dmidecode的作用是將DMI數據庫中的信息解碼&#xff0c;以可讀的文本方式顯示。由于DMI信息可以人為修改&#xff0c;因此里面…

網絡編程的使用

文章目錄 基礎代碼URL類進行傳輸編碼解碼 協議TCPUDPhttp PORT端口協議的實現TCPUDP 模擬服務器 基礎代碼 最后一個是&#xff1a;只要再timeout時間內連接上就是true URL類 導了一個common-iojar包&#xff0c;那個IOUtils就是那個里面的工具類 進行傳輸編碼解碼 協議 TC…

多線程:線程池

線程池 提前創建多個線程放入線程池中&#xff0c;使用時直接獲取&#xff0c;使用完直接放入池中&#xff1b;可以避免頻繁創建銷毀&#xff0c;實現重復利用&#xff0c;類似生活中的公共交通工具。好處&#xff1a;提高相應速度&#xff1b;降低資源消耗&#xff1b;便于線…

【Spring Cloud +Vue+UniApp】智慧建筑工地平臺源碼

智慧工地源碼 、智慧工地云平臺源碼、 智慧建筑源碼支持私有化部署&#xff0c;提供SaaS硬件設備運維全套服務。 前言&#xff1a;互聯網建筑工地&#xff0c;是將互聯網的理念和技術引入建筑工地&#xff0c;從施工現場源頭抓起&#xff0c;最大程度的收集人員、安全、環境、材…