c++ - 如果出现 CE_FRAME 错误,com 端口通信有什么问题?

标签 c++ windows serial-port

我想了解为什么在串行通信中出现 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/

相关文章:

c++ - 在 QScrollArea 中居中 QLabel 派生小部件

python - pi 到 arduino 串行通信上的名称错误

c - 如何使用用户空间 API 在 Linux 上禁用串行端口 SAK 选项?

c++ - Direct X 11 锯齿状边缘

c++ - 我如何在这里为 union 内的结构赋值?

windows - 我究竟应该如何配置 DCOM 以将我的 DLL 加载到一个单独的进程中?

c# - 以编程方式调用 SendTo

c++ - 带有节点图标和不带图标的项目的 TreeView

python - 使用 PySerial/Matplotlib 的微处理器到 RS-232 实时绘图?

c++ - 非常奇怪的转换错误