linux 串口 换行十六制,关于嵌入式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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值