串口通信功能的实现小结

来源:本站
导读:目前正在解读《串口通信功能的实现小结》的相关信息,《串口通信功能的实现小结》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《串口通信功能的实现小结》的详细说明。
简介:利用VC++实现串口通信的方法有多种,我们采取直接调用Window API中的一系列标准的串口通信函数,直接用这些标准函数来完成Windows下面的串口通信编程[11]。利用WindowsAPI函数控制利用API 函数实现对RS232串口通信的访问,在实现控制通信中,我们必定要调动3个函数来实现对串口的控制: CreatFile()函数实现串口初始化并打开串口;

利用VC++实现串口通信的方法有多种,我们采取直接调用Window API中的一系列标准的串口通信函数,直接用这些标准函数来完成Windows下面的串口通信编程[11]。利用WindowsAPI函数控制利用API 函数实现对RS232串口通信的访问,在实现控制通信中,我们必定要调动3个函数来实现对串口的控制: CreatFile()函数实现串口初始化并打开串口;

ReadFile()函数接收串口传递过来的二进制流并返回数据到接收缓冲区中

WriteFile()把应用程序发出的指令送到发送缓冲区以供串口接收1. 打开串口

以下程序用于以同步方式打开串口COM1;

HANDLE hCom;

DWORD dwErrorHcomm=CreateFile(“COM1”,GENERIC_READ|GENERIC_WRITE

,0, NULL,OPEN_EXISTING, 0, NULL);

if (hComm==(HANDLE)0Xffff)

{

dwError=GetLastError();

MessageBox(dwError);

}

2. 配置串口

配置串口是通过改变设备控制块DCB(Device Control Block)的成员变量值来实现的,程序实现如下:

DCB dcb

dcb.BaudRate=9600;//波特率为9600bps

dcb.ByteSize=8;//数据位8位

dcb.Parity=EVENPARTTY;//有校验

dcb.StopBits=ONESTOPRTT; //一个停止位

SetCommState(hCom,&dcb);

3. 数据读写

对串口进行读写与对文件进行读写所用的函数相同,具体为可采用查询、同步、异步或事件驱动等方法对串口进行读写所用函数如下所示:

bReadStatus=ReadFile(hCom,buffer,length,&length &m_lpOverlapped);

if(!bReadStatus)

{

if(GetLastError()=ERROR_IO_PENDING)

{

WaitForSingleObject(m_lpOverlapped,hEvent,1000);

return((char)length);

}

return 0;

}

//写入函数程序为:

bWriteStatus=WriteFile(hCom,buffer,length,&length,&m_lpOverlapped)

if(!bWriteStatus)

{

if(GetLastError()=ERROR_IO_PENDING)

{

WaitForSingleObject(m_lpOverlapped, hEvent,1000);

return((char)length);

}

return 0;

}

4. 程序的编制

用VC++进行程序的编制首先要对串口进行初始化,设定端口,通信速率和校验方式,并在使用前打开串口,程序部分如下:

{

Cdialog::OnInitDialog();//TODO: Add extra initialization here

m_comm.SetCommPort(1);//选择串口1

if(! m_comm.GetPortOpen())

m_comm.SetPortOpen(TRUE);//打开串口1

m_comm.SetSettings(“9600,n,8,1”); //设置串口参数

m_comm.SetRThreshold(1);

m_comm.SetInputMode(1);//设置二进制模式

return TRUE;

}

除了串口的位置和基本串口参数(数据传输速率9600bps,1位开始位,8位数据位,1位停止位,一位奇偶校验)设置外,为了实现实时数据采集功能,接受数据的读写要尽可能的快速,则设置RTHreshold=1即接收缓冲区收到一个字节产生OnComm事件InputLen=1每次读取一个字节。如果 PC上位机在一定时间内不能将数据处理完,接收缓冲区会滞留数据,数据会产生丢失现象,我们必须对接受缓冲区进行适当的设置。我们利用API函数实现串口通信的方法,实现了罗经及发射机对上位机串行通信的功能。

提醒:《串口通信功能的实现小结》最后刷新时间 2024-03-14 01:04:14,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《串口通信功能的实现小结》该内容的真实性请自行鉴别。