在应用WIN32 API 对串口进行编程时, 必定使用到 DCB 结构体.
转载链接

一、首先是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;

二、在这个结构中,共有28个变量, 这些成员归类为几种.

1.串口的基本设置

(1)DWORD BaudRate;      波特率设置。
(2)BYTE ByteSize;         数据位设置。
(3)DWORD fParity: 1;      TRUE时, 支持奇偶检验。
(4)BYTE Parity;         奇偶检验位的设置
(5)BYTE StopBits;        停止位的设置

StopBits指定端口当前使用的停止位数,可取值:
取值 意义
ONESTOPBIT      1停止位
ONE5STOPBITS     1.5停止位
TWOSTOPBITS      2停止位

RS232的停止位为什么可以为1,1.5或2;搞不懂1.5是什么意思?
解释:1.5停止位,是指停止位的“1”电平宽度的保持为1.5个单位时间长,一个单位时间就是波特率的倒数,例如波特率为9600bps,则一个单位时间长为1/9600s,1.5个停止位,即停止位电平保持1.5/9600s


2.流控制(Flow Control) 的设置

流控制分为硬件流控制和软件流控制。 而硬件流控制又分为RTS/CTS和DTR/DSR两种。而软件流控制, 则是Xon/Xoff。

DTR/DSR 硬件流控制:
(1)DWORD fOutxDsrFlow:1;      TRUE时,支持DSR流控制。 当DSR为OFF时,停止发送。
(2)DWORD fDtrControl:2;      DTR设置。 (置高/置低…)
(3)DWORD fDsrSensitivity:1;      TRUE时,当DSR为OFF,则接收端忽略所有字符。


RTS/CTS 硬件流控制:
(4)DWORD fOutxCtsFlow:1;      TRUE时,支持CTS流控制。 当CTS为OFF时,停止发送。
(5)DWORD fRtsControl:2;       RTS设置。 (置高/置低…)


Xon/Xoff 软件&emsp&emsp流控制:
(6)DWORD fOutX: 1;       发送端支持Xon/Xoff。
(7)DWORD fInX: 1;       接收端支持Xon/Xoff。
(8)WORD XonLim;       当接收Buffer中的字符减少小XonLim规定的字符数, 就发送Xon字符,让对方继续发送。
(9)WORD XoffLim;       接收Buffer达到XoffLim规定的字符数, 就发送Xoff字符, 让对方停止发送。
(10)char XonChar;        Xon 字符。
(11)char XoffChar;        Xoff 字符。
(12)DWORD fTXContinueOnXoff:1;   TRUE时,不管接收端是否Xoff, 本方发送端持续发送。 (也就是本方的发送端, 与本方接收端Xon/Xoff是相互独立的)。若为False 时,则当接收端buffer 达到XoffLim时,发送端发送完Xoff字符后,就停止发送。


3. Error 情况处理

(1)DWORD fErrorChar: 1;     TRUE时,若fParity为TRUE, 则用ErrorChar替换Parity Check错误的字符。
(2)DWORD fAbortOnError:1;    TRUE时,发生错误时停止读写操作。
(3)char ErrorChar;         Parity Check 错误时,替换的字符。


4. 其他参数

(1)DWORD DCBlength;      DCB结构的长度(以字节为单位)
(2)DWORD fBinary: 1;       二进制模式。(必须为1 )
(3)DWORD fNull: 1;        TRUE时,接收时去掉空字节(0x0)
(4)char EofChar;          EOF替代字符
(5)char EvtChar;          事件触发字符
(6)DWORD fDummy2:17;      保留
(7)WORD wReserved;        保留
(8)WORD wReserved1;        保留


三、配置例程

    DCB dcb;                    //串口DCB结构体GetCommState(hCom,&dcb);    //读取串口设置(波特率,校验,停止位,数据位等).dcb.BaudRate=9600;          //设置波动率9600dcb.ByteSize=8;             //数据长度8位dcb.Parity=NOPARITY;       //无校验位dcb.StopBits=TWOSTOPBITS;    //2停止位SetCommState(hCom,&dcb);  //设置COM口的设备控制块

串口DCB定义,配置例程相关推荐

  1. stm32f407 6路串口dma如何配置_stm32cubeMX学习十、扫码模块程序开发(基于正点原子STM32F407开发板)...

    本程序编写基于正点原子STM32F407开发板. 本文使用的扫码模块是下面这个品牌. 扫码模块的应用场景非常广泛,我们可以上百度搜索一下: 等等. 今天就来说说如何在开发板上实现控制它吧,打开数据手册 ...

  2. STM32L0系列串口重定义的方法

    STM32L0系列串口重定义的方法 芯片型号:STM32L071RBT6 本篇重点:将printf( ) 函数重定义到USART1 集成开发工具(IDE):IAR 在uart已经配置好情况下,重定义f ...

  3. 2.3 基于FPGA的UART协议实现(一)串口信号定义和接线方法-5针串口-9针串口-全功能串口

      通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART.它将要传输的资料在串行通信与并行通信之间加以转换.作为把并行输入信号 ...

  4. QT从零开始作单片机上位机-串口调试助手+波形显示-实现串口模块的配置

    目录 实现串口模块的配置(1) 一.先列举需要思考的问题: 二.所有的问题要由简单到复杂逐一解决 实现串口模块的配置(1) 完成了基本的界面设计后,我们就要着手实现功能.下来的几章我们看串口数据收发的 ...

  5. QT从零开始作单片机上位机-串口调试助手+波形显示-实现串口模块的配置(2)

    QT实现串口模块的配置(2) 一.先列举需要思考的问题: 怎么实现点击刷新按钮后,串口工具可以自动发现可用的COM口,并将com口显示在Combobox1? 如何添加所有可用的波特率?同样给其他Com ...

  6. CH9121串口转以太网配置调试

    CH9121串口转以太网配置调试 CH9121简介 引脚说明 模式介绍 上位机配置TCP_Client模式流程 使用软件串口配置 总结 原文链接:https://www.yourcee.com/new ...

  7. mcgscom口针脚定义_标准9针串口引脚定义

    标准 9 针串口引脚定义 从前面的内容中,知道了串口外形,就可以继续了解其每个引脚的定义,这是做线的基础.无论是 RS-232C . RS-422 ,还是 RS-485 ,串口接口的外形.尺寸都是相同 ...

  8. 串口屏如何配置波特率

    串口屏如何配置波特率 在Program.s中配置 bauds=你需要的波特率 记住要写在page指令之前,page指令之后的代码是不会执行的

  9. 串口DCB结构详细说明

    串口DCB结构详细说明  成员 说明  DCBlength DCB结构大小,即sizeof(DCB),在调用SetCommState来更新DCB前必须作设置  BaudRate 指定当前采用的波特率, ...

最新文章

  1. editplus行转列_EditPlus常用快捷键
  2. 超牛逼的异步协程爬虫
  3. 边缘计算边缘计算edge_Edge AI-边缘上的计算机视觉推理
  4. vapor mysql_vapor MySQL 作为Cache
  5. 直接拿来用!一文学会 Docker 镜像!
  6. 洛谷——P1151 子数整数
  7. 【引用】关于close-on-exec标志
  8. NVivo for Mac中的编码难理解?这6个视频帮助你!
  9. 用这个玩吃鸡:宏按键加一键恢复加自由移动视角,你想要的功能它都有
  10. mysql删除某天前的数据
  11. 迅雷高速下载百度云盘文件
  12. macOS CLion 上搭建 GLFW + GLAD OpenGL开发环境
  13. 从hr口中了解react的状态管理库(mobx, recoil), 立马过来学习之mobx
  14. PPT动画制作选美大赛
  15. 国家也补贴?有华为认证证书的你,就能拿它(附详细操作)
  16. 力扣(98.107)补9.10
  17. Linux终端程序用c语言实现改变输出的字的颜色 (转)
  18. WinRAR 实现简单的自解压
  19. Dockerfile自定义镜像
  20. uCore OS(on RISC-V64)——LAB1:中断机制

热门文章

  1. win10蓝牙链接上的标准串行com口无法删除
  2. freemarker导出word文档——WordXML格式解析
  3. 一图看懂自然资源资金监测监管系统
  4. vue安装vue-awesome-swiper@3实现图片列表缩略图双向控制效果
  5. 深度学习经典试题29道
  6. 下载多张图片并压缩成压缩包
  7. 如何用div实现炫酷3D球体?
  8. WIN中SCHTASKS用法(定时执行程序)
  9. 研究心得:调研文献“快而全“的三步
  10. 经纬度坐标映射到平面直角坐标系