求解createfile打开串口失败
com_handle = CreateFile("\\\\.\\COM28",GENERIC_READ|GENERIC_WRITE, //允许读和写操作
0, //独占方式
NULL,
OPEN_EXISTING, //打开一个存在的串口
FILE_ATTRIBUTE_NORMAL,
NULL); com28是usb转串口,按网上百度的方法,也没有成功 查了下我以前也这么写的没问题 #define COMM L"COM3"
hcomm = CreateFileW(COMM,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
0);
这是我用的,仅供参考。 看一下错误码,确定原因。
if (hCom == INVALID_HANDLE_VALUE)
{
TCHAR szBuf;
LPVOID lpMsgBuf;
dwError=GetLastError();
printf("打开COM失败!错误原因 %ld\n", dwError);
FormatMessage (
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwError,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0,
NULL );
wsprintf(szBuf, "出错信息 (出错码=%d): %s", dwError, lpMsgBuf);
LocalFree(lpMsgBuf);
//输出提示。
printf("%s", szBuf);
return FALSE;
}
else
{
printf("%s 打开成功!\n", cComName);
} 楼主,你至少得整个GetLastError的返回值啊,要不然看着你这代码猜啊 估计串口名搞错或串口已被占用 tim 发表于 2020-8-27 11:09
估计串口名搞错或串口已被占用
用友善的串口助手打开、关闭都是正常的 shiva_shiva 发表于 2020-8-27 11:06
看一下错误码,确定原因。
if (hCom == INVALID_HANDLE_VALUE)
错误码2 canspider 发表于 2020-8-27 11:06
楼主,你至少得整个GetLastError的返回值啊,要不然看着你这代码猜啊
错误码2
// 硬件接口初始化
com_handle = CreateFile("\\\\.\\COM28",
GENERIC_READ|GENERIC_WRITE, //允许读和写操作
0, //独占方式
NULL,
OPEN_EXISTING, //打开一个存在的串口
FILE_ATTRIBUTE_NORMAL,
NULL);
if (com_handle != INVALID_HANDLE_VALUE)
{
DCB dcb;
GetCommState(com_handle,&dcb);
dcb.BaudRate = baudrate;
dcb.Parity = 0;
dcb.ByteSize = 8;
dcb.StopBits = 1;
SetCommState(com_handle,&dcb);
SetupComm(com_handle, 4200, 4200);
COMMTIMEOUTS CommTimeouts;
GetCommTimeouts(com_handle, &CommTimeouts);
CommTimeouts.ReadTotalTimeoutConstant = 1000;
SetCommTimeouts(com_handle, &CommTimeouts);
}
else
{
DWORD error = GetLastError();
printf("error:%d\n",error);
return 1;
} 文件名写错了 fengyunyu 发表于 2020-8-27 11:14
错误码2
// 硬件接口初始化
2 是没有这个文件,没有这个串口吧 usb转串口拔了再插串口号可能会变 串口号超过10写法不一样。串口名错误 com_handle = CreateFile("\\\\.\\COM28",改为com_handle = CreateFile(_T("\\\\.\\COM28"),试一下 没有解决,怪了 CreateFile("\\.\\COM28", 字符集的问题,改为使用多字节字符集就对了
fengyunyu 发表于 2020-8-27 14:58
字符集的问题,改为使用多字节字符集就对了
所以你根本没有看我15楼的回复。_T宏不管是MBCS还是Unicode结果都是对的。 本帖最后由 fengyunyu 于 2020-8-27 15:23 编辑
takashiki 发表于 2020-8-27 15:13
所以你根本没有看我15楼的回复。_T宏不管是MBCS还是Unicode结果都是对的。
_T,大神莫怪,对vs不熟悉,加了这个宏后报错。#include <tchar.h>,加了这个头文件可以编译过了,谢谢 takashiki 发表于 2020-8-27 15:13
所以你根本没有看我15楼的回复。_T宏不管是MBCS还是Unicode结果都是对的。
连GetLastError都不知道人,你还能指望他知道用_T宏么 canspider 发表于 2020-8-27 15:23
连GetLastError都不知道人,你还能指望他知道用_T宏么
见笑了!
页:
[1]