最近公司系统需要对接开发第三方的设备,而对方的硬件设备只能通过模拟串口的方式和电脑通讯,所以只能自己开发实现串口通讯。自己实现过程中也是搜网上各路大神的文章和代码。由于网上的讲解文档甚至代码已经有很多了,这里就不一一说了,只说一下这次遇到的问题。

这次厂家的串口使用的是奇校验,由于之前没有接触过串口通讯,在搜了一片文章后,就按照里面的内容去做了,最后也能收到东西,但是随后的解析里面是一塌糊涂。后来才发现是设置串口校验时设置错了。在网上搜了一些文章后,都没有说明是如何设置奇校验的。于是就去查msdn了,网上很多人都是用“BuildCommDCBA”函数通过一个字符串去设置DCB结构体,msdn中也是说明了字符串的格式,,如下:

COMx[:][baud=b][parity=p][data=d][stop=s][to={on|off}][xon={on|off}][odsr={on|off}][octs={on|off}][dtr={on|off|hs}][rts={on|off|hs|tg}][idsr={on|off}]

微软官方的例子:

baud=1200 parity=N data=8 stop=1

上面这个例子的意思是 ,串口的波特率是1200  ,不进行奇偶校验  ,数据位是8 停止位是1.

而后通过BuildCommDCBA 函数获得DCB结构体,再通过SetCommState设置串口配置。无论是网友的文章还是官方都没有说明  BuildCommDCBA  是如何设置奇校验的。

我们查阅msdn 关于DCB的介绍,发现了可以直接通过这是DCB结构体,设置奇校验。下面是MSDN关于DCB结构体的定义:

typedef struct _DCB {DWORD DCBlength;DWORD BaudRate;DWORD fBinary : 1;DWORD fParity : 1;DWORD fOutxCtsFlow : 1;DWORD fOutxDsrFlow : 1;DWORD fDtrControl : 2;DWORD fDsrSensitivity : 1;DWORD fTXContinueOnXoff : 1;DWORD fOutX : 1;DWORD fInX : 1;DWORD fErrorChar : 1;DWORD fNull : 1;DWORD fRtsControl : 2;DWORD fAbortOnError : 1;DWORD fDummy2 : 17;WORD  wReserved;WORD  XonLim;WORD  XoffLim;BYTE  ByteSize;BYTE  Parity;BYTE  StopBits;char  XonChar;char  XoffChar;char  ErrorChar;char  EofChar;char  EvtChar;WORD  wReserved1;
} DCB, *LPDCB;

fParity字段就是我们想设置的校验方式字段。而官网中对这个字段有了很详细的说明:

Value Meaning

EVENPARITY

2

Even parity.

MARKPARITY

3

Mark parity.

NOPARITY

0

No parity.

ODDPARITY

1

Odd parity.

SPACEPARITY

4

Space parity.
   
   

fParity设置为ODDPARITY  就是奇校验了。需要其他校验方式的,可以设置上述其他的类型。

最后列举下这次开发中参考的一些文档。

参考文档:

网友文章:

https://www.cnblogs.com/nbsofer/archive/2012/12/21/2827781.html

https://blog.csdn.net/wowocpp/article/details/80564307

MSDN说明:

https://docs.microsoft.com/en-us/previous-versions/ff802693(v=msdn.10)

https://docs.microsoft.com/zh-cn/windows/desktop/api/winbase/ns-winbase-_dcb

https://docs.microsoft.com/zh-cn/windows/desktop/api/winbase/nf-winbase-buildcommdcba

https://docs.microsoft.com/zh-cn/windows/desktop/api/winbase/nf-winbase-getcommstate

https://docs.microsoft.com/zh-cn/windows/desktop/api/winbase/nf-winbase-setcommstate

Win32 串口通信 程序编写--奇校验 偶校验 奇偶检验 设置相关推荐

  1. 【转】Qt编写串口通信程序全程图文讲解

    Qt编写串口通信程序全程图文讲解 本文章原创于www.yafeilinux.com 转载请注明出处. (说明:我们的编程环境是windows xp下,在Qt Creator中进行,如果在Linux下或 ...

  2. win Qt qextserialport 编写串口通信程序全程图文讲解

    转:http://blog.csdn.net/u010580186/article/details/51595227 (说明:我们的编程环境是windows xp下,在Qt Creator中进行,如果 ...

  3. Qt编写串口通信程序全程图文讲解

    (说明:我们的编程环境是windows xp下,在Qt Creator中进行,如果在Linux下或直接用源码编写,程序稍有不同,请自己改动.) 在Qt中并没有特定的串口控制类,现在大部分人使用的是第三 ...

  4. VC控件MSComm编写串口通信程序

    转载:http://blog.csdn.net/liangzhao_jay/article/details/45647229 在众多网友的支持下,串口调试助手从2001年5月21日发布至今,短短一个月 ...

  5. Win32 串口通信

    艾伦戴夫 微软Windows开发者支持中心 1995/12/11 应用于: Microsoft® Win32® Microsoft Windows®         摘要:学习Win32中的串口通信和 ...

  6. QT中串口通信程序(转)

    (说明:我们的编程环境是windows xp下,在Qt Creator中进行,如果在Linux下或直接用源码编写,程序稍有不同,请自己改动.) 在Qt中并没有特定的串口控制类,现在大部分人使用的是第三 ...

  7. 详解 Qt 串口通信程序全程图文 (4)

    Qt 串口通信程序全程图文是本文介绍的内容,本文一开始先讲解对程序的改进,在文章最后将要讲解一些重要问题. 1.在窗口中加入一些组合框Combo Box,它们的名称及条目如下: 串口:portName ...

  8. 详解 Qt 串口通信程序全程图文 (2)

    Qt 串口通信程序全程图文是本文介绍的内容,上一部分中已经介绍了实现最简单的串口接收程序的编写,下面将对程序内容进行分析. 1.首先应说明操作串口的流程 步骤一:设置串口参数,如:波特率,数据位,奇偶 ...

  9. 详解 Qt 串口通信程序全程图文 (5)

    Qt 串口通信程序全程图文是本文介绍的内容,本节也是最后一节,本节主要讲述的是解决一下重要问题的说明: (下面所说的第一个程序是指第一节中写的那个程序,第二个程序是指第三节更改完后的程序,第三个程序是 ...

最新文章

  1. 准确率至上已是过去式,这些趋势在2020年的AI领域更受关注
  2. 使用Java程序消费SAP Leonardo的机器学习API
  3. Android之如何设置TextView中不同字段的字体颜色
  4. 双击“本地连接”打不开无反应的解决方法
  5. 怎么去掉vux点击group产生的阴影
  6. 使用git命令行将某个指定文件回退到前几个版本
  7. c 初始化char**_C/C++内存模型
  8. 【Elasticsearch】elasticsearch 查询 高亮
  9. javascript中打印对象显示[object object]_扒一扒JavaScript中不常见的一些object
  10. u8服务器修改数据源,用友U8服务器修改数据库端口
  11. VBA编程_ActiveSheet
  12. 分享一个经验模态分解分解视频,讲的超好
  13. Scala之特质特质Trait
  14. Qdown:你值得拥有的全功能文件下载工具
  15. android 图片运动轨迹,基于Android的高德地图的定位和运动轨迹记录的功能
  16. 安卓查看中文官网、API、安卓文档
  17. 为什么计算机不显示u盘,电脑不显示u盘盘符_电脑不显示u盘怎么回事
  18. fx2n4ad模块中文手册_解析三菱特殊模块FX2N-4AD-PT详细说明及编程应用
  19. 无烟锅强制国标年内有望出台
  20. 阿里云服务器(Windows)磁盘空间不足时如何释放磁盘空间?

热门文章

  1. JOISC 2020 补题记录
  2. ref的三种使用方式
  3. Echarts 区域缩放以及设置Y轴显示
  4. 鸿蒙系统使用什么芯片,解读鸿鹄818智慧芯片和华为鸿蒙操作系统
  5. 机器学习基础——Anaconda环境
  6. 大奖章 量化 数据 接口
  7. db2设置数据库增量备份_DB2增量备份的方法
  8. [幽默笑话]2006年高考作文爆笑集锦
  9. Android 录音实现(MediaRecorder)
  10. 《Android 面试指南》来自腾讯,android网络文件下载