社区
网络编程
帖子详情
串口通信中比较奇怪的问题:刚开机时串口收不到数据
foxnt
2005-02-02 09:44:54
如题,我用CreateFile和ReadFile来读数据的。一般情况下都能正常通信。但是如果是系统刚启动完,第一次读串口时,怎么也读不到数据,就是ReadFile根本不返回。如果这时候我用WINDOWS带的超级终端来发送,接受一次数据后,程序就一切正常,可读数据了。不知道为什么。
我是用串口线连自己的机器,一头连COM1,一头是USB转串口,模拟COM3。
有谁遇到过这种问题?
...全文
605
22
打赏
收藏
串口通信中比较奇怪的问题:刚开机时串口收不到数据
如题,我用CreateFile和ReadFile来读数据的。一般情况下都能正常通信。但是如果是系统刚启动完,第一次读串口时,怎么也读不到数据,就是ReadFile根本不返回。如果这时候我用WINDOWS带的超级终端来发送,接受一次数据后,程序就一切正常,可读数据了。不知道为什么。 我是用串口线连自己的机器,一头连COM1,一头是USB转串口,模拟COM3。 有谁遇到过这种问题?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
inpriser
2005-03-23
打赏
举报
回复
连接串口2,3针脚试试先,看看是不是由于USB引起
mousefj
2005-03-23
打赏
举报
回复
我的一段成功代码供参考
BOOL CComiotestDlg::OpenConnect()
{
m_hTermWnd=GetSafeHwnd();
if(m_bConnect)
return FALSE;
hCom=CreateFile("COM1",//文件名
GENERIC_READ|GENERIC_WRITE, // 允许读和写
0, // 独占方式
NULL,
OPEN_EXISTING, //打开而不是创建
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, // 重叠方式
NULL
);
if(hCom == INVALID_HANDLE_VALUE)
{
dwError=GetLastError( );
return FALSE;
// 处理错误
}
SetupComm(hCom,1024,1024 ); //缓冲区的大小为1024
//清除缓冲区
PurgeComm(hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
//超时的建立
TimeOuts. ReadIntervalTimeout=1000;
TimeOuts.ReadTotalTimeoutMultiplier=500;
TimeOuts.ReadTotalTimeoutConstant=5000;
TimeOuts.WriteTotalTimeoutMultiplier=500;
TimeOuts.WriteTotalTimeoutConstant=5000;
SetCommTimeouts(hCom, &TimeOuts); // 设置超时
//设置事件触发方式
SetCommMask(hCom,EV_RXCHAR);
if(ConfigConnect())
{
m_pThread=AfxBeginThread(CommProc, this, THREAD_PRIORITY_NORMAL,
0, CREATE_SUSPENDED, NULL); // 创建并挂起线程
if(m_pThread==NULL)
{
CloseHandle(hCom);
return FALSE;
}
else
{
m_bConnect=TRUE;
m_pThread->ResumeThread(); // 恢复线程运行
}
}
else
{
CloseHandle(hCom);
return FALSE;
}
}
BOOL CComiotestDlg::ConfigConnect()
{
DCB m_dcb;
if(!GetCommState(hCom, &m_dcb))
return FALSE;
m_dcb.fBinary=TRUE;
m_dcb.BaudRate=m_nBaud; // 波特率
m_dcb.ByteSize=m_nDataBits; // 每字节位数
m_dcb.fParity=TRUE;
switch(m_nParity) // 校验设置
{
case 0:
m_dcb.Parity=NOPARITY;
break;
case 1:
m_dcb.Parity=EVENPARITY;
break;
case 2:
m_dcb.Parity=ODDPARITY;
break;
default:;
}
switch(m_nStopBit) // 停止位
{
case 0:
m_dcb.StopBits=ONESTOPBIT;
break;
case 1:
m_dcb.StopBits=ONE5STOPBITS;
break;
case 2:
m_dcb.StopBits=TWOSTOPBITS;
break;
default:;
}
// 硬件流控制设置
//m_dcb.fOutxCtsFlow=m_nFlowCtrl==1;
//m_dcb.fRtsControl=m_nFlowCtrl==1?
//RTS_CONTROL_HANDSHAKE:RTS_CONTROL_ENABLE;
// XON/XOFF流控制设置
//m_dcb.fInX=dcb.fOutX=m_nFlowCtrl==2;
//m_dcb.XonChar=XON;
//m_dcb.XoffChar=XOFF;
//m_dcb.XonLim=50;
//m_dcb.XoffLim=50;
m_dcb.fBinary=TRUE;
return SetCommState(hCom, &m_dcb);
}
Sander
2005-03-23
打赏
举报
回复
你读,是用一个线程吗
Practise_Think
2005-03-23
打赏
举报
回复
可以先用一个可靠的串口读写软件来试试,比如串口调试助手等,到底是程序有问题还是系统串口设置有问题,逐个逐个方面来排除!!!
qinxiaogang
2005-03-21
打赏
举报
回复
绝对是没有设置超时结构:
COMMTIMEOUTS commTimeouts; // 串口超时
memset( &commTimeouts, 0, sizeof(COMMTIMEOUTS) );
commTimeouts.ReadIntervalTimeout = MAXDWORD; // 读立即返回
::SetCommTimeouts( m_hComm, &commTimeouts );
oyljerry
2005-03-21
打赏
举报
回复
先判断是程序问题,还是硬件转换问题
sandboy2002
2005-03-21
打赏
举报
回复
http://www.blindpoint.net/bbs/ShowForum.asp?forumid=7
red-fly
2005-02-07
打赏
举报
回复
GetCommState( m_ComportHandle, &m_dcb );
m_dcb.BaudRate = STRTOINT(m_BAUDRATE);
m_dcb.ByteSize = STRTOINT(m_BYTESIZE);
m_dcb.fParity = STRTOINT(m_PARITY);
m_dcb.StopBits = STRTOINT(m_STOPBITS);
--------------------------------------------------------------------
这里,对dcb的每个成员附值,肯定是有部分没有初始化,所以你在GetCommState时,其中的一些成员没有初始化,或者初始化的内容和你的不一样,但你却只对其中的4个成员初始化了
cuitcir
2005-02-04
打赏
举报
回复
可能缺少这几句
...
if(!SetupComm(CommHandle, 4096, 4096))
{
...
}
...
if(!SetCommTimeouts( CommHandle, &commtimeouts ))
{
...
}
PurgeComm(CommHandle, PURGE_TXABORT | PURGE_RXABORT |PURGE_TXCLEAR | PURGE_RXCLEAR) ;
狂放之歌
2005-02-04
打赏
举报
回复
但是如果是系统刚启动完,第一次读串口时,怎么也读不到数据,就是ReadFile根本不返回。如果这时候我用WINDOWS带的超级终端来发送,接受一次数据后,程序就一切正常,可读数据了。
不明白,难道WINDOWS带的超级终端 有信号补偿功能?
估计,是你程序的问题.可能再你用串口之前 还需要一个步骤...而这个步骤 WINDOWS带的超级终端替你实现了以后 你的程序才能正常工作..
这个 我没试过..机器太老.:____( 没 USB 55555555555555
shicheng521
2005-02-04
打赏
举报
回复
usb转串口有的时候就是不正常
aiirii
2005-02-04
打赏
举报
回复
USB 轉串口, 似乎有點不平常, 你可以掉轉測試的兩個串口試下
clovexmu
2005-02-04
打赏
举报
回复
当电脑上只有一个串口时如何模拟两个串口的功能 : 拿个9针母头,2,3针脚相连,那么发送出什么就会收到什么。
Sander
2005-02-03
打赏
举报
回复
给code看看
foxnt
2005-02-03
打赏
举报
回复
>>串口参数没有初始化
那要如何正确初始化? 各位看我的代码,每个函数都判断了是否成功,不成功就THROW 一个异常的. 但是所有的都返回了成功啊.
DentistryDoctor
2005-02-03
打赏
举报
回复
USB转串口?有可能是驱动还在加载过程中。
试试两个串口直接通信呢?如果还有问题,说明是你代码的问题。
试试Overlap I/O.
danielzhu
2005-02-03
打赏
举报
回复
串口参数没有初始化,所以在超级终端初始化之后,你的程序,继续默认使用了超级终端的配置参数,所以,你的程序就正常了
danielzhu
2005-02-03
打赏
举报
回复
http://www.gznet.com/gzcity/2005/2005-2-2/505937.html
red-fly
2005-02-03
打赏
举报
回复
那你要判断一下CreateFile是否成功了,不成功的话,读肯定是不行的
foxnt
2005-02-03
打赏
举报
回复
打开串口:
m_ComportHandle = CreateFile( m_ComName,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (m_ComportHandle == INVALID_HANDLE_VALUE)
throw CComException(E_UNEXPECTED, GetLastErrorDesc(GetLastError()),
__FILE__, __LINE__);
设置状态:
GetCommState( m_ComportHandle, &m_dcb );
m_dcb.BaudRate = STRTOINT(m_BAUDRATE);
m_dcb.ByteSize = STRTOINT(m_BYTESIZE);
m_dcb.fParity = STRTOINT(m_PARITY);
m_dcb.StopBits = STRTOINT(m_STOPBITS);
if( !SetCommState( m_ComportHandle, &m_dcb ))
{
DWORD errcode = GetLastError();
CloseHandle(m_ComportHandle);
throw CComException(errcode, GetLastErrorDesc(errcode), __FILE__, __LINE__);
}
读数据:
if (!ReadFile(m_ComportHandle, (void*)buf, m_ComBuffer, &readed, NULL))
{
....
}
加载更多回复(1)
彻底解决
串口
数据
误装鼠标的
问题
.rar
这个
问题
通常发生在Windows XP和Windows 7等操作系统上,尤其是当电脑启动
时
,
串口
接收到的
数据
被错误地识别为鼠标输入,导致鼠标行为异常,如乱动、无法正常使用等,严重影响用户的工作和体验。 要彻底解决这个...
Qt 实
时
读
串口
数据
,并将读到的
数据
从网口发送出去
在本文
中
,我们将深入探讨如何使用Qt框架实现一个无界面应用程序,该程序可以从
串口
读取
数据
,并将接收到的
数据
通过网络接口发送出去。Qt是一个跨平台的应用开发框架,广泛应用于桌面、移动和嵌入式系统,支持C++和...
大彩
串口
屏如何设置
开机
动画教程.zip
串口
屏是一种通过串行通信接口(如RS232或UART)进行
数据
传输的显示屏,它允许开发者通过简单的指令集控制屏幕上的显示内容,包括文字、图片和动画。这种控制方式相对于并行接口更为简洁,减少了硬件连接的复杂性。 ...
串口
通信
协议的制定方法
无论是单片机、DSP(数字信号处理器)还是嵌入式系统与PC机或无线模块之间的通信,
串口
通信
都因其简单、经济、成熟及通用的优点而在
数据
传输要求不高的场景下发挥了重要作用。通信协议是通信双方必须遵守的一系列...
串口
调试助手.zip
它主要用于通过串行接口(Serial Port)进行
数据
传输和接收,帮助开发者诊断和解决通信
问题
。"
串口
助手.zip" 包含了主程序 "sscom33.exe" 和配置文件 "sscom.ini"。
串口
,即Serial Port,是计算机上一种传统的通信...
网络编程
18,363
社区成员
64,187
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章