Linux下串口接收到0x0D自动变为0x0A问题

Linux下串口接收到0x0D自动变为0x0A问题

2020年8月7日
用串口发送十六进制数据0x0D时,在嵌入式linux下打印出来发现变成了0x0A,查询资料发现,0x0D对应的ASCII码是CR (carriage return),即回车键,0x0A对应的ASCII码为LF (NL line feed, new line),即换行键。

0x0DCR回车键
0x0ALF换行键

查资料发现不止是0x0D,还有0x11, 0x13 都会出现错误。

  1. 通过设置串口参数,可以解决以上问题。

在配置串口时,添加上以下语句:

options.c_iflag &= ~ICRNL; //禁止将输入的CR转换为NL

即可 解决0x0D被转换为0x0A问题。
ICRNL 将输入的回车转化成换行(如果IGNCR未设置的情况下),此处取反,即禁止转换。

  1. 下面看一下0x11 0x13的问题,这两个数值的含义:

0x11 ^Q VSTART字符
0x13 ^S VSTOP字符

在配置串口时,添加上以下语句:

options.c_iflag &= ~(IXON); //清bit位 关闭流控字符

即可解决。

参考文章列出了更多设置串口时选项说明:

https://blog.csdn.net/jinchengzhou/article/details/52005132

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值