通过232从外部读取数据

本文介绍了作者在通过串口232接收数据时遇到的问题,即接收到的FF数据变成了7F。经过排查,发现是termio结构体中设置导致数据的最高位丢失。通过修改termios结构体的配置,成功解决了问题。文章强调了嵌入式系统中细节的重要性,提醒读者在复用和修改程序时要注意硬件设置是否符合需求。
摘要由CSDN通过智能技术生成

出现的问题及解决思路

问题:当在终端数数据 FFFFFF010203040AFE 时,直接打印输入的信息,FF都变成 7F ,百思不得其解,尝试了几种办法:

  1. 考虑到数据类型,就去查了一下,char类型数据的取值范围是(-128~127),按照这个考虑,输入的最大数值是7F,就去考虑了其他原因。
    注:当时没有有考虑到如果是因为最大表示的数是127,那么FF表示的数也应该是-1而不是7F.

  2. 做了下面这样一个尝试:

	char a =0xff;
	unsigned char b =0xff;
	printf("\na=%x",a);
	printf("\na=%d",a);
	printf("\na=%x",b);
	printf("\na=%d",b);

得到如下结果:

	a=ff
	a=255
	a=ff
	a=255

这就证实了unsigned char是(0-255),无论char还是unsigned char 都可以输出FF这样一个数据,这说明系统是没有问题的。神奇的就是接收到的数据的最高位的 1 不见了,就开始捋程序,不再只关注receive232函数,从头开始捋。
3. 从头捋程序,程序的内容不多,能出问题的就在程序的设置上,看到了termio结构体,里面有这一句:

	newtermios.c_iflag |= (INPCK | ISTRIP);//启动输入就校验,去掉第八位

看到这一句思路就清晰了,八位数据位最高位失踪的原因找到了,就去查termios结构体的设置
https://blog.csdn.net/vevenlcf/article/details/51096122
把那一行代码进行了修改,如下:

	newtermios.c_iflag |= INPCK;

问题就这样解决了

心得总结

这个程序写起来不难,难在细节,不是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值