首页 > 编程语言 >C# 串口通信

C# 串口通信

时间:2024-10-22 22:10:48浏览次数:3  
标签:Parity Console C# 通信 var 串口 msg port

工具

虚拟串口工具:https://www.virtual-serial-port.org/

串口调试工具:https://github.com/SuperStudio/SuperCom

串口通信数据帧格式

串口通信中,数据以帧的形式发送,每一帧通常包括:起始位(Start Bit)、数据位(Data Bits)、可选的奇偶校验位(Parity Bit)以及停止位(Stop Bits)。

同步通信
using System.IO.Ports;

var port = new SerialPort
{
    // 设置串口名
    PortName = "COM2",
    // 设置波特率
    BaudRate = 9600,
    // 设置奇偶校验方式
    Parity = Parity.None,
    // 设置停止位
    StopBits = StopBits.One
};

port.Open();

try
{
    while (true)
    {
        Console.Write("Your Message: ");
        // 读取用户输入
        var msg = Console.ReadLine();
        if (msg == null || msg.Trim() == "") continue;
        // 发送消息
        port.WriteLine(msg);
        // 接收消息
        var receivedMsg = port.ReadLine();
        Console.WriteLine($"Received: {receivedMsg}");
    }
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

port.Close();
异步通信
using System.IO.Ports;
using System.Text;

var port = new SerialPort
{
    // 设置串口名
    PortName = "COM2",
    // 设置波特率
    BaudRate = 9600,
    // 设置奇偶校验方式
    Parity = Parity.None,
    // 设置停止位
    StopBits = StopBits.One
};

port.DataReceived += (s, e) =>
{
    var receivedMsg = (s as SerialPort)!.ReadExisting();
    Console.WriteLine($"Received: {receivedMsg}");
};

port.Open();

Task<string> ReadLineAsync()
{

    return Task.Run(() =>
    {
        Console.Write("Your Message: ");
        return Console.ReadLine()!;
    });
}

async Task SendAsync(SerialPort sp, string msg)
{
    var bytes = Encoding.UTF8.GetBytes(msg);
    await sp.BaseStream.WriteAsync(bytes, 0, bytes.Length);
}

await Task.Run(async () =>
{
    while (true)
    {
        // 读取用户输入
        var msg = await ReadLineAsync()!;
        if (msg == null || msg.Trim() == "") continue;

        // 发送消息
        await SendAsync(port, msg);
    }
});

port.Close();
实现效果

标签:Parity,Console,C#,通信,var,串口,msg,port
From: https://www.cnblogs.com/kui0112/p/18493902

相关文章

  • 通过命令行修改nacos配置文件
    通过命令行修改nacos配置文件1、介绍nacos-cli是一个命令行工具,用来代替nacos的图形界面操作。下载地址:GitHub-szpinc/nacos-cli:用终端命令行的方式操作nacos2、安装进入页面之后,下载对应的文件,上传到服务器上,授予执行权限,放到Linux执行文件bin目录,/usr/local/bin和/u......
  • ArcGIS002:软件自定义设置
    摘要:本文详细介绍安装arcgis10.2后软件自定义设置内容,包括工具条的启用、扩展模块的启用、如何加载项管理器、快捷键设置、样式管理器的使用以及软件常规设置。一、工具条的启用依次点击菜单栏【自定义】->【工具条】,根据工作需求勾选上常用的工具条。勾选后相应工具条自动......
  • 麒麟系统通过CrossOver软件安装Windows软件(.exe)的详细过程
    1、安装CrossOver要先更新一下软件集:sudoaptupdate再安装KWRE版的微信。sudoaptinstallkylin-kwre-wechat安装成功后打开CrossOver程序:2、添加windows容器介绍:容器有Windows98、windows2000、windowsXP、windowsVista、windows7、windows8、windows1......
  • 实验三 C语言函数应用编程
    任务一#include<stdio.h>charscore_to_grade(intscore);//函数声明intmain(){intscore;chargrade;while(scanf("%d",&score)!=EOF){grade=score_to_grade(score);//函数调用printf("分数:%d,等级:%c\n......
  • 【C++-NOIP篇-4】 [NOIP2007 普及组] 纪念品分组
    文章目录[NOIP2007普及组]纪念品分组题目背景题目描述输入格式输出格式样例#1样例输入#1样例输出#1提示题目思路完整Code[NOIP2007普及组]纪念品分组题目背景NOIP2007普及组T2题目描述元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参......
  • P9751 [CSP-J 2023] 旅游巴士 题解
    思路首先,举一个例子,假如说小Z到了入口,但是没到时间,所以没法进去,该怎么办?当然是等$k$个时间单位呀.除此之外,像到了其他景区,但是还没开门怎么办?继续等$k$的非负整数倍时间呀.知道这个后,我们先定义状态$f_{i,j}$,表示到达点$i$时,路径长度(即时间)$mod$$k$的最早时......
  • ctfshow-pwn-Test_your_nc(0-4)
    pwn0签到题,用ssh连接,输入密码,会出现一大堆动画,输入pwd,显示了当前路径,我们直接切到根目录,发现了ctfshow_flag这个文件,直接cat读取得到flag。pwn1签到题,nc连接上直接出答案。pwn2用nc连接上之后,看题目提示输入cat/ctfshow_flag,得到flag。pwn3用nc连接上之后,发现有几个选......
  • P9749 [CSP-J 2023] 公路 题解
    此题贪心食用更佳在输入油价的时候,我们边计算油价的最小值和路程和.当路程之和$>0$时,计算油价并且减去对应路程即可.注意事项要开$long$$long$!!!.代码#include<iostream>#include<cstdio>#include<cmath>#include<cstring>usingnamespacestd;typedeflonglo......
  • P9750 [CSP-J 2023] 一元二次方程 题解
    大模拟此题大模拟即可,只需注意几点:分母$>0$.要给根式化简.分数要约分.求较大根,那就$b^2$加$\bigtriangleup$即可.分母>0因为求根公式中,分母中只有$a$一个未知数,所以我们只需保证$a>0$即可.所以,当$a<0$时,我们把$a,b,c$全部取相反值.但这也是......
  • Saprk:数据插入的优化(forachPartition)
    在spark中处理数据,将处理好的数据保存到mysql中,如果直接处理RDD数据,将其循环使得每一条数据都能插入到数据库中,如果数据量不大的情况下,可以使用。但是针对大数据,处理的数据是海量的,所以每次循环一条数据都要创建新的数据库连接,就会非常耗时,如果把数据库的连接放在外面,这样又造......