发新话题
打印

急!!!!! 关于Linux下串口的问题

急!!!!! 关于Linux下串口的问题

int m_fd = open("/dev/ttyAM1", O_RDWR | O_NOCTTY | O_NDELAY);
7 W' N) h/ p" Z  o) J. c; Z. s- u- nstruct termios Opt; * b/ @& p4 D' i" x
tcgetattr(m_fd, &Opt);   ]* i3 Y  ]; A7 t9 A5 b- ?, F
cfsetispeed(&Opt,B9600);
9 B. U( L  w" o  Hcfsetospeed(&Opt,B9600);
' C+ I3 M( z$ y/ Z6 Ptcsetattr(m_fd,TCSANOW,&Opt); 1 U* B$ Z" A2 E: V% @$ l7 W1 H
write(m_fd, "\x0a", 1);; p1 _0 J+ T& {0 c" [. }
close(m_fd);
% o" v% ~  G9 Q; {1 z: Q' M! [3 a0 R
以上是小弟的程序,运行后串口上收到的不是0a, 而是0d 0a,请问为什么会这样?怎么解决      

TOP

用什么收到的?      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

具体情况如下:* B% Y0 K5 M" ]

/ A& U; ]0 n# f: v我的接收端是一个单片机控制的串口液晶屏,我用装有ucLinux操作系统的嵌入式开发办向这个液晶屏发送十六进制的命令,当发送含有0x0a的命令是屏幕就无法正常显示。
+ A7 v1 I9 f8 i4 M: \! ~% g* n. d% I  [' d; Y/ t4 J
当我用装有Windows的PC机来接收嵌入式板发来的命令时,用串口调试工具以十六进制显示,所有的0x0a就都变成了0x0d 0x0a,而其他的数据都是正确的,我试过很多数,包括从0x00到0xc0的所有数,其中只有0x0a出这样的错误。      

TOP

Windows的会这样,所有的0x0a就都变成了0x0d 0x0a,应该没什么关系。      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

但是我向串口液晶屏发送含有0x0a的命令时就无法正确显示,只要命令中不含有0x0a就没有任何问题。2 d, g+ T& j$ ?$ B! s8 n9 B

3 Y+ m* L! U# ?+ |这个问题困扰我好几天了,想很多种办法试验,可是始终解决不了。      

TOP

不晓得液晶屏的命令协议是咋样的。      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

我用的液晶屏命令格式如下:# N/ j" @9 y4 a8 J* ~" ]0 b- H
! O# x" p' j! _3 O) n
串口格式:UART(RS232),N、8、1、9600;
, @2 v9 @6 F& Q1 P帧结构:0xAA(帧头)+指令码(1 字节,定义见接口指令集)+数据(N 字节,N<253); % o/ X, X' ~0 n( H% j0 y
帧结束标志:接收超时,超时定时器长度为3mS。
/ ]* o" T+ c/ g; ]; ^# I
. A5 z. k$ `  D1 h4 `# D) u% H- D例如:0xaa 0x55 0x0a 0x0a 0x0a 0x2a是在点(0x0a,0x0a)和点(0x0a,0x2a)之间画直线。
4 w9 B: P: r6 x$ C& m1 r但是,由于上面说的问题,0x0a发送后变成了0x0d 0x0a,导致这条直线无法画出。2 @8 ~  P6 v1 o' _# ~

4 [. X- @+ x% |/ d+ z0 }经过我的测试,只要坐标当中不含0x0a就没有任何问题。
( t: U8 Y) I# {7 G3 ?& Z1 w
7 j! c* W& z8 u4 k; z) C我该怎么办啊???  到现在还没有解决这个问题。请各位大哥、大虾们帮忙想想办法吧。多谢了!!      

TOP

记得好像有个什么流模式的东西要设置一下可能会有用。      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

发新话题