網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
今天這篇文章帶大家學(xué)習(xí)下C#中的串口通訊。在日常的開(kāi)發(fā)工作中,如果工作內(nèi)容是CS方向的同學(xué)應(yīng)該很容易接觸到串口通訊方面的業(yè)務(wù)需求。那么也就很容易想到C#中SerialPort類(lèi),它就是專(zhuān)門(mén)來(lái)處理串口通訊相關(guān)的。
了解什么是串口通訊
串口通訊是指外設(shè)和計(jì)算機(jī)間通過(guò)數(shù)據(jù)信號(hào)線,地線,控制線等,按位進(jìn)行傳輸數(shù)據(jù)的一種通訊方式。
這種通訊方式使用的數(shù)據(jù)線少,在遠(yuǎn)距離通信中可以節(jié)約成本,但其傳輸速度比并行通訊慢。
串口是計(jì)算機(jī)上一種非常通用的設(shè)備通訊協(xié)議。大多數(shù)計(jì)算機(jī)包含兩個(gè)基于RS-232的串口。
串口也是儀器儀表設(shè)備通用的通訊協(xié)議,很多GPIB兼容的設(shè)備也帶有RS-232口,同時(shí)串口通信協(xié)議也可以用于獲取遠(yuǎn)程設(shè)備采集的數(shù)據(jù)。
串行接口是一種可以將接受來(lái)自CPU的并行數(shù)據(jù)字符轉(zhuǎn)換為連續(xù)的串行數(shù)據(jù)流發(fā)送出去,同時(shí)也可將接受的串行數(shù)據(jù)流轉(zhuǎn)換為并行的數(shù)據(jù)字符供給CPU的器件。
一般完成這種功能的電路,我們稱(chēng)為串行接口電路。
串行按位(bit)發(fā)送和接收字節(jié),盡管比按字節(jié)(byte)的并行通信慢,但是串口可以在使用一根線發(fā)送數(shù)據(jù)的同時(shí)用另一根線接收數(shù)據(jù)。它很簡(jiǎn)單并且能夠?qū)崿F(xiàn)遠(yuǎn)距離通信。
這里提一句,我們筆記本的USB口,它不是串口,它是所謂的U口,我們的串口如果需要插入到USB口,那么就需要一個(gè)RS-232轉(zhuǎn)U口的轉(zhuǎn)換器才可以。
這里需要注意下,一般我們的硬件工程師都會(huì)在自己的硬件設(shè)備都內(nèi)置這個(gè)小轉(zhuǎn)換設(shè)備,很方便。
C#中的串口通訊SerialPort
從.NET Framework 2.0開(kāi)始,微軟就默認(rèn)提供了System.IO.Ports.SerialPort類(lèi),根據(jù)SerialPort類(lèi)提供的簡(jiǎn)單操作步驟,可以很容易的完成串口的信息收發(fā)程序,從特定的串口中接收到數(shù)據(jù)也可以進(jìn)行數(shù)據(jù)的發(fā)送。
關(guān)于SerialPort類(lèi)的應(yīng)用也很容易,可以根據(jù)微軟官方的介紹進(jìn)行使用。
- 配置SerialPort的名稱(chēng),端口號(hào),波特率等。
- 打開(kāi)/關(guān)閉串口
- 接收/發(fā)送數(shù)據(jù)
SerialPort mySerialPort = new SerialPort("COM2"); mySerialPort.BaudRate = 9600; mySerialPort.Parity=Parity.None; mySerialPort.StopBits = StopBits.One; mySerialPort.DataBits = 8; mySerialPort.Handshake = Handshake.Non; mySerialPort.DataReceived += new SerialDataReceivedEvenHandler(DataReceive_Method); mySerialPort.Open(); mySerialPort.Close();
發(fā)送數(shù)據(jù)
using System.IO.Ports; private static void SendSampleData() { SerialPort port = new SerialPort( "COM1", 9600, Parity.None, 8, StopBits.One); port.Open(); port.Write("Hello World"); port.Write(new byte[] { 0x0A, 0xE2, 0xFF }, 0, 3); port.Close(); }
namespace SerialPortExample { class SerialPortProgram { private SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); [STAThread] static void Main(string[] args) { new SerialPortProgram(); } private SerialPortProgram() { Console.WriteLine("Incoming Data:"); port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); port.Open(); Application.Run(); } private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) { Console.WriteLine(port.ReadExisting()); } }
日常串口的使用多數(shù)情況是和線程進(jìn)行的,一般都是在子線程中做這些耗時(shí)和重復(fù)的工作,在主線程或者界面只進(jìn)行數(shù)據(jù)的展示處理即可。
在子線程的處理過(guò)程中需要特別處理串口的打開(kāi)和關(guān)閉,要及時(shí)關(guān)閉串口的狀態(tài),防止出現(xiàn)無(wú)法捕獲的異常錯(cuò)誤。
原文鏈接:https://blog.csdn.net/sinat_23966857/article/details/122676607
相關(guān)推薦
- 2022-06-22 配置Git并從GitHub上克隆項(xiàng)目_其它綜合
- 2022-03-27 3個(gè)適合新手練習(xí)的python小游戲_python
- 2022-05-20 ElasticSearch 7.X系列之:查詢分析索引磁盤(pán)使用空間_disk_usage
- 2022-10-23 Redis?如何清空所有數(shù)據(jù)_Redis
- 2022-04-24 GBase?8s數(shù)據(jù)庫(kù)主鍵約束、唯一約束和唯一索引的區(qū)別解析_數(shù)據(jù)庫(kù)其它
- 2022-08-21 python數(shù)字圖像處理之基本形態(tài)學(xué)濾波_python
- 2022-02-07 解決 laravels 無(wú)法接收微信回調(diào)的參數(shù)問(wèn)題
- 2022-07-12 從GitHub(git)上指定分支clone代碼
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支