做项目是遇到了串口通信,真是遇到了一个大坑,不知道是微软的坑还是我的坑。

让我慢慢道来完整的经历。

项目中以前是vb 写的,是vb与vb 之间进行串口通信,现在改成C#和之前的vb程序进行串口通信。

改成C#之后发现通信总有一段乱码,,之前的vb也没有这样的问题。思前想后总共也就那几句代码实在想不去哪里的问题。

调试也不知从何下手。最后下载了一个串口调试工具进行调试,发现明明应该8秒钟发一次请求,结果几乎每隔一秒左右就发送一次请求。

每次发送的都是一个未知字符。让我实在是想不出哪里的问题。大致代码如下。

             SerialPort port = new SerialPort("COM1");
port.BaudRate = ;
port.DataBits = ;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
if (!port.IsOpen)
port.Open();
port.Write("ceshi");
port.Close();

总共就这么几句代码,实在想不出哪里的问题,这个是在timer事件里执行的。

调试也是8秒钟进入一次代码。那在哪里会发生每秒发送一次信息呢?

调了各种通讯波段不行,加了各种代码过滤还是不知所以然。

最后尝试注释掉close,结果就神奇的没有每次通讯。这样也就没有出现乱码。

最后的坑居然是这句话 port.Close(); 真是怎么都没有想到。

SerialPort.Close 方法

http://msdn.microsoft.com/zh-cn/library/system.io.ports.serialport.close(v=vs.110).aspx

根据微软的解释,调用此方法会关闭 SerialPort 对象并清除接收缓冲区和传输缓冲区。

结合1楼 close会传输缓冲区,这样应该只会有一次,为何还会每隔一段时间产生通信?

建议:COM口打开后没必要刻意去关闭,直接等到程序退出的时候关闭就可以了,对通信没有任何影响。

记一次串口通信调试,慎用SerialPort.Close的更多相关文章

  1. pandaboard串口通信调试

    1.在PC上的pyserial程序,到pandaboard后报错,读取和写入会报错 2.使用的是pandaboard的ttyO2串口 3.ls -l /dev/ttyO2,发现是tty,而不是dial ...

  2. 嵌入式驱动开发之spi---spi串口通信调试

    一. 概念 SPI是 Serial Peripheral Interface(串型外部接口)的缩写.SPI接口有4根PIN脚,分别是:          * SPICLK     : 用于传输数据的同 ...

  3. Qt 串口通信

    在Qt5之前,串口通信基本依赖于第三方库,下面是我曾接触过的串口通信类库: 名称 语言 平台   QextSerialPort QT C++ Win/Linux http://sourceforge. ...

  4. 利用 SerialPort 控件实现 PC 串口通信

    整理参考自<Visual C#.NET 串口通信及测控应用典型实例>1.3 节 以及 一篇博文:C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子. 硬件部分 如果是两个串 ...

  5. winform SerialPort串口通信问题

    一.串口通信简介串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件.一般完成这种功能的电路,我们称为串 ...

  6. [转]C#串口通信 SerialPort类

    本文转自:https://blog.csdn.net/weixin_41415541/article/details/80921956 因为公司项目需要将USB扫码枪改为串口扫码枪,串口扫码的好处在于 ...

  7. System.IO.Ports.SerialPort串口通信接收完整数据

    C#中使用System.IO.Ports.SerialPort进行串口通信网上资料也很多,但都没有提及一些细节: 比如 串口有时候并不会一次性把你想要的数据全部传输给你,可能会分为1次,2次,3次分别 ...

  8. Win10 IoT C#开发 4 - UART 串口通信

    Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,既可以开发设备UI与用户交互式操作,又可以控制GPIO等接口,使得原来嵌入式繁琐的开发变得简单.通过Remote Debug ...

  9. Mac下的串口通信-ORSSerialPort

    ================================2015/11/05======================================= 最近在工作中遇到有关Mac下串口通信 ...

随机推荐

  1. 一种另类的解决URL中文乱码问题--对中文进行加密、解密处理

    情景:在资源调度中,首先用户需要选择工作目标,然后跟据选择的工作目标不同而选择不同的账号和代理ip.处理过程如下:点击选择账号,在js中获取工作目标对工作目标进行两次编码(encodeURI(enco ...

  2. 【转载】关于sql server 代理(已禁用代理xp)

    原文地址:http://blog.sina.com.cn/s/blog_493cafbb0100qy91.html 症状: SQL SERVER2005里面,启动SQL代理服务,启动正常,但是在sql ...

  3. 我所理解的OOP——UML六种关系

    最近由于经常给公司的小伙伴儿们讲一些OOP的基本东西,每次草纸都被我弄的很尴尬,画来画去自己都乱了,有时候也会尝试使用UML表示类之间的关系,但UML从毕业后就再也没接触过了,经常会被小伙伴儿们指出继 ...

  4. IOS UIView 04- 自定义控件

    注:本人是翻译过来,并且加上本人的一点见解. 前言 本文将讨论一些自定义视图.控件的诀窍和技巧.我们先概述一下 UIKit 向我们提供的控件,并介绍一些渲染技巧.随后我们会深入到视图和其所有者之间的通 ...

  5. atitit.js浏览器环境下的全局异常捕获

    atitit.js浏览器环境下的全局异常捕获 window.onerror = function(errorMessage, scriptURI, lineNumber) { var s= JSON. ...

  6. salesforce 零基础学习(十六)Validation Rules & Date/time

    上一篇介绍的内容为Formula,其中的Date/time部分未指出,此篇主要介绍Date/time部分以及Validation rules. 本篇参考PDF: Date/time:https://r ...

  7. 快速入门系列--MVC--05行为

    Action执行包含内容比较多,主要有同步/异步Action的概念和执行过程,Authorationfilter, ActionFiltor, ResultFilter, ExceptionFilte ...

  8. ssh(sturts2_spring_hibernate) 框架搭建之spring

    一.spring总结: ⑴.spring是一个轻量级的JAVA开发框架,主要的作用是用来管理实例(可以解决JAVA类中new对象的问题,节省内存资源.)和降低代码之间的耦合性,促进代码模块化. ⑵.促 ...

  9. JTMz换路径导致MySQL服务不能启动的问题

    问题: JTMz解压到我的机器上,运行一次后,把服务停止了,然后移到了另外一个路径,JTMz中自带的MySQL服务启动不起来了. 解决: 在注册表中修改 HKEY_LOCAL_MACHINE\SYST ...

  10. 【WP开发】WebView控件应用要点

    WebView控件我就不多作详细的介绍,相信大家都懂的,就算你没用过,你看他的名字和长相都知道它的用途了.就是用来显示HTML内容的. 在WP 8.1的Runtime App中,这个控件大致有以下几个 ...