C++;未将整个数据写入UART端口 我已经用WiRIPPI测试了C++中的UART通信。
问题: < >看来,C++并没有将整个数据输出到UART端口<代码> /DEV/TTYAMA0。也许我做得不对 调查: 注意:我正在使用minicom,C++;未将整个数据写入UART端口 我已经用WiRIPPI测试了C++中的UART通信。,c++,wiringpi,C++,Wiringpi,问题: < >看来,C++并没有将整个数据输出到UART端口 /DEV/TTYAMA0。也许我做得不对 调查: 注意:我正在使用minicom,minicom--baudrate 57600--noinit--displayhex--device/dev/ttyam0检查接收到的数据 还有UART端口,RX和TX引脚短接在一起 Python代码工作很完美,但是当我尝试在C++中实现它时,接收到的数据是不同的。 预期收到的数据应为:ef 01 ff ff ff 01 00 07 13 00 00
minicom--baudrate 57600--noinit--displayhex--device/dev/ttyam0
检查接收到的数据
还有UART端口,RX和TX引脚短接在一起
Python代码工作很完美,但是当我尝试在C++中实现它时,接收到的数据是不同的。
预期收到的数据应为:ef 01 ff ff ff 01 00 07 13 00 00 00 1b
不能使用
serialput
发送空终止符。与所有类似函数一样,当字符串中遇到空终止符时,它将停止。在这种情况下,我认为最好的选择是添加一个函数,该函数使用WiringPi自己的函数在内部使用的普通write
函数
您可以创建一个包装器函数,使其看起来与其他调用类似:
#include <cstddef>
void serialWrite(const int fd, const char* data, size_t length) {
write(fd, data, length);
}
注意:如果您不想创建自己的函数,可以将类似的函数(称为
serialPut
)添加到WiringPi库中,而不是使用主分支版本的官方版本进行下载。成功了!不过,我花了一段时间重新编译了整个库。非常感谢你@只是一艘帆船,不客气!很高兴它成功了!
template<size_t N>
void serialWrite(const int fd, const char(&data)[N], bool strip_last = true) {
serialWrite(fd, data, N - strip_last);
}
serialWrite(serial_port, "\xef\x01\xff\xff\xff\xff\x01\x00\x07\x13\x00\x00\x00\x00\x00\x1b");