C#编程之“串口通讯多次接收”

摘要:

  主要记录了再C#的串口开发时遇到的问题,以便后续遇到相同问题再重复砍树造轮子。

1、问题场景

  板卡和PC间通过UART进行数据通讯,由PC给板卡发送控制命令,板卡返回相应的数据。

2、遇到的问题

  PC给板卡发送命令后,板卡解析了命令,并给PC返回了一个较长的数据,PC这边多次进入串口接收回调函数,由于数据没有进行封装处理,因此对于接收完成则只能通过添加延迟或者是根据约定好的字节数来判断接收完成

3、解决方案

  板卡进行数据封装和PC进行数据解析的代价相对于依据约定好的字节数来判断接收完成要大一些,因此这里采用了根据字节数来判断接收完成。主要用到了串口属性的ReceivedBytesThreshold属性。这个属性用来配置缓冲区内存在多少长度字节后系统进行回调。因为知道板卡返回来的长度是一个固定值,因此在每次发送命令前对这个属性值进行设定,只有当缓冲区的字节长度达到了我们的设置定后程序才会进入接收回调,默认情况下是一个字节就进入回调。

4、相关代码

  项目代码

原文地址:https://www.cnblogs.com/SuPair/p/6272935.html