c - 在 linux 中写入串口

标签 c linux serial-port

我正在尝试对在某些串行端口(即 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/

相关文章:

linux -/dev/urandom 的配置是什么?验证码?

file - 使用erlang打开设备文件

c# - GSM调制解调器库

python - 有没有办法在 Python 和 C 之间传递结构

c - c中的int指针和char指针有区别吗?

c - 扩展模块: marshalling void * to bytearray (and/or vice versa)

serial-port - 使用在 Flatpak 中运行的应用程序访问串行端口

逗号分隔 C

c++ - 是否有用于使用 gcc 构建 MS Visual C++ Express 的免费开源工具?

linux - 如何在线程转储文件中指出是什么将线程置于 WAITING 状态