c - 如何使用 termios.h 配置串行端口以传递原始字节?
问题描述
我需要通过 USB 虚拟串行设备与硬件进行通信。我所需要的只是使用正确的 UART 设置来回传递原始字节,我不想使用终端。使用 termios 的概念验证软件没有配置正确的位并且不起作用,除非我在运行之前通过 stty 输入一个神奇的配置字符串。
我试图从 stty 复制出现在 termios.h 的 POSIX 手册页中的每个设置,但它仍然不起作用,现在屏幕上充满了样板标志设置代码。
使用 termios.h 获得无终端串行端口的最低配置应该是什么?如果有任何专门针对 Linux 的补充,我需要知道这些。
解决方案
至少在 Linux 上,该函数将在原始 IO 的串行设置 blob 中cfmakeraw()
设置标志。struct termios
在这种情况下,删除了错误检查的工作流程如下所示:
int fd = open(portname, O_RDWR | O_NOCTTY);
struct termios portSettings;
tcgetattr(fd, &portSettings);
cfsetispeed(&portSettings, B115200);
cfsetospeed(&portSettings, B115200);
cfmakeraw(&portSettings);
tcsetattr(fd, TCSANOW, &portSettings);
推荐阅读
- cucumber - Java+Cucumber:获取当前正在执行的标签/动词
- php - 如何在 PHP/HTML 中创建动态表?(MVC 代码点火器)
- java - Java 映射文件类型与文件夹位置
- ruby-on-rails - 全局错误处理和包含的rescue_from的顺序
- tensorflow - 使用fit_generator()每次产量多次通过?
- apache-camel - 在 Openshift 上部署 de route 时,来自 Apache Camel SFTP 组件的 chmod 选项不起作用
- arduino - “数据”之前的预期主表达式
- javascript - 当浏览器窗口向下或向上时如何在导航中删除或添加类
- elasticsearch - 弹性搜索查询不仅可以识别结果,还可以突出显示满足特定属性的项目
- scrapy - 部署到 Scrapy Cloud 时出现“错误:部署失败:b''”