关于嵌入式linux下的串口通讯问题---需增加回车/换行才能接收


问题:在Linux应用层,直接从/dev/tty***使用read()函数读数据,无法读到,只有在数据末尾加上0a/0d才可以读到数据(这里是发送十六进制的数据,ASCLL码同理,增加回车才可以读到数据)

原因:在linux内核中增加了行缓存的机制,必须出现一个结束符read函数才能从缓冲区里读出数据

解决:

       改变termio这个类型定义的结构体变量,改变Linux串口设置参数

       termio这个结构体的介绍需要学习的详细参考:https://blog.csdn.net/querdaizhi/article/details/7436722

      最简单直接的修改方式,代码如下

       #define DEV_NAME  "/dev/ttyPS1"

        int *pRS485fd

       *pRS485fd = open(DEV_NAME, O_RDWR | O_NOCTTY);
       struct termios options;
       tcgetattr(*pRS485fd, &options);                 //获得属性
       options.c_lflag &= ~(ICANON | ECHO | ECHOE);
       tcsetattr(*pRS485fd, TCSANOW, &options);        //设置属性

    

       修改其他的串口参数可以详细参考:https://blog.csdn.net/michaelcao1980/article/details/52383910


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM