基于STC12C5A60S2系列1T 8051單片機實現一主單片機與一從單片機進行雙向串口通信功能

基于STC12C5A60S2系列1T 8051單片機實現一主單片機與一從單片機進行雙向串口通信功能

  • STC12C5A60S2系列1T 8051單片機管腳圖
  • STC12C5A60S2系列1T 8051單片機串口通信介紹
  • STC12C5A60S2系列1T 8051單片機串口通信的結構
  • 基于STC12C5A60S2系列1T 8051單片機串口通信的特殊功能寄存器列表
    • 基于STC12C5A60S2系列1T 8051單片機串口通信用到的特殊功能寄存器
      • STC12C5A60S2系列1T 8051單片機輔助寄存器AUXR
      • STC12C5A60S2系列1T 8051單片機輔助寄存器AUXR1
      • 串口1控制寄存器SCON
      • 串口電源控制寄存器PCON
      • 串口數據緩沖寄存器SBUF
      • 串口輔助寄存器AUXR
      • 串口中斷寄存器
  • 基于STC12C5A60S2系列1T 8051單片機串口1通信工作模式
    • 串口1通信模式0
    • 串口1通信模式1
    • 串口1通信模式2
    • 串口1通信模式3
  • 串口通信波特率設置
  • 基于STC12C5A60S2系列1T 8051單片機實現一主單片機與一從單片機進行雙向串口通信功能介紹
    • 串口通信簡單介紹
    • 基于STC12C5A60S2系列1T 8051單片機實現一主單片機與一從單片機進行雙向串口通信功能電路連接及工作原理
    • 電路連接
    • 工作原理
  • 基于STC12C5A60S2系列1T 8051單片機實現一主單片機與一從單片機進行雙向串口通信功能編程
    • 主單片機程序
    • 從單片機程序
  • 基于STC12C5A60S2系列1T 8051單片機實現一主單片機與一從單片機進行雙向串口通信功能實現結果

STC12C5A60S2系列1T 8051單片機管腳圖

在這里插入圖片描述在這里插入圖片描述# STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式及配置在這里插入圖片描述# STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式介紹在這里插入圖片描述在這里插入圖片描述

STC12C5A60S2系列1T 8051單片機串口通信介紹

在這里插入圖片描述在這里插入圖片描述在這里插入圖片描述

STC12C5A60S2系列1T 8051單片機串口通信的結構

基于STC12C5A60S2系列1T 8051單片機串口通信的特殊功能寄存器列表

在這里插入圖片描述

基于STC12C5A60S2系列1T 8051單片機串口通信用到的特殊功能寄存器

STC12C5A60S2系列1T 8051單片機輔助寄存器AUXR

在這里插入圖片描述
作用:用來設置STC12C5A60S2系列1T 8051單片機串口通信類型、波特率

STC12C5A60S2系列1T 8051單片機輔助寄存器AUXR1

在這里插入圖片描述
作用:用來設置STC12C5A60S2系列1T 8051單片機串口通信引腳切換

串口1控制寄存器SCON

在這里插入圖片描述
作用:用來設置STC12C5A60S2系列1T 8051單片機串口通信以下功能
(1)、設置串口通信工作模式
(2)、設置串口方式2或方式3多機通信
(3)、設置串口通信允許接收
(4)、設置串口通信在方式2或方式3下發送第9位數據
(5)、設置串口通信通信在方式2或方式3下接收第9位數據
(6)、設置串口通信發送中斷請求
(7)、設置串口通信接收中斷請求

串口電源控制寄存器PCON

在這里插入圖片描述
作用:用來設置STC12C5A60S2系列1T 8051單片機串口通信以下功能
(1)、設置串口通信波特率選擇
(2)、設置串口通信幀錯誤檢測有效控制

串口數據緩沖寄存器SBUF

在這里插入圖片描述在這里插入圖片描述
作用:用來設置STC12C5A60S2系列1T 8051單片機串口通信發送或接收數據

串口輔助寄存器AUXR

在這里插入圖片描述在這里插入圖片描述
作用:用來設置STC12C5A60S2系列1T 8051單片機串口通信類型、波特率

串口中斷寄存器

在這里插入圖片描述
作用:用來設置STC12C5A60S2系列1T 8051單片機串口通信中斷允許、中斷優先級

基于STC12C5A60S2系列1T 8051單片機串口1通信工作模式

串口1通信模式0

在這里插入圖片描述

串口1通信模式1

在這里插入圖片描述在這里插入圖片描述

串口1通信模式2

在這里插入圖片描述在這里插入圖片描述

串口1通信模式3

在這里插入圖片描述在這里插入圖片描述

串口通信波特率設置

在這里插入圖片描述在這里插入圖片描述在這里插入圖片描述在這里插入圖片描述在這里插入圖片描述

基于STC12C5A60S2系列1T 8051單片機實現一主單片機與一從單片機進行雙向串口通信功能介紹

串口通信簡單介紹

在這里插入圖片描述在這里插入圖片描述在這里插入圖片描述在這里插入圖片描述在這里插入圖片描述在這里插入圖片描述在這里插入圖片描述在這里插入圖片描述在這里插入圖片描述在這里插入圖片描述

基于STC12C5A60S2系列1T 8051單片機實現一主單片機與一從單片機進行雙向串口通信功能電路連接及工作原理

電路連接

在這里插入圖片描述在這里插入圖片描述

工作原理

主單片機先給從單片機發送數據 從單片機接收主單片機發送來的數據后 再把這個數據返回給主單片機發送數據

基于STC12C5A60S2系列1T 8051單片機實現一主單片機與一從單片機進行雙向串口通信功能編程

主單片機程序

main.c

#include <stc12c5a60s2.h>
#include "Uart.h"
#include "Timer0.h"
#include "Key.h"
//#include "Digitron.h"
#include "stdio.h"
#define uchar unsigned char//自定義無符號字符型為uchar
#define uint unsigned int//自定義無符號整數型為uint
sbit LED = P1^6;//聲明單片機P1.6端口為LED接口 void PortModeSet()//端口模式設置函數
{P0M1 = 0x00;P0M0 = 0x00;P1M1 = 0x00;P1M0 = 0x00;P2M1 = 0x00;P2M0 = 0x00;P3M1 = 0x00;P3M0 = 0x00;P4M1 = 0x00;P4M0 = 0x00;}void main()//主函數
{
//  uchar Data0 = 88;//定義數據變量為88
//  uint Data1 = 1250;//定義數據變量為1250
//  uint Data2 = 12.5;//定義數據變量為12.5
//  uint Data = 55;//定義數據變量為55
//  uchar ShiWeiData = Data / 10 + '0';//定義十位數值變量 取Data = 55 把數字55的十位數字5分解出來 注意分解出來的5是'5'表示字符5不是數字5 把字符5寫入單片機數據緩存器 單片機數據緩存器會把字符5發送給串口調試助手軟件接收區 如果串口調試助手軟件接收區選十六進制數模式顯示 那么字符5以ASCII碼對應的十六進制數模式給顯示出0x35來 如果串口調試助手軟件接收區選文本模式顯示 那么字符5以文本模式給顯示出數字5來 為什么數據分解后+'0'? 因為單片機運算字符是字符對應的ASCII碼的二進制數值或十進制數值或十六進制數值 這里取單片機運算字符對應的ASCII碼十進制數值 如:字符'0'的ASCII碼的十進制數是48 字符'1'的ASCII碼的十進制數是49 字符'2'的ASCII碼的十進制數是50 .... 字符'9'的ASCII碼的十進制數是57 而編譯器對于'0'會自動視為是'0'ASCII碼的十進制數48 舉例:拿Data = 251來分解 則有:Data/100=2 Data/10%10=5 data%10=1 要把數據型251轉化成字符串為"251" 可拆開看成'2' '5' '1' 它們對應的ASCII碼十進制數分別為50 53 49 而Data/100=2+'0'=2+48=50 Data/10%10=5+'0'=5+48=53 data%10=1+'0'=1+48=49 算出50 53 49這三個十進制數分別對上字符'2' '5' '1'的ASCII碼十進制數為50 53 49 這就是為什么數據分解后+'0'的原因  
//  uchar GeWeiData = Data % 10 +'0';//定義個位數值變量 取Data = 55 把數字55的個位數字5分解出來 注意分解出來的5是'5'表示字符5不是數字5 把字符5寫入單片機數據緩存器 單片機數據緩存器會把字符5發送給串口調試助手軟件接收區 如果串口調試助手軟件接收區選十六進制數模式顯示 那么字符5以ASCII碼對應的十六進制數模式給顯示出0x35來 如果串口調試助手軟件接收區選文本模式顯示 那么字符5以文本模式給顯示出數字5來 為什么數據分解后+'0'? 解釋同上PortModeSet();//端口模式設置函數Uart1Init();//串行口1工作模式1的8位串行口波特率可變初始化函數 波特率為9600bps 晶振為12MHzTimer0Init();//定時器0的16位定時模式1用12分頻定時2ms初始化函數 晶振為12MHz
//  DigitronBootDisplay();//數碼管開機顯示函數
//	printf("Wait For Serial Communication Test Start....\r\n");//打印提示語句
//  printf("Please Send a Frame Of Data....\r\n");//打印提示語句while(1)//主循環{ KeyScanResult();//按鍵掃描結果函數
//   SendData('8');//注意'8'表示字符8不是數字8 把字符8寫入單片機數據緩存器 單片機數據緩存器會字符8發送給串口調試助手軟件接收區 如果串口調試助手軟件接收區選十六進制數模式顯示 那么字符8以ASCII碼對應的十六進制數模式給顯示出0x38來 如果串口調試助手軟件接收區選文本模式顯示 那么字符8以文本模式給顯示出數字8來
//   SendData('\r');//回車 ASCII碼對應的十六進制數為0x0a
//   SendData('\n');//換行 ASCII碼對應的十六進制數為0x0d
//   SendString("Hello World!\r\n");//發送字符串函數
//   printf("Hello World!\r\n");//打印字符串
//   printf("Data0 = %bu\r\n",Data0);//打印無符號字符型數據
//   printf("Data1 = %u\r\n",Data1);//打印無符號整數型數據
//   printf("Data2 = %f\r\n",Data2);//打印單精度浮點型數據
//   SendData('a');//把字符a寫入單片機數據緩存器 單片機數據緩存器會字符a發送給串口調試助手軟件接收區 如果串口調試助手軟件接收區選十六進制數模式顯示 那么字符a以ASCII碼對應的十六進制數模式給顯示出0x61來 如果串口調試助手軟件接收區選文本模式顯示 那么字符a以文本模式給顯示出字符a來  
//   SendData('1');//注意'1'表示字符1不是數字1 把字符1寫入單片機數據緩存器 單片機數據緩存器會字符1發送給串口調試助手軟件接收區 如果串口調試助手軟件接收區選十六進制數模式顯示 那么字符1以ASCII碼對應的十六進制數模式給顯示出0x31來 如果串口調試助手軟件接收區選文本模式顯示 那么字符1以文本模式給顯示出數字1來  
//   SendData(ShiWeiData);//發送數據Data的十位數
//   SendData('\r');//換行
//   SendData('\n');//回車
//   SendData(GeWeiData);//發送數據Data的個位數if(ReceiveOverDataFlag == 1)//判斷接收完數據標志位變量是否置1 即主單片機串行口數據緩存器已經接收完從單片機發送來的數據{ReceiveOverDataFlag = 0;//接收完數據標志位變量清0LED = 0;//點亮LED燈KeyPressNumber = ReceiveData;//接收數據變量含有的數值賦給按鍵按下數值變量 即主單片機串行口數據緩存器接收從單片機發送來的數據賦給按鍵按下數值變量
//    RS485DIR = 1;//啟動RS485發送數據控制
//    ReceiveData = ReceiveData + 1;//接收數據變量累加
//    SendData(ReceiveData);//單片機通過串行口通信把來自計算機串口調試助手軟件從發送區發送來的數據發回給計算機串口調試助手軟件接收區顯示出來
//    RS485DIR = 0;//啟動RS485接收數據控制 準備下一次收發數據循環
//    printf("\r\n");//打印換行回車
//    printf("%bd\r\n",ReceiveData);//打印整數數據}}}

Uart.c

/*****關于8051系列單片機定時器溢出率、波特率和定時器初值(定時計數初值)之間計算的知識點*****/
/****
一、定時器溢出率計算公式
1、定時器溢出率:定時器每秒溢出的次數
2、定時器溢出率計算公式表定時方式           分頻方式                      公式
方式1:16位定時器  12分頻(即12T 默認值)  Ft=晶振頻率/12/(65536-定時器初值)
方式2:8位定時器   12分頻(即12T 默認值)  Ft=晶振頻率/12/(256-定時器初值)
方式1:16位定時器      1分頻(即1T)      Ft=晶振頻率/1/(65536-定時器初值)
方式2:8位定時器       1分頻(即1T)      Ft=晶振頻率/1/(256-定時器初值)
二、波特率計算公式
1、波特率:每秒傳輸二進制位數的多少
2、波特率計算公式表定時方式             分頻方式                        公式
方式1:16位定時器T1  12分頻(即12T 默認值)  波特率=晶振頻率/12/(65536-定時器初值)/4
方式2:8位定時器T1   12分頻(即12T 默認值)  波特率=晶振頻率/12/(256-定時器初值)*2^SMOD/32
方式1:16位定時器T2  12分頻(即12T 默認值)  波特率=晶振頻率/12/(65536-定時器初值)/4
方式1:16位定時器T1      1分頻(即1T)      波特率=晶振頻率/1/(65536-定時器初值)/4
方式2:8位定時器T1       1分頻(即1T)      波特率=晶振頻率/1/(256-定時器初值)*2^SMOD/32
方式1:16位定時器T2      1分頻(即1T)      波特率=晶振頻率/1/(65536-定時器初值)/4
三、根據波特率計算定時器初值(定時器定時計數)定時方式             分頻方式                        公式
方式1:16位定時器T1  12分頻(即12T 默認值)  定時器初值(定時計數)=65536-晶振頻率/(48*波特率)
方式2:8位定時器T1   12分頻(即12T 默認值)  定時器初值(定時計數)=256-晶振頻率*2^SMOD/(384*波特率)
方式1:16位定時器T2  12分頻(即12T 默認值)  定時器初值(定時計數)=65536-晶振頻率/(48*波特率)
方式1:16位定時器T1      1分頻(即1T)      定時器初值(定時計數)=65536-晶振頻率/(4*波特率)
方式2:8位定時器T1       1分頻(即1T)      定時器初值(定時計數)=256-晶振頻率*2^SMOD/(32*波特率)
方式1:16位定時器T2      1分頻(即1T)      定時器初值(定時計數)=65536-晶振頻率/(4*波特率)
*****/
#include "Uart.h"
#include "stdio.h"
#define	uchar unsigned char	//定義無符號字符
#define	uint  unsigned int	//定義無符號整形
bit ReceiveOverDataFlag = 0;//定義接收完數據標志位變量為0
uint ReceiveData = 0;//定義接收數據變量為0void Uart1Init()//串行口1工作模式1的8位串行口波特率可變初始化函數 波特率為9600bps 晶振為12MHz
{SCON = 0x50;//工作模式1的8位串行口波特率可變AUXR &= 0xBF;//定時器時鐘12T模式AUXR &= 0xFE;//串口1選擇定時器1為波特率發生器PCON &= 0x7f;//波特率不加倍TMOD &= 0x0f;//定時器/計數器工作模式清0TMOD |= 0x20;//設定定時器/計數器為定時器 工作模式為8位自動重裝定時器1模式2TH1 = 0xfd;//設定定時器1高八位初值TL1 = 0xfd;//設定定時器1低八位初值ET1 = 0;//禁止定時器1中斷ES = 1;//允許串行口1中斷EA = 1;//開總中斷TR1 = 1;//打開定時器1
//  RS485DIR = 0;//啟動RS485接收數據控制}void MasterSendData(uint Data)//主單片機發送數據函數 即主單片機給從單片機發送數據
{SBUF = Data;//把數據變量Data含有數據寫入主單片機數據緩存器 主單片機數據緩存器會把數據變量Data含有數據發送給從單片機數據緩存器while(!TI)//當數據發送結束標志位變量TI為0 表示數據還沒發送完 若數據發送結束標志位變量TI為1 表示數據已發送完 從而觸發串口中斷 最后需在串口中斷程序中或者在其他程序中把數據發送結束標志位變量TI清0 才能進行下一次發送TI = 0<

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

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

相關文章

QT---day5,通信

1、思維導圖 2、TCp 服務器 #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> #include <QTcpServer> #include <QList> #include <QTcpSocket> #include <QMessageBox> #include <QDebug> #include <QTcpServer> QT_B…

鐳速實現利用Libarchive實現高效、智能的文件傳輸和管理

在前一篇報道中&#xff0c;我們闡述了Libarchive這一開源庫的強大功能&#xff0c;它專門用于處理歸檔文件。通過整合Libarchive&#xff0c;鐳速在包括Windows和Linux在內的多個操作系統上提供了在線解壓縮服務&#xff0c;為企業構建了一個既強大又安全的文件傳輸系統&#…

【代碼分享】使用HTML5的Canvas繪制編碼說明圖片

最急在工作中遇到一個需求&#xff0c;根據給定的編碼生成編碼說明&#xff0c;像下面這樣的效果。 不同含義的編碼用橫杠分割&#xff0c;然后每個編碼下面用箭頭指明具體的含義。下面是我使用canvas實現的代碼。具體的編碼寬度大家可以根據實際情況進行調整&#xff0c;目前…

Ranger 面試題及答案整理,最新面試題

Ranger 的安全模型是如何設計的&#xff1f; Ranger的安全模型設計主要基于訪問控制和安全策略的管理&#xff0c;它通過以下幾個關鍵組件實現&#xff1a; 1、策略管理&#xff1a; Ranger 提供了一個中央管理平臺&#xff0c;用于定義、更新和管理安全策略。這些策略根據資…

基于RT-Thread的HC-SR04超聲波驅動

前言 本次驅動用的是這款超聲波&#xff0c;超聲波的驅動大同小異&#xff0c;均可參考 一、引腳定義 引腳功能VCC接直流5V電TRIG接外部電路的TRIG端&#xff0c;向此引腳輸入10us以上的高電平可觸發超聲波測距ECHO接外部電路的ECHO端&#xff0c;測距結束時該引腳會輸出一…

Python框架Django入門教程

Django 是一個使用 Python 編程語言開發的、免費且開源的 Web 應用框架。它遵循 "DRY&#xff08;Dont Repeat Yourself&#xff09;" 原則&#xff0c;旨在簡化創建功能豐富的、高效率的 Web 網站。Django 提供了模型-視圖-控制器&#xff08;MVC&#xff09;架構的…

時尚圈的節制美學 — 奧柔拉 AVRALA的獨特設計理念

在這個多元化的時代&#xff0c;女性正在經歷一場前所未有的角色變革。她們不再僅僅滿足于傳統的社會角色&#xff0c;而是勇敢地追求個人職業發展和自我實現。在這樣的背景下&#xff0c;服飾不僅僅是外在的裝飾&#xff0c;更是內心故事的講述者、個性自我的表達者、身份歸屬…

KaiOS Data PDN 數據建立流程

代碼邏輯 APN創建 在 DataCallManager.jsm中,會對所有apnsetting創建一個datacall,其中會包含dataprofile的成員(通過apn參數來創建),在之后的流程用于直接發送到modem建立PDN。 PDN建立 1、DataCallManager.jsm -dcInterface.setupDataCall //RILNetworkInterface.c…

C語言內存泄漏及檢測方法

目錄 1. 內存泄漏概述 1.1 內存泄漏定義 1.2 內存泄漏的危害 1.3 內促泄漏的原因 2. C語言中的內存管理 2.1 C語言內存分配方式 2.2 C語言內存管理函數 2.3 動態內存管理注意事項 3. 內存泄漏的檢測與定位 3.1 內存泄漏檢測工具 3.2 內存泄漏定位方法 3.3 內存泄漏…

NX/UG二次開發—3D幾何—多邊形內部最大圓

多邊形內部最大圓&#xff0c;為什么不能說最大內切圓&#xff1f;如果正方形或正凸多邊形&#xff0c;最大內部圓是與邊相切的&#xff0c;但對于不規則多邊形&#xff0c;很多情況是正好經過一些凹點。 本次介紹在NX中計算封閉邊界內部最大圓&#xff1a; 1、首先按順序排序…

Spring、SpringMVC

一、Spring框架中的單例Bean是線程安全的嗎&#xff1f; 【默認單例的情況下】Spring Bean并沒有可變的狀態&#xff08;如Service類和DAO類&#xff09;&#xff0c;即只能查不能改&#xff0c;所以沒有并發問題&#xff0c;所以某種程度上來說Spring的單例Bean是線程安全的。…

【ZZULI數據結構實驗】壓縮與解碼的鑰匙:赫夫曼編碼應用

&#x1f4c3;博客主頁&#xff1a; 小鎮敲碼人 &#x1f49a;代碼倉庫&#xff0c;歡迎訪問 &#x1f680; 歡迎關注&#xff1a;&#x1f44d;點贊 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f30f; 任爾江湖滿血骨&#xff0c;我自踏雪尋梅香。 萬千浮云遮碧…

Faiss原理及使用總結

Faiss&#xff08;Facebook AI Similarity Search&#xff09;是一個用于高效相似性搜索和密集向量聚類的庫。 一、原理 向量表示與相似度度量&#xff1a;在Faiss中&#xff0c;數據通常被表示為高維向量&#xff0c;這些向量可以來自深度學習模型的特征提取&#xff0c;也可…

2024-05-11 問AI:在深度學習中,學習率是什么

文心一言 在深度學習中&#xff0c;**學習率&#xff08;Learning Rate&#xff09;**是一個非常重要的超參數&#xff0c;它控制著模型在訓練過程中參數更新的步長。具體來說&#xff0c;學習率決定了在每次迭代&#xff08;或稱為一個epoch&#xff09;中&#xff0c;模型根…

前端工程化之包管理器

這里寫目錄標題 什么是包包管理工具常用的包管理工具npmnpm 基本使用初始化搜索工具包下載安裝包導入 npm 包基本流程生產依賴與開發依賴全局安裝安裝全部依賴安裝指定版本的包刪除依賴包 cnpm全局安裝nrm 的使用 yarn全局安裝yarn 常用命令 pnpm 【推薦使用】全局安裝 什么是包…

我國吻合器市場規模不斷擴大 國產化率有所增長

我國吻合器市場規模不斷擴大 國產化率有所增長 吻合器是替代手工切除或縫合的一種醫療器械&#xff0c;其工作原理與訂書機十分相似&#xff0c;可利用鈦釘對組織進行離斷或吻合。經過多年發展&#xff0c;吻合器種類逐漸增多&#xff0c;根據手術方式不同&#xff0c;吻合器大…

【JavaEE 初階(三)】多線程代碼案例

?博主主頁: 33的博客? ??文章專欄分類:JavaEE?? &#x1f69a;我的代碼倉庫: 33的代碼倉庫&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;關注我帶你了解更多線程知識 目錄 1.前言2.單例模式2.1餓漢方式2.2餓漢方式 3.阻塞隊列3.1概念3.2實現 4.定時器4.1概念4.…

支付寶小程序如何去除頁面下拉回彈

描述&#xff1a;支付寶小程序頁面下拉時會產生回彈&#xff0c;如果頁面上有拖拽功能&#xff0c;會有影響 解決方法&#xff1a; 頁面xx.config.js中設置&#xff1a;allowsBounceVertical: “NO” 官方文檔&#xff1a;https://opensupport.alipay.com/support/FAQ/7110b5d…

WT32-ETH01作為TCP Client進行通訊

目錄 模塊簡介WT32-ETH01作為TCP Client設置電腦作為TCP Server設置連接并進行通訊總結 模塊簡介 WT32-ETH01網關主要功能特點: 采用雙核Xtensa⑧32-bit LX6 MCU.集成SPI flash 32Mbit\ SRAM 520KB 支持TCP Server. TCP Client, UDP Server. UDP Client工作模式 支持串口、wif…