OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4580|回复: 9

应网友要求:开源一个串口类

[复制链接]

44

主题

187

帖子

0

精华

高级会员

Rank: 4

积分
566
金钱
566
注册时间
2016-9-28
在线时间
158 小时
发表于 2018-8-22 21:12:05 | 显示全部楼层 |阅读模式
[mw_shl_code=csharp,true]using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ControlPoxy
{
    public class Serial_Proxy
    {
        public int DataLength;
        public byte[] RtBuff = new byte[1024 * 10];
        public bool b_SerialPortStaus = false;
        public bool b_SerialReceiveReady = false;
        private System.IO.Ports.SerialPort serialPortMode = new System.IO.Ports.SerialPort();

        private string comport;
        private int baud;
        private Parity parity;
        private int timeOut;

        public int TimeOut
        {
            get { return timeOut; }

            set{  timeOut = value; }
        }

        public string Comport
        {
            get{ return comport; }

            set{ comport = value; }
        }

        public int Baud
        {
            get{ return baud; }

            set{ baud = value; }
        }

        public Parity Parity
        {
            get{ return parity; }

            set{ parity = value; }
        }

        public bool SerialPort_Start()
        {
            return serial_Inial();
        }

        public void SerialPort_Stop()
        {
            if (serialPortMode.IsOpen)
            {
                serialPortMode.Close();
                b_SerialPortStaus = false;
                this.serialPortMode.DataReceived -= new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPortMode_DataReceived);
            }
        }
        public void SerialSend(byte[] data, int len)
        {
            if (b_SerialPortStaus)
            {
                serialPortMode.Write(data, 0, len);
            }
        }

        public int SerialPort_ReaDBuff(byte[] buff)
        {
            int length = 0;

            if (DataLength > 0)
            {
                if (DataLength > buff.Length)
                {
                    length = buff.Length;
                }
                else
                {
                    length = DataLength;
                }
                RtBuff.CopyTo(buff, length);
                DataLength = 0;
            }

            return length;
        }

        private bool serial_Inial()
        {
            if (b_SerialPortStaus == true)
            {
                serialPortMode.Close();
                b_SerialPortStaus = false;
                this.serialPortMode.DataReceived -= new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPortMode_DataReceived);
            }
            else
            {
                if (!serialPortMode.IsOpen)
                {
                    serialPortMode.BaudRate = Baud;
                    serialPortMode.PortName = Comport;
                    serialPortMode.DataBits = 8;
                    serialPortMode.Parity = parity;
                    serialPortMode.Open();
                    b_SerialPortStaus = true;
                    this.serialPortMode.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPortMode_DataReceived);
                }
            }

            return b_SerialPortStaus;
        }


        /// <summary>
        /// serial port receive data packet
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void serialPortMode_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            try
            {
                if (TimeOut > 0)
                {
                    System.Threading.Thread.Sleep(TimeOut);
                }

                DataLength = serialPortMode.BytesToRead;
                if (DataLength > 0)
                {
                    if (DataLength > RtBuff.Length)
                        DataLength = RtBuff.Length;

                    serialPortMode.Read(RtBuff, 0, DataLength);
                    b_SerialReceiveReady = true;
                }
            }
            catch
            {

            }
        }

    }
}

/* End of this file */
[/mw_shl_code]
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

121

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1721
金钱
1721
注册时间
2013-9-2
在线时间
735 小时
发表于 2018-8-22 22:27:17 | 显示全部楼层
谢谢,楼主无私的开源
回复 支持 反对

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2018-8-22 22:33:24 来自手机 | 显示全部楼层
C#嘛,楼主其实可以把协议也封装了,自定义的或者modbus的也可以
回复 支持 反对

使用道具 举报

0

主题

52

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
349
金钱
349
注册时间
2018-7-26
在线时间
75 小时
发表于 2018-8-23 08:12:42 | 显示全部楼层
膜拜大佬,新手定努力追赶大佬步伐,资源拿走了
回复 支持 反对

使用道具 举报

4

主题

121

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1721
金钱
1721
注册时间
2013-9-2
在线时间
735 小时
发表于 2018-10-2 16:42:30 | 显示全部楼层
楼主,我用你的类,发现串口无法触发 SerialDataReceivedEventHandler 接受的函数 serialPortMode_DataReceived。是什么地方需要初始化
回复 支持 反对

使用道具 举报

44

主题

187

帖子

0

精华

高级会员

Rank: 4

积分
566
金钱
566
注册时间
2016-9-28
在线时间
158 小时
 楼主| 发表于 2018-10-3 07:52:15 | 显示全部楼层
lovely-teddy198 发表于 2018-10-2 16:42
楼主,我用你的类,发现串口无法触发 SerialDataReceivedEventHandler 接受的函数 serialPortMode_DataRece ...

查看我的其它帖子,里面有范例
回复 支持 反对

使用道具 举报

4

主题

121

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1721
金钱
1721
注册时间
2013-9-2
在线时间
735 小时
发表于 2018-10-3 10:07:17 | 显示全部楼层
好的,在本论坛?有链接?
回复 支持 反对

使用道具 举报

4

主题

121

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1721
金钱
1721
注册时间
2013-9-2
在线时间
735 小时
发表于 2018-10-5 21:08:59 | 显示全部楼层
mftang2016 发表于 2018-10-3 07:52
查看我的其它帖子,里面有范例

有链接?
回复 支持 反对

使用道具 举报

3

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
472
金钱
472
注册时间
2015-3-1
在线时间
123 小时
发表于 2018-10-10 09:55:33 | 显示全部楼层
楼主这么优秀的吗~~~
- -个性的签名
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2019-5-20
在线时间
2 小时
发表于 2019-11-28 14:31:00 | 显示全部楼层
好帖,正需要。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 00:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表