linux下串口发送数据用串口精灵接受不到或为全零

gpgty 2007-12-12 02:17:17
请问这是为什么啊,我想应该是termios结构的设置问题,要这么设置才能在串口接受正确呢,自己linux下发送再接受没问题,用串口精灵接收就不正确了,我用minicom发送是正确的,能告诉我怎么看minicom程序的termios设置吗?谢谢了,急,qq24646533,希望得到您的帮忙
...全文
676 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
gpgty 2007-12-12
  • 打赏
  • 举报
回复
当我把termios下的c_cflag设置CLOCAL时,发出来的数据全零,接收到的数据不正确,而但我设置为~CLOCAL时,发出的数据串口精灵接收不到,但收到的数据是正确的。这怎么搞呢,CLOCAL是忽略所有调制解调器的状态行。
gpgty 2007-12-12
  • 打赏
  • 举报
回复
一样的设置,linux下我用minicom可以和串口精灵通信,而自己程序只能收,发送用调试看出已经发出去了。
gpgty 2007-12-12
  • 打赏
  • 举报
回复
波特率115200,校验位8N1,都设置的是一样的,自己linux下的程序与windows串口精灵通信可以接收到数据,但发送过去接收不到或全为零,而将RS232的2,3脚连接自己linux下的程序也可以收发自如。我想是termios这个结构的什么标志位要设置,但试过一些没效果。还有我要看的不是minicom的波特率什么的设置,而是minicom的termios结构的值,请问从哪可以看到,谢谢了!急!
cceczjxy 2007-12-12
  • 打赏
  • 举报
回复
minicom

ctrl a
z
就是minicom的菜单界面,
按p键,就是相关设置
pottichu 2007-12-12
  • 打赏
  • 举报
回复
你 的 用串口精灵接收

波特率, 效验位 都设置 得和程序一样了吗?
yang_dk 2007-12-12
  • 打赏
  • 举报
回复
请把问题描述清楚了。什么叫“自己linux下发送再接受没问题”?

设置串口属性一般有3个步骤
struct termios option;
A: tcgetattr(fd,&option) //fd是打开串口设备的文件描述符,option是一个termios结构
//通过fd得到其属性赋予option中。
B: 设置option的参数,比如数据位,停止位,奇偶校验等。具体请参考termios的详细结构
C: tcsetattr(fd,xxxxx,&option)//将设置完成之后的option应用于fd表示的串口中,xxxxx为一些设置参数,告诉系统这些设置何时生效,一般为TCANOW,表示设置即刻生效。

另外
设置波特率可以这样
struct  termios option;
tcgetattr(fd, &option);
cfsetispeed(&option,B19200); //设置为19200Bps
cfsetospeed(&option,B19200);
tcsetattr(fd,TCANOW,&option); //设置即刻生效





gpgty 2007-12-12
  • 打赏
  • 举报
回复
又有问题了,设置不使用流控制和~CLOCAL后,数据可以收发正常,但在发送了几次之后,write开始返回-1了,errno=5,是Input/Output error,如果把不使用流控制或~CLOCAL取消,则数据收发不了,但write不会返回-1了,请问这是为什么呢
gpgty 2007-12-12
  • 打赏
  • 举报
回复
问题解决了,把流控制取消就ok了,
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 在计算机科学领域,编译原理是研究如何将编程语言转化为机器可执行代码的理论基础。其中,三地址代码(Three-Address Code,TAC)作为一种中间表示形式,在编译器设计中经常被使用,尤其是在生成目标代码的阶段。本文将深入探讨三地址代码的概念、生成器的工作原理及其在编译过程中的作用。 三地址代码是一种简单的低级抽象语法树(AST)表示,每条指令涉及三个操作数,通常包括两个源操作数和一个目的操作数。这种格式简化了代码优化和目标代码生成的复杂性。例如,一个简单的算术表达式“x = y + z”在三地址代码中可能表示为: 在这个例子中,“t1”是一个临时变量,存储了“y + z”的结果,然后这个结果被赋值给“x”。 生成三地址代码的过程通常发生在编译器的中间阶段,即语法分析之后,语义分析之前。这个阶段称为“代码生成”或“中间代码生成”。编译器通过词法分析器处理源代码,将其转化为标记流;接着,语法分析器根据上下文无关文法将标记流解析成抽象语法树。三地址代码生成器就是在这个阶段介入,它遍历AST,为每个节点生成对应的三地址指令。 在Turbo C3.0这样的编译器环境下,开发者可以实现自己的三地址代码生成器。虽然Turbo C3.0是一款较老的编译器,但其C语言编译器设计原理依然适用于现代编译器开发。开发过程中,我们需要考虑如下关键点: 符号表管理:符号表记录了程序中所有标识符的类型、作用域和关联地址,对于生成三地址代码至关重要,因为它提供了关于操作数的类型信息。 数据类型转换:编译器必须处理不同数据类型的运算,确保它们在三地址代码中正确表示。例如,整型与浮点型之间的转换需要特别处理。

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧