【发布时间】: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