完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1.什么是串口及串口通信?
串口全称串行接口,是采用串行通信方式的扩展接口。 通俗的来说,例如我们电脑等设备用的USB接口类似,串口功能类似USB,都是用于数据传输的工具,也是一种非常通用的设备通信协议。 串口通信就是计算机和外设之间通过数据线相连按位传输数据,通过向串口发送的电信号可以控制终端器械以及设备。比如我们用电脑给单片机发送指令,就是USB转串口来控制单片机的方式。 如何理解串口,UART, RS232, RS485?: 2.创建模拟串口 一开始我们接触串口的时候,电脑不一定有现成的串口可以用,就要添加模拟串口来做接下来的工作。 在网上找到一个可用的模拟软件。 该软件有点小bug,有的显示不全,但是不影响操作。 操作步骤很简单。 下图可以看到新增了几个模拟的串口 3.使用c#下的SerialPort来简单进行通信 (1)连接 SerialPort sp=new SerialPort(); sp.PortName = "COM1"; sp.BaudRate = 115200; sp.DataBits = 8; sp.StopBits = (StopBits)1; sp.ReadTimeout = 5; sp.Open(); 上面的属性: [tr]属性说明[/tr]
sp.Close(); (3)发送 public void SendData() { try { sp.Encoding = EncodingType; sp.Write(richTextBox1.Text)); } catch (Exception e) { throw e; } } (4)接收 绑定接收事件: sp.DataReceived += new SerialDataReceivedEventHandler(DataReceived); private void DataReceived(object sender, SerialDataReceivedEventArgs e) { byte[] buffer = new byte[sp.BytesToRead]; sp.Read(buffer, 0, buffer.Length); string str = EncodingType.GetString(buffer); this.Invoke(new EventHandler(delegate { richTextBox2.AppendText($"接收:{str}n"); })); } 4.使用帮助类来简化代码 帮助类: using System; using System.Collections.Generic; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 串口操作 { class PortCommunicationHelper { //创建串口对象 public SerialPort serialPort; /// /// 端口名称数组 /// public string[] PortNameArr { get; set; } /// /// 串口通信开启状态 /// //public bool PortState { get; set; } = false; /// /// 编码类型 /// public Encoding EncodingType { get; set; } = Encoding.UTF8; /// /// 串口接收数据委托 /// public delegate void ComReceiveDataHandler(string data); public ComReceiveDataHandler OnComReceiveDataHandler = null; public PortControlHelper() { PortNameArr = SerialPort.GetPortNames(); serialPort = new SerialPort(); serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceived); } /// /// 发送数据 /// /// public void SendData(string sendData) { try { serialPort.Encoding = EncodingType; serialPort.Write(sendData); } catch (Exception e) { throw e; } } /// /// 打开串口口 /// public void openPort(string name) { serialPort.PortName = name; serialPort.BaudRate = 115200; serialPort.DataBits = 8; serialPort.StopBits = (StopBits)1; serialPort.ReadTimeout = 5; serialPort.Open(); } /// /// 关闭端口 /// public void ClosePort() { try { serialPort.Close(); //PortState = false; } catch (Exception e) { throw e; } } /// /// 接收数据回调用 /// /// /// private void DataReceived(object sender, SerialDataReceivedEventArgs e) { byte[] buffer = new byte[serialPort.BytesToRead]; serialPort.Read(buffer, 0, buffer.Length); string str = EncodingType.GetString(buffer); if (OnComReceiveDataHandler != null) { OnComReceiveDataHandler(str); } } } } 窗口显示及代码: 代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 串口操作 { public partial class Form1 : Form { private PortCommunicationHelper pchSend; private PortCommunicationHelper pchReceive; public Form1() { InitializeComponent(); pchSend = new PortCommunicationHelper(); pchReceive = new PortCommunicationHelper(); Init(); } /// /// 打开串口 /// /// void Init() { try { pchSend.openPort("COM1"); pchReceive.openPort("COM2"); pchReceive.OnComReceiveDataHandler += new PortCommunicationHelper.ComReceiveDataHandler(ComReceiveData); } catch (Exception) { MessageBox.Show("串口通信异常"); throw; } } /// /// 接收到的数据,写入文本框内 /// /// 接受的数据 private void ComReceiveData(string data) { this.Invoke(new EventHandler(delegate { richTextBox2.AppendText($"接收:{data}n"); })); } private void button2_Click(object sender, EventArgs e) { pchSend.SendData(richTextBox1.Text); } } } |
|
|
|
只有小组成员才能发言,加入小组>>
3274 浏览 9 评论
2949 浏览 16 评论
3450 浏览 1 评论
8972 浏览 16 评论
4042 浏览 18 评论
1088浏览 3评论
563浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
559浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2296浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1853浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-15 17:24 , Processed in 1.017800 second(s), Total 49, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号