我试图理解为什么在串行通信中出现CE_FRAME错误。文档内容如下:
硬件检测到帧错误。在LSR硬件寄存器中检测到SERIAL_LSR_FE位时返回。
这是框架错误指示器。只要硬件检测到输入的串行数据单元没有有效的停止位,就会置位。通过读取该寄存器清除该位:
定义SERIAL_LSR_FE 0x08
但我真的不知道如何处理这个有效停止位。我可以忽略这个吗?
我对沟通没有其他问题。每个数据包(由设备发送)都在PC上捕获。在PC上,我使用ClearCommError()
来检测通道的统计信息,并且我不时会打开此CE_FRAME标志。
我不确定是否必须在我的代码中提供有关CreateFile()
和SetCommState()
函数调用的详细信息,因为它们没有任何“特殊”。但如果需要,我可以。
答案 0 :(得分:1)
如果您是在Windows上编程,那么应用程序编程器不会设置启动和停止位,系统'负责应用启动/停止位以及可能的奇偶校验位,波特率甚至其他一些设置。关键的是波特率,起始和停止位以及奇偶校验位。
系统是硬件或操作系统。我认为是UART芯片增加了启动和停止位。但是您需要设置要在软件中使用的实际配置。
您需要做的是在两端设置相同的开始和停止位。因此,如果您正在与使用1个起始位和2个停止位的设备进行通信,则必须为通信端设置相同的设置。
如果通信两端的设置不相同,则可能会出现帧错误。我看到了帧错误,例如我将波特率1200设置为一端而9600设置为另一端。实际上我的开始和停止位都正确设置了两端。所以它很可能就像这样简单。