【问题标题】:SerialPort StopBits Windows7 C++/CLISerialPort StopBits Windows7 C++/CLI
【发布时间】:2011-06-30 13:10:53
【问题描述】:

我一直在使用 C++/CLI (Windows::IO::Ports) 中的 SerialPort 类来打开串行端口并与外围设备通信,一切似乎都正常。端口打开,数据被发送。但是我没有从外围设备得到答案。

我使用如下代码:

SerialPort^ _serialPort;
_serialPort = gcnew SerialPort();

//_serialPort = gcnew SerialPort("COM1",115200,Parity::None, 8, StopBits::One);

// Allow the user to set the appropriate properties.
_serialPort->PortName = "COM1";
_serialPort->BaudRate = 115200;

//Parity None by default
//_serialPort->Parity = Parity::None;

_serialPort->DataBits = 8;

_serialPort->StopBits = StopBits::One;

// Set the read/write timeouts
_serialPort->ReadTimeout = 1000;
_serialPort->WriteTimeout = 500;
_serialPort->Open();

用程序监控串口通信,好像停止位的个数是0。可以看到,我把停止位设置为1,最奇怪的是默认值是1。我不知道为什么它一直为0。我试图改变波特率和数据位,它被改变了,但是StopBits没有办法......

这真的很可惜,因为这似乎真的更容易使用网络上的其他代码。

有人可以帮我吗?任何想法为什么它不起作用?


谁能告诉我,如果这段代码没问题?

发送的数组是:array<Byte>^ bytes = gcnew array<Byte>(32);(用一些值初始化)

发送数据我使用:_serialPort->Write(bytes,0,32);

读取我尝试过的数据:

_serialPort->Read(readarray,0,18);
_serialPort->ReadExisting();

而且它们都没有取回任何数据...当我使用串行端口监视器打开通信并发送相同的字节时,它会回答...

【问题讨论】:

  • 你用过什么监控程序。除非您从端口捕获信号,否则您如何验证有零停止位?至于 Ben Voigt 的回答,您可能不使用 DCB,但您使用的监控程序可能会使用,这就是它显示为零的原因。
  • 你的意思是"Prolific" chipset
  • 我下载了 Serial Port Monitor 4.0 来检查它(我也使用串行端口,查看其他软件总是很方便:) 如果我从沼泽标准串行终端应用程序打开串行端口停止位设置为一个停止位,然后串行端口监视器显示“StopBits - 0”。如果我用两个停止位打开它,那么 SMP4.0 会显示“StopBits - 2”。所以它看起来确实显示了 DCB 值。
  • +1 用于下载和测试有问题的嗅探器
  • 您与什么设备通信?您可以发布将数据写入设备的代码吗?

标签: windows visual-studio-2010 c++-cli serial-port


【解决方案1】:

停止位由不等于停止位数量的枚举值配置。

零是一位停止位的正确编码。见http://msdn.microsoft.com/en-us/library/aa363214.aspx

【讨论】:

  • 但我不使用 DCB 结构来设置位停止。我使用“SerialPort”参考中的属性:StopBits StopBits link。当我使用这种结构时它应该工作吗?停止位应该如何设置?
  • @Vic:当然使用 DCB 结构来设置停止位,这是 Win32 API 提供的唯一方式。您只是碰巧调用了一个包装函数,该函数将 .NET StopBits 枚举转换为 Win32 DCB 设置。
【解决方案2】:

找到了!!似乎即使将“握手”设置为“无”,数据发送后 DTR 和 RTS 端口也设置为低电平。 (我不知道为什么)。

我手动将它们设置为高:

_serialPort->RtsEnable = true;
_serialPort->DtrEnable =true;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多