我正在尝试对在某些串行端口(即 ttyS9)上具有电机驱动器的机器人进行编程
通过 cutecom(作为十六进制输入),我可以发送以下输入,这会给我预期的结果:
5aaa0700fffff000
现在我试图用 C 程序实现相同的结果,该程序执行以下操作:
int port9 = open("/dev/ttyS9", O_RDWR | O_NONBLOCK);
char buff[17] = "5aaa0700fffff000";
write(port9, buff, 16);
我还尝试用十六进制值分别初始化 buff
:
buff[0] = 0x5;
buff[1] = 0xa;
等等等等
两者都不行。问题出在我的代码中还是驱动程序中?
我使用 gcc 编译,然后使用 sudo 运行它。 open 函数还返回正确的值(无错误)以及写入。
最佳答案
用字符串填充字符数组会将字符转换为它们的 ascii 表示形式,而不是您需要的十六进制。
char buff[17] = "5aaa0700fffff000"; // Incorrect for saving 0x5aaa0700fffff000 to buff
如我所见,你想在串行端口上写入 8 字节 0x5aaa0700fffff000,一个 char 是 8 位(1 字节),你必须发送 8 字节而不是 16,所以代码应该是这样的
buff[0] = 0x5a;
buff[1] = 0xaa;
...
write(port9, buff, 8);
关于c - 在 linux 中写入串口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41184715/