win ce 4.2串口开发的问题?

duan001 2006-11-08 10:08:04
代码如下:

hSerial = CreateFile(L"COM1:",
               GENERIC_READ | GENERIC_WRITE,
               0,
               NULL,
               OPEN_EXISTING,
               0,
               NULL);

if(m_hSerial == NULL)
{
///L"串口打开失败";
return;
}

  //指定端口监测的事件集
  SetCommMask (hSerial , EV_RXCHAR);

  //分配设备缓冲区 
  SetupComm(hSerial ,512,512);

 //初始化缓冲区中的信息
 PurgeComm(hSerial ,PURGE_TXCLEAR|PURGE_RXCLEAR);

///配置串口
DCB PortDCB;
PortDCB.DCBlength = sizeof(DCB);
// 默认串口参数

  //得到端口的默认设置信息
  GetCommState (hPort, &PortDCB);
  //改变DCB结构设置
  PortDCB.BaudRate = 19200; //波特率
  PortDCB.fBinary = TRUE; //Win32不支持非二进制串行传输模式,必须为TRUE
  PortDCB.fParity = TRUE; //启用奇偶校验
  PortDCB.fOutxCtsFlow = TRUE; //串行端口的输出由CTS线控制
  PortDCB.fOutxDsrFlow = FALSE; //关闭串行端口的DSR流控制
  PortDCB.fDtrControl = DTR_CONTROL_ENABLE; //启用DTR线
  PortDCB.fDsrSensitivity = FALSE; //如果设为TRUE将忽略任何输入的字节,除非DSR线被启用
  //PortDCB.fTXContinueOnXoff = TRUE; //当为TRUE时,如果接收缓冲区已满且驱动程序已传送XOFF字符,将使驱动程序停止传输字符

  PortDCB.fTXContinueOnXoff = FALSE;
  PortDCB.fOutX = FALSE; //设为TRUE指定XON/XOFF控制被用于控制串行输出
  PortDCB.fInX = FALSE; //设为TRUE指定XON/XOFF控制被用于控制串行输入
  PortDCB.fErrorChar = FALSE; //WINCE串行驱动程序的默认执行将忽略这个字段
  PortDCB.fNull = FALSE; //设为TRUE将使串行驱动程序忽略收到的空字节
  PortDCB.fRtsControl = RTS_CONTROL_ENABLE; //启用RTS线
  PortDCB.fAbortOnError = FALSE; //WINCE串行驱动程序的默认执行将忽略这个字段
  PortDCB.ByteSize = 8; //每字节的位数
  PortDCB.Parity = NOPARITY; //无奇偶校验
  PortDCB.StopBits = ONESTOPBIT; //每字节一位停止位


  if (!SetCommState (hPort, &PortDCB))
  {
   //不能配置串行端口
   MessageBox (NULL, TEXT("Unable to configure the serial port"),TEXT("Error"), MB_OK);
   dwError = GetLastError ();
   return FALSE;
  }
  return TRUE;


每次执行到这里就不行了, dwError返回值为6,6的意思好象是无效的句柄,
不能配置串行端口。请各位高手指教!
...全文
729 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyz666 2007-01-15
  • 打赏
  • 举报
回复
可能驱动有问题,我也在串口通讯都没问题。
najzni 2007-01-15
  • 打赏
  • 举报
回复
我也碰到类似的问题,问题出在SetCommState 函数这儿,PortDCB结构只需要设置 数据位、停止位、奇偶校验位、波特率四个参数就可以了。
红牛哥110 2007-01-03
  • 打赏
  • 举报
回复
if(m_hSerial == NVALID_HANDLE_VALUE)
红牛哥110 2007-01-03
  • 打赏
  • 举报
回复
m_hSerial = CreateFile(L"COM1:",
               GENERIC_READ | GENERIC_WRITE,
               0,
               NULL,
               OPEN_EXISTING,
               0,
               NULL);

if(m_hSerial == NULL)
{
///L"串口打开失败";
return;
}
//還不對,就是Com1被其它程度占用了,或驅動有問題.
//感覺代碼很亂,一下hSerial,一下又m_hSerial .
e32hmi 2006-12-31
  • 打赏
  • 举报
回复
各位高手,请问,我希望在我的win ce样机中增加类似于terminal那样的串口信息显示软件,可能吗?如何做?谢谢。
wushirenfei3 2006-12-31
  • 打赏
  • 举报
回复
给你一个VC串口这部分源代码参考一下,希望对你有帮助

BOOL CPSerialPort::OpenPort(LPCTSTR Port,int BaudRate,int DataBits,int StopBits,int Parity,LPDataArriveProc proc,DWORD userdata)
{
m_lpDataArriveProc=proc;
m_dwUserData=userdata;

if(m_hComm==INVALID_HANDLE_VALUE)
{
m_hComm=CreateFile(Port,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
if(m_hComm==INVALID_HANDLE_VALUE )
{
AfxMessageBox(_T("无法打开端口!请检查是否已被占用。"));
return FALSE;
}
GetCommState(m_hComm,&dcb);
dcb.BaudRate=BaudRate;
dcb.ByteSize=DataBits;
dcb.Parity=Parity;
dcb.StopBits=StopBits;
dcb.fParity=FALSE;
dcb.fBinary=TRUE;
dcb.fDtrControl=0;
dcb.fRtsControl=0;
dcb.fOutX=dcb.fInX=dcb.fTXContinueOnXoff=0;

//设置状态参数
SetCommMask(m_hComm,EV_RXCHAR | EV_ERR);
SetupComm(m_hComm,16384,16384);
if(!SetCommState(m_hComm,&dcb))
{
AfxMessageBox(_T("无法按当前参数配置端口,请检查参数!"));
PurgeComm(m_hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
ClosePort();
return FALSE;
}

//设置超时参数
GetCommTimeouts(m_hComm,&CommTimeOuts);
CommTimeOuts.ReadIntervalTimeout=100;
CommTimeOuts.ReadTotalTimeoutMultiplier=1;
CommTimeOuts.ReadTotalTimeoutConstant=100;
CommTimeOuts.WriteTotalTimeoutMultiplier=0;
CommTimeOuts.WriteTotalTimeoutConstant=0;
if(!SetCommTimeouts(m_hComm,&CommTimeOuts))
{
AfxMessageBox(_T("无法设置超时参数!"));
PurgeComm(m_hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
ClosePort();
return FALSE;
}

PurgeComm(m_hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
return TRUE;
}

return FALSE;
}
YourKing 2006-12-28
  • 打赏
  • 举报
回复
如果CreateFile得到了正确的handle那么下面用这个handle就不会NVALID_HANDLE_VALUE,除非你给它又付值为NVALID_HANDLE_VALUE
看你上面的代码,你可能是在一个地方CreateFile,然后有在另一个地方调用那个handle的,建议统一只用一个。你一会儿hSerial ,一会儿hPort,一会儿m_hSerial,其中一个有改动就会影响另外的几个。
建议你CreateFile后开始单步调试,一步一步走,成功了再走下一步,如先GetCommState 成功了再SetCommState ,很快就可以找到问题关键的
sankt 2006-12-28
  • 打赏
  • 举报
回复
换个com口试试看
duan001 2006-11-28
  • 打赏
  • 举报
回复
再改为:
hSerial = CreateFile(L"COM1:", ....

还是提示为:
m_hSerial == NVALID_HANDLE_VALUE

请高手指教!
可不可能是串口驱动的问题?
硬件的问题可以排除, 因为烧录的时候用超级终端都没有问题。
我用的是win ce 4.2, S3C2410的开发板。
duan001 2006-11-25
  • 打赏
  • 举报
回复
thanks,

hSerial = CreateFile(L"COM1:", ....
已改成hSerial = CreateFile(L"COM1", ....


if(m_hSerial == NULL)是笔误,
已改成if(m_hSerial == NVALID_HANDLE_VALUE)


现在提示为:
m_hSerial == NVALID_HANDLE_VALUE


hansin 2006-11-24
  • 打赏
  • 举报
回复
COM1: 冒号可以去掉试一下
singlerace 2006-11-24
  • 打赏
  • 举报
回复
典型的错误,CreateFile失败时返回INVALID_HANDLE_VALUE,不是NULL。你这段代码可能CreateFile就失败了。
hSerial = CreateFile(L"COM1:",
               GENERIC_READ | GENERIC_WRITE,
               0,
               NULL,
               OPEN_EXISTING,
               0,
               NULL);

if(m_hSerial == NULL)
{
}
crazyeagle 2006-11-24
  • 打赏
  • 举报
回复
hSerial:串口句柄
m_hSerial:??
hPort:??
lyl_98 2006-11-24
  • 打赏
  • 举报
回复
句柄都不对啊,
这代码,是从别的的方拷得把
lenux 2006-11-24
  • 打赏
  • 举报
回复
串口句柄要统一啊,下面用的句柄和打开的串口根本不一致。

CreateFile后返回的是hSerial,下面却用到了if(m_hSerial == NULL)
GetCommState (hPort, &PortDCB);
if (!SetCommState (hPort, &PortDCB))

都改成hSerial应该就可以了
meric 2006-11-23
  • 打赏
  • 举报
回复
DCB用设那么多吗,设个波特率、奇偶校验……几项试试
测试程序?类似串口精灵?google一下,ARM的见过,其他的没有试过
duan001 2006-11-22
  • 打赏
  • 举报
回复
GZ
duan001 2006-11-08
  • 打赏
  • 举报
回复
thanks,
不知道是不是用BP添加串口驱动有没问题!
那里有串口的测试程序?

YourKing 2006-11-08
  • 打赏
  • 举报
回复
DCB结构里不用每个都设定吧,只设你用到的就可以了
还有MSDN:
The SetCommState function fails if the XonChar member of the DCB structure is equal to the XoffChar member.
色郎中 2006-11-08
  • 打赏
  • 举报
回复
帮你顶下
【DQN、PyTorch】使用深度Q网络(DQN)和非正交多址接入(NOMA)的无人机上行链路干扰管理研究(Python代码实现)内容概要:本文研究了基于深度Q网络(DQN)和非正交多址接入(NOMA)技术的无人机上行链路干扰管理方法,旨在解决无人机通信中存在的干扰问题。通过构建DQN强化学习模型,结合NOMA技术特点,对无人机上行链路的资源分配与功率控制进行智能优化,从而提升通信系统的频谱效率和抗干扰能力。文中给出了完整的Python代码实现,涵盖了环境建模、状态空间与动作空间设计、奖励函数设定及DQN算法训练等关键环节,实现了在复杂动态环境下对多无人机通信干扰的有效管理。; 适合人群:具备一定机器学习与无线通信基础知识,熟悉Python编程,从事通信系统优化、强化学习应用研究的相关科研人员及研究生。; 使用场景及目标:①应用于无人机密集通信场景中的上行链路干扰协调;②为基于深度强化学习的无线资源管理提供可复现的技术方案;③推动NOMA与AI融合在6G空地一体化网络中的发展。; 阅读建议:建议读者结合PyTorch框架深入理解DQN网络结构实现细节,重点关注状态特征选取与奖励机制设计对收敛性的影响,并通过调试代码掌握算法在不同场景下的泛化能力。
内容概要:本文对下垂控制与虚拟同步机(VSG)两种并网型(grid-forming)控制策略进行了系统性的性能对比研究,并基于Simulink仿真平台构建了完整的系统模型,开展动态响应分析。研究深入探讨了两种控制策略在频率调节、有功/无功功率分配、电压支撑能力以及应对负载突变、电网扰动等非理想工况下的控制特性差异。内容涵盖控制原理建模、关键参数设计、稳定性分析及仿真验证全过程,重点剖析了VSG在惯性和阻尼模拟方面的优势,以及下垂控制在简单性与可扩展性上的特点,旨在为构网型逆变器在微电网、新能源并网及新型电力系统中的工程应用提供理论支撑与选型依据。; 适合人群:具备电力电子、自动控制理论及新能源并网技术基础知识的研究生、科研人员及相关领域的工程技术人员。; 使用场景及目标:①深入理解下垂控制与虚拟同步机的核心控制原理及其在Simulink中的实现方法;②掌握并对比两者在动态响应速度、系统稳定性、抗扰动能力及工况适应性等方面的性能差异;③为微电网、储能系统、分布式电源等场景下的控制器设计、参数优化与技术路线选择提供仿真验证手段与决策支持; 阅读建议:建议结合提供的Simulink仿真模型进行动手实践,重点关注控制器参数(如VSG的转动惯量、阻尼系数,下垂系数等)对系统性能的影响,通过对比不同扰动工况下的仿真波形,深刻领会两种策略各自的适用边界与优缺点。

19,524

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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