没有合适的资源?快使用搜索试试~ 我知道了~
VC_MFC串口通信编程详解
3星 · 超过75%的资源 需积分: 10 7 下载量 40 浏览量
2012-09-24
17:30:06
上传
评论
收藏 146KB PDF 举报
温馨提示
试读
13页
利用VC MFC 详细描述了通信编程的步骤,相信对于大家了解串口及通信是有很多作用的。
资源推荐
资源详情
资源评论
MFC 串口通信编程介绍
主要介绍了用 CreateFile()函数和 WriteFile()函数读写串口的实例,以及设置
串口属性的实例.
在工业控制中,工控机(一般都基于 Windows 平台)经常需要与智能仪表通过串口
进行通信.串口通信方便易行,应用广泛.
一般情况下,工控机和各智能仪表通过 RS485 总线进行通信.RS485 的通信方式是
半双工的,只能由作为主节点的工控 PC 机依次轮询网络上的各智能控制单元子节点.
每次通信都是由 PC 机通过串口向智能控制单元发布命令,智能控制单元在接收到正
确的命令后作出应答.
在 Win32 下,可以使用两种编程方式实现串口通信,其一是使用 ActiveX 控件,这种
方法程序简单,但欠灵活.其二是调用 Windows 的 API 函数,这种方法可以清楚地掌握
串口通信的机制,并且自由灵活.下面只介绍 API 串口通信部分.
串口的操作可以有两种操作方式:同步操作方式和重叠操作方式(又称为异步操作
方式).同步操作时,API 函数会阻塞直到操作完成以后才能返回(在多线程方式中,
虽然不会阻塞主线程,但是仍然会阻塞监听线程);而重叠操作方式,API 函数会立即
返回,操作在后台进行,避免线程的阻塞.
无论哪种操作方式,一般都通过四个步骤来完成:
(1)打开串口
(2)配置串口
(3)读写串口
(4)关闭串口
一 打开串口
Win32 系统把文件的概念进行了扩展.无论是文件、通信设备、命名管道、邮件
槽、磁盘、还是控制台,都是用 API 函数 CreateFile 来打开或创建的.该函数的原型
为:
HANDLE CreateFile( LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDistribution,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile);
• lpFileName:将要打开的串口逻辑名,如“COM1”;
• dwDesiredAccess:指定串口访问的类型,可以是读取、写入或二者并列;
• dwShareMode:指定共享属性,由于串口不能共享,该参数必须置为 0;
• lpSecurityAttributes:引用安全性属性结构,缺省值为 NULL;
• dwCreationDistribution:创建标志,对串口操作该参数必须置为
OPEN_EXISTING;
• dwFlagsAndAttributes:属性描述,用于指定该串口是否进行异步操作,该值
为 FILE_FLAG_OVERLAPPED,表示使用异步的 I/O;该值为 0,表示同步 I/O 操
作;
• hTemplateFile:对串口而言该参数必须置为 NULL;
同步 I/O 方式打开串口的示例:
HANDLE hCom;//全局变量,串口句柄
hCom=CreateFile("COM1",//串口名称
GENERIC_READ|GENERIC_WRITE,//允许读和写
0,//独占方式
NULL,
OPEN_EXISTING,//打开而不是创建
0,//同步方式
NULL);
if(hCom==(HANDLE)-1)
{
MessageBox("打开 COM 失败!");
return FALSE;
}
return TRUE;
重叠 I/O 打开串口的示例:
HANDLE hCom;//全局变量,串口句柄
hCom =CreateFile("COM1",//串口名称
GENERIC_READ|GENERIC_WRITE,//允许读和写
0,//独占方式
NULL,
OPEN_EXISTING,//打开而不是创建
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,//重叠方式
NULL);
if(hCom==INVALID_HANDLE_VALUE)
{
MessageBox("打开 COM 失败!");
return FALSE;
}
return TRUE;
二 配置串口
在打开通讯设备句柄后,常需要对串口进行一些初始化配置工作.这需要通过一个
DCB 结构来进行.DCB 结构包含了诸如波特率、数据位数、奇偶校验和停止位数等信
息.在查询或配置串口的属性时,都要用 DCB 结构来作为缓冲区.
一般用 CreateFile 打开串口后,可以调用 GetCommState 函数来获取串口的初始配
置.要修改串口的配置,应该先修改 DCB 结构,然后再调用 SetCommState 函数设置串
口.
DCB 结构包含了串口的各项参数设置,下面仅介绍几个该结构常用的变量:
typedef struct _DCB{
………
//波特率,指定通信设备的传输速率.这个成员可以是实际波特率值或者下面的
常量值之一:
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 // 输出缓冲区的大小(字节数)
);
剩余12页未读,继续阅读
资源评论
- yjbjtg2012-12-12还算有点用吧!
yangxiong5600
- 粉丝: 1
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- rainy-day.jpg
- IMG_20240501_171218.jpg
- Swift-内购封装swift版本
- 经典CNN网络之ResNet 图像分类网络实战项目:7种小麦叶片病害分类(迁移学习)
- Java毕设之ssm010基于ssm的新能源汽车在线租赁管理系统+vue.rar
- Java毕设之ssm009毕业生就业信息统计系统+vue.rar
- Java毕设之ssm008医院门诊挂号系统+jsp.rar
- Java毕设之ssm007亚盛汽车配件销售业绩管理统+jsp.rar
- Java毕设之ssm006基于java的少儿编程网上报名系统+vue.rar
- Java毕设之ssm005基于SSM框架的购物商城系统+jsp.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功