串行端口停止位Windows7c++/CLI

串行端口停止位Windows7c++/CLI,windows,visual-studio-2010,c++-cli,serial-port,Windows,Visual Studio 2010,C++ Cli,Serial Port,我一直在使用C++/CLI(Windows::IO::Ports)中的SerialPort类来打开一个串行端口并与periferic设备通信,一切似乎都正常。端口打开,数据被发送。。但是我没有从periferic设备那里得到答案 我使用的代码如下: SerialPort^\u SerialPort; _serialPort=gcnew serialPort(); //_serialPort=gcnew serialPort(“COM1”,115200,奇偶校验::无,8,停止位::1); //允

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

我使用的代码如下:

SerialPort^\u SerialPort;
_serialPort=gcnew serialPort();
//_serialPort=gcnew serialPort(“COM1”,115200,奇偶校验::无,8,停止位::1);
//允许用户设置适当的属性。
_serialPort->PortName=“COM1”;
_串口->波特率=115200;
//默认情况下没有奇偶校验
//_串行端口->奇偶校验=奇偶校验::无;
_serialPort->DataBits=8;
_串行端口->停止位=停止位::一;
//设置读/写超时
_serialPort->ReadTimeout=1000;
_serialPort->WriteTimeout=500;
_serialPort->Open();
使用程序监控串行端口通信,似乎停止位的数量为0。如您所见,我将停止位设置为1,最奇怪的是默认值为1。我不知道为什么它一直是0。我试着改变波特率和数据位,结果改变了,但是停止位没有办法

这真的是一个小问题,因为这似乎真的更容易使用其他代码在网上

有人能帮我吗?知道它为什么不起作用吗


有人能告诉我这个密码是否正确吗

发送的数组是:
array^bytes=gcnewarray(32)(用一些值初始化)

要发送数据,我使用:
\u serialPort->Write(字节,0,32)

要读取我尝试过的数据:

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

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

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


零是一个停止位的正确编码。请参见找到它!!看起来,即使将“握手”设置为“无”,数据发送后DTR和RTS端口也被设置为低位。(我不知道为什么)

我使用以下方法手动将其设置为高:

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

但我不使用DCB结构来设置位停止。我使用“SerialPort”引用中的属性:StopBits。当我使用这个结构时,它应该工作吗?我应该如何设置停止位?@Vic:当然,DCB结构用于设置停止位,这是Win32 API提供的唯一方式。您恰好调用了一个包装函数,该函数将.NET
StopBits
枚举转换为Win32 DCB设置。您使用了什么监视程序。除非从端口捕获信号,否则如何验证是否存在零停止位?至于Ben Voigt的回答,您可能不使用DCB,但您使用的监控程序可能使用DCB,这就是为什么它显示为零。您的意思是a吗?我下载了串口监控4.0来检查它(我也使用串口,看到其他软件总是很方便:)如果我从bog标准串行终端应用程序中打开一个串行端口,停止位设置为一个停止位,则串行端口监视器显示“停止位-0”。如果我用两个停止位打开它,那么SMP4.0显示“停止位-2”。因此,它看起来确实显示了DCB值。+1用于下载和测试问题中的嗅探器您正在与什么设备通信?你能把代码贴在你把数据写到设备的地方吗?