Linux串口编程-5-space校验
先说经过试验还不行的方案:①:Linux串口通讯(mark, space校验方式的实现) http://hi.baidu.com/czyt_/item/fcaaea0ce57910c074cd3c00②:Linux操作系统下微机与单片机组成的多机通讯系统 http://wenku.baidu.com/view/35e48a97dd88d0d233d46a16.html③: Lin
先说经过试验还不行的方案:
①:Linux串口通讯(mark, space校验方式的实现) http://hi.baidu.com/czyt_/item/fcaaea0ce57910c074cd3c00
②:Linux操作系统下微机与单片机组成的多机通讯系统 http://wenku.baidu.com/view/35e48a97dd88d0d233d46a16.html
③: Linux串口通讯(mark, space校验方式的实现)http://blog.csdn.net/diegotj/article/details/5455651
接到space校验的帖子:
多机通信问题 http://topic.csdn.net/u/20070418/07/DFD15B4D-47B7-48EF-BBED-91088EBD59B7.html
我目前在做一个ARM处理器(S3C4510)和多个单片机(AT2051)通过串口通信的程序,多机通信先发地址后发数据,发地址必须使第9
位信息为1,发数据必须使第9位为0;
顺便说一下:S3C4510(uClinux)和AT2051通信是可以建立起来的.
发地址前:
struct termios opt;
opt.c_cflag = BAUDRATE | CS8 | PARENB | PARODD | CMSPAR | CLOCAL | CREAD;
opt.c_iflag = (INPCK | IGNBRK | IGNPAR);
发数据前:
struct termios opt;
opt.c_cflag = BAUDRATE | CS8 | PARENB | CMSPAR | CLOCAL | CREAD;
opt.c_cflag &= ~PARODD;
我目前是想做一个简单的测试程序:
我在发地址前:
设置好BAUDRATE,数据位8位,奇校验,一个停止位
发数据前:
设置好BAUDRATE,数据位8位,偶校验,一个停止位
可是通讯建立不起来,不知道该如何做,请高人指点!谢谢!
linux下的RS232串口通讯 http://www.cnblogs.com/xiaoxia/archive/2011/07/01/2095448.html
option.c_cflag |= PARENB; /*设置校验位使能*/ option.c_cflag |= PARODD; /*设置为奇校验*/ //option.c_cflag &= ~PARODD; /*设置为偶校验*/ //以下设置仅限于linux系统 option.c_cflag |= CMSPAR; /*设置space校验,奇偶校验位恒为0*/ //option.c_cflag &= ~PARODD;或者是直接没有设置 /*设置mark校验,奇偶校验位恒为1*/ //option.c_cflag |= PARODD;
linux下串口用mark和space的方式编程问题! http://topic.csdn.net/u/20090709/16/f0891784-6dba-4b50-8e3e-8ecda5510631.html?seed=1707433176&r=79869939#r_79869939
小弟最近做了一个项目,操作系统是linux,平台为arm,串口通信要求使用8bits数据、1bit mark/space、1bit停止位,
当传模块地址是mark置1,当传数据时,mark置0。我查到了串口属性设置为:
options.c_cflag |= PARENB | CS8 | CMSPAR |PARODD
通信协议要求一个数据包为 addr+data addr为1个byte,data为3个bytes,我程序中是这样实现的。
options.c_cflag |= PARENB | CS8 | CMSPAR |PARODD;
set_port(options);
send_data(&addr);
options.c_cflag |= PARENB | CS8 | CMSPAR ;
set_port(options);
send_data(&data);
recv_data(buf);
我这样提示发送数据成功,但总接收不到数据,请用过这样方式的大侠给点提示,谢谢了!
谁教我写串口收发数据的程序啊 http://topic.csdn.net/t/20041019/14/3470112.html
case 'S ': case 's ': /*as no parity*/ options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB;
串口通讯问题~~~请教原因 http://topic.csdn.net/t/20061115/16/5160305.html
case 'S ': case 's ': /*as no parity*/ options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB;
Linux 串口编程 http://www.cnblogs.com/lovemo1314/archive/2010/10/29/1864327.html
http://data.eefocus.com/myspace/0/131/bbs/1185380147/eef8932e.pdf
[基础|理论|实验]linux下的RS232串口通讯 http://www.cnblogs.com/xiaoxia/archive/2011/07/01/2095448.html
这个把问题解决了!!!!!
参考了一下串口的硬件驱动程序:
Stick even parity parity enable parity
- - 0 无校验
0 0 1 奇校验
0 1 1 奇校验
1 0 1 Mark
1 1 1 space
得到如下的校验设置方式:
#define CMSPAR 010000000000
本句使能了stick parity的校验可行性
Mark校验
options.c_cflag |= PARENB | CS8 | CMSPAR |PARODD;
Space校验
options.c_cflag |= PARENB | CS8 | CMSPAR;
====================================================================================================================================
2012年10月12日17:44:50:
在多机通信中根本用不到奇校验和偶校验,所以open时就直接把CMSPAR设置上去,这样之后的朦胧中的
奇校验====》mark校验
偶校验====》space校验
这么说来,这个CMSPAR值是多少也很重要了,根据硬件平台的不同,他的值也会有所不同,这个要看CPU手册。
====================================================================================================================================
2012年10月12日17:48:06:
如果这么相关,那么在虚拟机中的Linux会不会受此影响呢,看minicom有mark,space功能,看看它的能否使用起来!
9600 8S1 还能进中断!这 又进一步说明,虚拟机惹的祸!!!
这个说法在 CSDN 论坛找到过,不过没在意!!!
虚拟机中不能进行mark space校验,这是我暂时的定论!!!
更多推荐
所有评论(0)