Uart无法在C ++中读取整个消息

时间:2018-07-31 15:02:28

标签: c++ uart termios

我正在使用termios从uart设备中读取行,尽管其行为异常。我使用的是阻止规范模式,并且发现大部分时间我只收到邮件的后端。我启用的标志是:ICRNL,ICANON,ISIG,CLOCAL,O_RDWR,O_NOCTTY和CREAD。我的波特率为38400。

从设备发出的消息以回车符终止,并且我已经使用逻辑分析仪查看传入和传出设备的信号是否符合我的期望。

//The code for all of our flags
uart.inputModes.IgnoreCharactersWithParityError = false;
uart.localModes.CanonicalInput = true;
uart.localModes.EnableSignals = true;
uart.controlModes.ParityEnabled = false;
uart.controlModes.IgnoreModemStatusLines = true;
uart.controlModes.EnableReceiver = true;
uart.inputModes.MapCR_To_NL = true;

uart.openDeviceUart();

int readArraySize = 50;
unsigned char readData[readArraySize];
memset(readData, 0, readArraySize);
uart.SendBytes("$C01,03,41\r");

int myBytes = uart.ReadBytes(readData, readArraySize);
std::cout << "Bytes Received: " << myBytes << std::endl;
for (int i = 0; i < readArraySize; i++) {
    std::cout << (char) readData[i];
}



uart.CLOSE();

1 个答案:

答案 0 :(得分:0)

因此,我找到了问题的原因。我的termios代码是正确的,并且我的信号看上去像我们期望的那样,但是我们在设备上使用的命令启动了一个流,每次想要读取时,我们都会打开它。谢谢大家的帮助。