如果我收到CE_FRAME错误,com端口通信有什么问题?

时间:2015-03-17 12:02:27

标签: c++ windows serial-port

我试图理解为什么在串行通信中出现CE_FRAME错误。文档内容如下:

  

硬件检测到帧错误。在LSR硬件寄存器中检测到SERIAL_LSR_FE位时返回。

     

这是框架错误指示器。只要硬件检测到输入的串行数据单元没有有效的停止位,就会置位。通过读取该寄存器清除该位:

     

定义SERIAL_LSR_FE 0x08

但我真的不知道如何处理这个有效停止位。我可以忽略这个吗?

我对沟通没有其他问题。每个数据包(由设备发送)都在PC上捕获。在PC上,我使用ClearCommError()来检测通道的统计信息,并且我不时会打开此CE_FRAME标志。 我不确定是否必须在我的代码中提供有关CreateFile()SetCommState()函数调用的详细信息,因为它们没有任何“特殊”。但如果需要,我可以。

1 个答案:

答案 0 :(得分:1)

如果您是在Windows上编程,那么应用程序编程器不会设置启动和停止位,系统'负责应用启动/停止位以及可能的奇偶校验位,波特率甚至其他一些设置。关键的是波特率,起始和停止位以及奇偶校验位。

系统是硬件或操作系统。我认为是UART芯片增加了启动和停止位。但是您需要设置要在软件中使用的实际配置。

您需要做的是在两端设置相同的开始和停止位。因此,如果您正在与使用1个起始位和2个停止位的设备进行通信,则必须为通信端设置相同的设置。

如果通信两端的设置不相同,则可能会出现帧错误。我看到了帧错误,例如我将波特率1200设置为一端而9600设置为另一端。实际上我的开始和停止位都正确设置了两端。所以它很可能就像这样简单。