资源简介
简单的串口类,包含.CPP和.H,两个文件,采用异步IO读写,实现串口的读写

代码片段和文件信息
#include “StdAfx.h“
#include “CVisionSerial.h“
CVisionSerial::CVisionSerial(void)
{
hCom = NULL;
memset(&Overlapped0sizeof(Overlapped));
Overlapped.hEvent = CreateEvent(NULLFALSEFALSENULL);
}
CVisionSerial::~CVisionSerial(void)
{
}
int CVisionSerial::Init(LPCTSTR lpstrint BaudRateint ByteSizeint Parityint StopBitsint timer)
{
InitializeCriticalSection(&m_csCommunicationSync);
hCom = CreateFile(lpstr GENERIC_READ | GENERIC_WRITE 0 NULL
OPEN_EXISTING FILE_FLAG_OVERLAPPED
NULL);
if (INVALID_HANDLE_VALUE == hCom)
{
CloseHandle(hCom);
return ERROR_OPENFAIL;
}
if (SetupComm(hCom32*102432*1024) == false)
return ERROR_SETBUFFER;
PurgeComm(hComPURGE_RXCLEAR | PURGE_TXCLEAR);
COMMTIMEOUTS TimeOuts;
TimeOuts.ReadIntervalTimeout = 100;
TimeOuts.ReadTotalTimeoutConstant = timer;
TimeOuts.ReadTotalTimeoutMultiplier = 0;
TimeOuts.WriteTotalTimeoutConstant = timer;
TimeOuts.WriteTotalTimeoutMultiplier = 0;
if (SetCommTimeouts(hCom&TimeOuts) == false)
return ERROR_CRPTIMEOUT;
DCB dcb;
if(GetCommState(hCom&dcb) == false)
return ERROR_PORTFAULT;
dcb.BaudRate = BaudRate;
dcb.ByteSize = ByteSize;
dcb.Parity = Parity;
dcb.StopBits = StopBits;
if (SetCommState(hCom&dcb) == false)
return ERROR_PORTFAULT;
PurgeComm(hCom PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);
return 0;
}
int CVisionSerial::SendData(char *buff int lenunsigned long *WrittenLen)
{
PurgeComm(hCom PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);
EnterCriticalSection(&m_csCommunicationSync);
BOOL bWriteStat = WriteFile(hCombufflenWrittenLen&Overlapped); //向用户传送数据
if (!bWriteStat)
{
if (GetLastError() == ERROR_IO_PENDING)
WaitForSingleobject(Overlapped.hEvent1000);
}
LeaveCriticalSection(&m_csCommunicationSync);
return bWriteStat;
}
void CVisionSerial::ReadData(char *buffunsigned long byteRead unsigned long *len)
{
EnterCriticalSection(&m_csCommunicationSync);
if (ReadFile(hCombuffbyteReadlen&Overlapped) == FALSE) //读取串口数据
{
int i=GetLastError();
if (GetLastError() == ERROR_IO_PENDING)
{
GetOverlappedResult(hCom&OverlappedlenTRUE);
}else
{
memset(buff0sizeof(buff));
}
}
LeaveCriticalSection(&m_csCommunicationSync);
}
HANDLE CVisionSerial::getHCOM()
{
return hCom;
}
void CVisionSerial::closeHCOM()
{
if (hCom != NULL)
{
CloseHandle(hCom);
}
}
void CVisionSerial::ClearOutBuffer()
{
::PurgeComm(hCom PURGE_TXABORT | PURGE_TXCLEAR );
}
void CVisionSerial::ClearInBuffer()
{
::PurgeComm(hCom PURGE_RXABORT | PURGE_RXCLEAR);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2730 2015-08-27 16:55 Serialport.cpp
文件 774 2015-08-27 16:56 Serialport.h
----------- --------- ---------- ----- ----
3504 2
- 上一篇:微信分享到朋友,朋友圈,QQ,QQ空间
- 下一篇:STAP90有限元程序
相关资源
- Modbus协议官方文档中、英文全
- Rational Rose Common破解文件
- 易语言OTG串口通信
- delphi 串口通讯
- STM32蓝牙和串口程序
-
Windows em
bedded Compact 2013 应用开发调 - LCD显示温度+串口接收温度.rar
- WPF USB 网络 串口 通信软件
- DELPHI与西门子200PLC的串口通信实例
- Verilog FPGA UART串口控制器
- USB转串口驱动,FT232R驱动程序,最新
- PC -- 单片机的串口数据传输系统设计
- STM32F103 串口程序(完整版)
- stm32 ds18b20 温度传感器 测试通过
- PC 串口调试软件
- 51单片机读取温度数据存储到SD卡中并
- VESA Computer Display Monitor Timing (DMT)
- 单片机与PC机串口通讯仿真
- 一个扩展的CComboBox 下拉框 自绘 美化
- 串口调试助手V5.0
- 双串口调试助手 V4.0 _ 可同时调试两个
- 读取串口数据并画实时曲线的VC 程序
- keil vcom windows 7 64bit 驱动
- 可编辑的CListctrl 支持CEDIT文本框,C
- 网络(UDP)转串口程序
- 串口绘制曲线 将收到的数据进行曲线
- 基于ARM蓝牙传输源程序
- JS操作本地网页串口源码
- DICOM图像读取以及窗宽,窗位调整
- OPC插件OPC Core Components 2.00 SDK 2.20
评论
共有 条评论