C#学习与上位机开发之串口通信模块介绍

串口通信模块(SerialPort)

(1)模块简介

使用此模块需要首先包含一些文件IO相关文件


using System.IO;
using System.IO.Ports;

图标如下图1所示,将其拖拽到面板。会显示在最下方,其参数有如下:

BaudRate 波特率
DataBits 数据位
Parity 奇偶校验位
PortName 端口号
StopBits 停止位
ByteToRead 获取输入缓冲区的
IsOpen 获取是否开启串口
   
   

以上是我们做串口通信上位机需要用到的(如图2所示)。

         

图1   串口模块图                             图2    串口模块参数图

串口通信模块的事件有三个,如图3所示。

DataReceived     串口接收函数

ErrorReceived     串口数据接收错误

PinChanged       串口号发生改变

双击即可建立函数。

常见的方法还有


方 法 名 称


说  明

Open 打开串口.
Close 关闭串口
Read 从SerialPort 输入缓冲区读
ReadByte 从SerialPort 输入缓冲区读一个字节
ReadChar 从SerialPort 输入缓冲区读一个字符
Write 写入到输出缓冲寄存器

(2)代码编写

1、串口初始化函数

初始化函数以按键点击函数为起点。需要将各控件的参数幅值给串口各项参数,具体代码如下:


private void button1_Click(object sender, EventArgs e)
        {
           // if(Button_on == 1)
            if (!serialPort1.IsOpen)//如果串口是开
            {
                serialPort1.PortName = comboBox1.Text;
                serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text, 10);
                float f = Convert.ToSingle(comboBox3.Text.Trim());
                if (f == 0)//设置停止位
                    serialPort1.StopBits = StopBits.None;
                else if (f == 1.5)
                    serialPort1.StopBits = StopBits.OnePointFive;
                else if (f == 1)
                    serialPort1.StopBits = StopBits.One;
                else if (f == 2)
                    serialPort1.StopBits = StopBits.Two;
                else
                    serialPort1.StopBits = StopBits.One;
                //设置数据位
                serialPort1.DataBits = Convert.ToInt32(comboBox4.Text.Trim());
                //设置奇偶校验位
                string s = comboBox5.Text.Trim();
                if (s.CompareTo("无") == 0)
                    serialPort1.Parity = Parity.None;
                else if (s.CompareTo("奇校验") == 0)
                    serialPort1.Parity = Parity.Odd;
                else if (s.CompareTo("偶校验") == 0)
                    serialPort1.Parity = Parity.Even;
                else
                    serialPort1.Parity = Parity.None;
                try
                {
                    serialPort1.Open();     //打开串口
                    button1.Text = "关闭串口";
                    comboBox1.Enabled = false;//关闭使能
                    comboBox2.Enabled = false;
                    comboBox3.Enabled = false;
                    comboBox4.Enabled = false;
                    comboBox5.Enabled = false;
                }
                catch
                {
                    MessageBox.Show("串口打开失败!");
                }
            }
            else//如果串口是打开的则将其关闭
            {
                serialPort1.Close();
                button1.Text = "打开串口";
                comboBox1.Enabled = true;//使能配置
                comboBox2.Enabled = true;
                comboBox3.Enabled = true;
                comboBox4.Enabled = true;
                comboBox5.Enabled = true;
            }

}

2、串口写函数

写函数主要用于发送数据,用到serialPort.write函数

本例以鼠标点击按键触发写函数,代码如下:


private void button_send_Click(object sender, EventArgs e)
        {//发送数据
            if(serialPort1.IsOpen)
            {//如果串口开启
                if (textBox2.Text.Trim() != "")//如果框内不为空则
                {
                    serialPort1.Write(textBox2.Text.Trim());//写数据
                }
                else
                {
                    MessageBox.Show("发送框没有数据");
                }
            }
            else
            {
                MessageBox.Show("串口未打开");
            }
        }

3、串口读函数

串口读函数主要用于读取串口缓冲区的数据。

此处用到post_DataReceived事件

这里增减了两种显示方式:

1十六进制显示    2字符串显示


private void post_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
           
            if (!radioButton1.Checked)
            {
                string str = serialPort1.ReadExisting();//字符串方式读
                textBox_receive.AppendText(str);

}
            else
            {
                byte data;
                data = (byte)serialPort1.ReadByte();
                string str = Convert.ToString(data, 16).ToUpper();//
                textBox_receive.AppendText("0x" + (str.Length == 1 ? "0" + str : str) + "  ");

}
        }

未完待续…下一节介绍(C#学习与上位机开发之串口协议接收数据)

源码可以访问我GITHUB下载

https://github.com/Harryjun/Csha_demo

参考博客如下:

1、C#中显现串口通信SerialPort类

http://www.cnblogs.com/BookCode/p/5583853.html

时间: 2024-10-12 22:58:21

C#学习与上位机开发之串口通信模块介绍的相关文章

C#学习与上位机开发之2窗口介绍

一.引子 窗口就是打开程序我们所面对的一个面板,里面可以添加各种控件,如下图所示,我们可以在属性栏设置其标题名称.图标.大小等.               图1    窗口图                                                          图2     设置面板                               图3   设置 双击标题框,会生成Load函数,也可以到事件里面去找 Load函数是窗口生成后需要执行的事件函数. 可以在里

C#上位机开发(二)

上一篇大致了解了一下单片机实际项目开发中上位机开发部分的内容已经VS下载与安装,按照编程惯例,接下来就是"Hello,World!" 1.新建C#项目工程 首先选择新建Windows窗体应用(.NET Framework),然后选择项目保存位置,填写项目名称,这里因为我们不需要用git进行进行版本管理,所以不用新建GIT存储库: 框架是指.net框架,4以及4以下的.NET框架可以在xp上运行,4以上可以在win7/8/10上运行,鉴于当前大多数操作系统都是win7或win10,选择4

基于CAN总线的汽车诊断协议UDS(上位机开发驱动篇)

本篇作为UDS上位机的驱动开发篇,从市面上多见的CAN分析仪着手介绍UDS上位机驱动开发和移植的一般过程,目的是使UDS上位机软件能适应多家CAN分析仪,降低使用者的硬件成本. 一:广成CAN分析仪的驱动开发 首先创建ECANDLL类,从广成提供的二次开发包中获取ECANVCI.dll文件,将DLL文件放置与生成程序的目录中,如下类中创建了CAN常用的控制函数. public static class ECANDLL { [DllImport("ECANVCI.dll", EntryP

C#上位机开发(三)—— 构建SerialAssistant雏形

上一篇简单介绍了C#的一些基本知识,并成功的Hello,World,那么从这篇开始,我们来自己动手写一个串口助手: 1.构思功能 串口助手在单片机开发中经常被用来调试,最基本的功能就是接收功能和发送功能,其次,串口在打开前需要进行一些设置:串口列表选择.波特率.数据位.校验位.停止位,这样就有了一个基本的雏形:然后我们在此功能上添加:ASCII/HEX显示,发送,发送新行功能,重复自动发送功能,显示接收数据时间这几项扩展功能: 2.设计布局 根据以上功能,将整个界面分为两块:设置界面(不可缩放)

上位机串口控制FPGA开发板LED

实验目的: 上位机软件通过串口控制FPGA开发板上4个LED灯的亮灭,同时数码管显示LED灯亮的个数,实验效果如下图. 实验背景: 一直都想学习FPGA,这次算是入门了,我是看书学习的,所以FPGA的代码是参考着书本上的修改的,其实很高兴,因为这个实验是我自己发散出来的,书上的开发板和我用的开发板不一样,并且小软件也是自己用C#写的,总之,挺开心吧,本着开源的精神,所有的上位机代码和FPGA程序上传,如有需要请自行下载(点此下载).工作就没时间写教程之类的,简单的介绍一下吧 硬件平台: Cycl

C#做一个简单的进行串口通信的上位机

C#做一个简单的进行串口通信的上位机 1.上位机与下位机 上位机相当于一个软件系统,可以用于接收数据.控制数据.即可以对接收到的数据直接发送操控命令来操作数据.上位机可以接收下位机的信号.下位机是一个控制器,是直接控制设备获取设备状况的计算机.上位机发出的命令首先给下位机,下位机再根据此命令解释成相应时序信号直接控制相应设备.下位机不时读取设备状态数据(一般为模拟量),转换成数字信号反馈给上位机.上位机不可以单独使用,而下位机可以单独使用. 2.串口通信 串口相当于硬件类型的接口.比如无线传感节

2018最新mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题

本文用的是VS2013MFC写串口数据接收: 第一步:首先建立一个MFC工程,成功后会跳出一个对话框,直接在对话框上点击右键->点击插入ACTIVAE控件->选择MicrosoftCommunications Control, version 6.0 成功后会显示一个电话的图标在对话框上,运行起来不会显示的 不用担心这个美观问题.如果没有这个插件的话,可能是版本太低  可以自己下载一个补上 第二步:大概的窗体搞好:   那个显示图片的大框是PICTURE控件变量 然后就要项目->类向导中

上位机配置管理一体化软件说明【持续更新】

为了更好地进行上位机开发,特意开发了一款上位机配置管理一体化软件,该软件集成配置.通信及上层接口为一体,统一进行多线程通信及数据解析,可以快速进行上位机开发,已实际运用在多个项目,并稳定运行超过1年时间. 功能如下: [1]上位机配置   [2]上位机通信 [3]上层接口 软件截图: 原文地址:https://www.cnblogs.com/xiketangedu/p/11721322.html

ESP8266 SDK开发: 综合篇-C#上位机串口通信控制ESP8266

实现的功能 1.C#串口上位机通过串口控制继电器 控制继电器吸合      控制继电器断开      说明 1,请用户先学习这一节 https://www.cnblogs.com/yangfengwu/p/12382103.html   编写C#串口调试助手 2.控制继电器引脚 协议规定 上位机串口发送给ESP8266控制继电器吸合指令: 0xaa  0x55  0x01 0x01 ESP8266执行以后回复: 0x55  0xaa  0x01 0x01 上位机串口发送给ESP8266控制继电器