你好,你能帮我解一个问题吗,在VC++读取串口的数据

chinamikeowen10 2003-08-19 11:32:54
我已经把程序和串口调试程序附上,简单的通信协议
现在我主要的问题是读取串口数据有问题
谢谢你!
...全文
50 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanfyj 2003-08-19
  • 打赏
  • 举报
回复
http://www.china-pub.com/computers/emook/0917/info.htm
mct1025 2003-08-19
  • 打赏
  • 举报
回复
读写串口的函数,我用过,没有问题
程序初始化时,使用OpenComm打开串口,退出时使用CloseComm关闭
comm.h文件
// Comm.h: interface for the CComm class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(COMM_H__)
#define COMM_H__

BOOL OpenComm(const char* pPort, int nBaudRate=57600, int nParity=NOPARITY, int nByteSize=8, int nStopBits=ONESTOPBIT);
BOOL CloseComm();
void WriteComm(void* pData, int nLength);
int ReadComm(void* pData, int nLength);

#endif // !defined(COMM_H__)
comm.cpp文件
#include "stdafx.h"

#include "Comm.h"

// 串口设备句柄
HANDLE hComm;

// 打开串口
// pPort: 串口名称或设备路径,可用"COM1"或"\\.\COM1"两种方式,建议用后者
// nBaudRate: 波特率
// nParity: 奇偶校验
// nByteSize: 数据字节宽度
// nStopBits: 停止位
BOOL OpenComm(const char* pPort, int nBaudRate, int nParity, int nByteSize, int nStopBits)
{
DCB dcb; // 串口控制块
COMMTIMEOUTS timeouts = { // 串口超时控制参数
100, // 读字符间隔超时时间: 100 ms
1, // 读操作时每字符的时间: 1 ms (n个字符总共为n ms)
500, // 基本的(额外的)读超时时间: 500 ms
1, // 写操作时每字符的时间: 1 ms (n个字符总共为n ms)
100}; // 基本的(额外的)写超时时间: 100 ms

hComm = CreateFile(pPort, // 串口名称或设备路径
GENERIC_READ | GENERIC_WRITE, // 读写方式
0, // 共享方式:独占
NULL, // 默认的安全描述符
OPEN_EXISTING, // 创建方式
0, // 不需设置文件属性
NULL); // 不需参照模板文件

if(hComm == INVALID_HANDLE_VALUE) return FALSE;

// 打开串口失败

GetCommState(hComm, &dcb); // 取DCB

dcb.BaudRate = nBaudRate;
dcb.ByteSize = nByteSize;
dcb.Parity = nParity;
dcb.StopBits = nStopBits;

SetCommState(hComm, &dcb); // 设置DCB

SetupComm(hComm, 4096, 1024); // 设置输入输出缓冲区大小

::SetCommTimeouts(hComm, &timeouts); // 设置超时

return TRUE;
}

// 关闭串口
BOOL CloseComm()
{
return CloseHandle(hComm);
}

// 写串口
// pData: 待写的数据缓冲区指针
// nLength: 待写的数据长度
void WriteComm(void* pData, int nLength)
{
DWORD dwNumWrite; // 串口发出的数据长度

WriteFile(hComm, pData, (DWORD)nLength, &dwNumWrite, NULL);
}

// 读串口
// pData: 待读的数据缓冲区指针
// nLength: 待读的最大数据长度
// 返回: 实际读入的数据长度
int ReadComm(void* pData, int nLength)
{
DWORD dwNumRead; // 串口收到的数据长度

ReadFile(hComm, pData, (DWORD)nLength, &dwNumRead, NULL);

return (int)dwNumRead;
}

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧