我想了解为什么在串行通信中出现 CE_FRAME 错误。文档内容如下:
The hardware detected a framing error. Returned when the SERIAL_LSR_FE bit is detected in the LSR hardware register.
This is the framing error indicator. It is set whenever the hardware detects that the incoming serial data unit does not have a valid stop bit. This bit is cleared by reading this register:
define SERIAL_LSR_FE 0x08
但我真的不知道该如何处理这个有效的停止位。我可以忽略这个吗?
我在沟通方面没有其他问题。每个数据包(由设备发送)都在 PC 上捕获。在 PC 上,我正在使用 ClearCommError()
来检测 channel 的统计信息,并且有时我会打开这个 CE_FRAME 标志。
我不确定我是否必须在我的代码中提供有关 CreateFile()
和 SetCommState()
函数调用的详细信息,因为它们没有任何“特殊”之处。但如果需要,我可以。
最佳答案
如果您在 Windows 上编程,那么应用程序员不会设置起始位和停止位,“系统”负责应用起始位/停止位以及可能的奇偶校验位、波特率甚至一些其他设置。关键的是波特率、起始位和停止位以及奇偶校验位。
系统是硬件或操作系统。我认为是 UART 芯片添加了起始位和停止位。但您需要设置实际配置才能在软件中使用。
您需要做的是在两端设置相同的起始位和停止位。因此,如果您正在与使用 1 个起始位和 2 个停止位的设备通信,那么您必须为您的通信端设置相同的设置。
如果通信两端的这些设置不同,您可能会遇到帧错误。我已经看到帧错误,例如我将波特率设置为 1200,但另一端设置为 9600。实际上我的起始位和停止位都正确设置了两端。所以它很可能就是这样简单的东西。
关于c++ - 如果出现 CE_FRAME 错误,com 端口通信有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29098588/