第一范文网 - 专业文章范例文档资料分享平台

MFC串口通信编程详解解析

来源:用户分享 时间:2025/9/15 16:45:17 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

………

//波特率,指定通信设备的传输速率.这个成员可以是实际波特率值或者下面的常量值之一:

DWORD BaudRate;

//CBR_110,CBR_300,CBR_600,CBR_1200,CBR_2400,CBR_4800,CBR_9600,CBR_19200, //CBR_38400,

//CBR_56000,CBR_57600,CBR_115200,CBR_128000,CBR_256000,CBR_14400 DWORD fParity;//指定奇偶校验使能.若此成员为1,允许奇偶校验检查 …

BYTE ByteSize;//通信字节位数,4—8

BYTE Parity;//指定奇偶校验方法.此成员可以有下列值: //EVENPARITY 偶校验 NOPARITY 无校验 //MARKPARITY 标记校验 ODDPARITY 奇校验 BYTE StopBits;//指定停止位的位数.此成员可以有下列值: //ONESTOPBIT 1位停止位 TWOSTOPBITS 2位停止位 //ONE5STOPBITS 1.5位停止位 ……… } DCB;

在winbase.h文件中定义了以上用到的常量.如下所示:

#define NOPARITY 0 #define ODDPARITY 1 #define EVENPARITY 2 #define ONESTOPBIT 0 #define ONE5STOPBITS 1 #define TWOSTOPBITS 2 #define CBR_110 110 #define CBR_300 300 #define CBR_600 600 #define CBR_1200 1200 #define CBR_2400 2400 #define CBR_4800 4800 #define CBR_9600 9600 #define CBR_14400 14400 #define CBR_19200 19200 #define CBR_38400 38400 #define CBR_56000 56000 #define CBR_57600 57600 #define CBR_115200 115200

#define CBR_128000 128000 #define CBR_256000 256000

GetCommState函数可以获得COM口的设备控制块,从而获得相关参数: BOOL GetCommState(

HANDLE hFile, //标识通讯端口的句柄

LPDCB lpDCB //指向一个设备控制块(DCB结构的指针 ;

SetCommState函数设置COM口的设备控制块: BOOL SetCommState( HANDLE hFile, LPDCB lpDCB ;

除了在BCD中的设置外,程序一般还需要设置I/O缓冲区的大小和超

时.Windows 用I/O缓冲区来暂存串口输入和输出的数据.如果通信的速率较高,则应该设置较大的缓冲区.调用SetupComm函数可以设置串行口的输入和输出缓冲区的大小.

BOOL SetupComm(

HANDLE hFile, // 通信设备的句柄

DWORD dwInQueue, // 输入缓冲区的大小(字节数 DWORD dwOutQueue // 输出缓冲区的大小(字节数

;

在用ReadFile和WriteFile读写串行口时,需要考虑超时问题.超时的作用是在指定的时间内没有读入或发送指定数量的字符,ReadFile或WriteFile的操作仍然会结束.

要查询当前的超时设置应调用GetCommTimeouts函数,该函数会填充一个COMMTIMEOUTS结构.调用SetCommTimeouts可以用某一个COMMTIMEOUTS结构的内容来设置超时.

读写串口的超时有两种:间隔超时和总超时.间隔超时是指在接收时两个字符之间的最大时延.总超时是指读写操作总共花费的最大时间.写操作只支持总超时,而读操作两种超时均支持.用COMMTIMEOUTS结构可以规定读写操作的超时.

COMMTIMEOUTS结构的定义为: typedef struct _COMMTIMEOUTS { DWORD ReadIntervalTimeout;//读间隔超时 DWORD ReadTotalTimeoutMultiplier;//读时间系数 DWORD ReadTotalTimeoutConstant;//读时间常量 DWORD WriteTotalTimeoutMultiplier;//写时间系数 DWORD WriteTotalTimeoutConstant;//写时间常量 } COMMTIMEOUTS,*LPCOMMTIMEOUTS;

COMMTIMEOUTS结构的成员都以毫秒为单位.总超时的计算公式是: 总超时=时间系数×要求读/写的字符数+时间常量

例如要读入10个字符,那么读操作的总超时的计算公式为:

搜索更多关于: MFC串口通信编程详解解析 的文档
MFC串口通信编程详解解析.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c293et3n3e23bj0w6iip07zlrl1bkfq0131k_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top