博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转载:c# serialport类 串口通信 hello world
阅读量:6914 次
发布时间:2019-06-27

本文共 1620 字,大约阅读时间需要 5 分钟。

据说明天样片就寄来了,可是我的pc端串口还未做,以为很难,就拖着,看了

之后更是一头雾水

今天下狠心,没想到不到两小时就解决了,做个教程方便大家。

使用serialport类,C#自带的

第一个例子参见

首先是在一台pc同一个串口上实现数据收发。那么需要把TX和RX短接。

我等软件专业的哪有什么做跳线的母头、导线啊,我就在程序运行时拿钥匙把那两个脚短接了。

public partial class Form1 : Form
    {
        SerialPort serialPort1 = new SerialPort();

创建一个对象serialPort1,然后剩下的代码参见 

第二个例子,上位机与下位机的通信,以上链接里的例子我觉得没有什么意义。我决定自己写一个读

mini2440开发板串口的例子。就像DNW那样的。

将第一个例子里接受按钮的事件处理改为

private void button2_Click(object sender, EventArgs e)

        {
            serialPort1.PortName = "COM1";
            serialPort1.BaudRate = 115200;
            serialPort1.DataBits = 8;
            serialPort1.ReceivedBytesThreshold = 1;
            serialPort1.Open();

        }

因为我们想异步读取,总不能在 private void button2_Click(object sender, EventArgs e)里写个死循环

一直读吧。我就想弄个事件驱动,如果这个serialport也不是窗体控件,我只要选中它,在属性里很容易就找到相关事件,然后双击就可以添加事件处理方法了。可惜它不是。

 真找到了答案

ReceivedBytesThreshold 属性, 当缓冲区的数据字节数大于等于SeralPort类对象的ReceivedBytesThreshold值时DataReceived事件被触发

先在frm1里添加一个方法,就是每当读入一个byte就执行的方法,将读入的byte转化为ascii码

void   ps_DataReceived(object   sender,   SerialDataReceivedEventArgs   e)   
                  {
                      string sValue;
                      byte[] bs;             
                      bs = System.BitConverter.GetBytes(serialPort1.ReadByte());
                      sValue = System.Text.Encoding.ASCII.GetString(bs);
                      textBox2.Text += sValue;
                  }
然后就是注册这个事件
serialPort1.DataReceived += new SerialDataReceivedEventHandler(ps_DataReceived);

测试时说跨线程调用windows窗体控件,这个.net freamwork2还真是烦人,直接设

Control.CheckForIllegalCrossThreadCalls = false;

即 public Form1()

        {
            InitializeComponent();
            serialPort1.DataReceived += new SerialDataReceivedEventHandler(ps_DataReceived);
            Control.CheckForIllegalCrossThreadCalls = false; 
        }

好了,demo完成了

最后想当然的关闭串口,也不知道放的位置对否

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            serialPort1.Close();
        }  

转载地址:http://rjacl.baihongyu.com/

你可能感兴趣的文章
Nginx图片防盗链【实战】
查看>>
Entity Framework Code First使用DbContext查询
查看>>
解决SQL SERVER数据库备份时出现“操作系统错误5(拒绝访问)。BACKUP DATABASE 正在异常终止。”错误的解决办法...
查看>>
提前了解这些,高考可能就会多点分数——12条高考考场应试技巧!
查看>>
linux vnc安装流程
查看>>
linux XFRM整体框架简单分析
查看>>
使用phpmaill发送邮件的例子
查看>>
Spring AOP 学习总结
查看>>
nginx功能使用演示
查看>>
Exchange Server 2010 管理控制台初始化失败
查看>>
mysql优化 之 表设计注意事项
查看>>
输出操作符重载
查看>>
zabbix server update监控
查看>>
Linux启动流程
查看>>
DataGridView 列宽和行高自动调整的设定
查看>>
我的友情链接
查看>>
OpenCart商品分类教程
查看>>
C++ bitset的使用
查看>>
《图像处理实例》 之 答题卡检测
查看>>
【leetcode】1023. Binary String With Substrings Representing 1 To N
查看>>