如何进行串口编程教程.doc

如何进行串口编程教程

如何进行串口编程  HYPERLINK /blog/ \l m=0t=1c=fks_087070084082083064082087086095085086082065087095086074083 arm 2009-12-26 23:15:49 阅读122 评论0 字号:大中小 ? 1、?调试方法:? ?????? 调试代码的最好办法是安装另一个Linux盒子, 并且通过一个空载的调制解调器电缆把这两台机子连接起来。使用miniterm (是LDP 程序员向导的一个例子程序(/pub/Linux/docs/LDP/programmers-guide/lpg-0.4.tar。gz in)) 向你的Linux 盒子传输数据。 Miniterm 可以很容易的编译并且可以通过串口传送所有的键盘输入。 使用的时候需要检查下面这个宏: ? ??#define MODEMDEVICE /dev/ttyS0。 ?????? 如果是COM1,则对应ttyS0, COM2 对应ttyS1,等等。有必要在没有任何输出的情况下通过串口线传送所有字符的输入。要测试你的连接是否正确,在两台机子上启动miniterm ,然后敲一下键盘。那末刚才在计算机上输入的字符会在另一台机子上显示出来,反之亦然。这个输入不会回显到触动键盘集资的显示屏上。 ?????? 要制作一条零讯号的调制解调器电缆,你需要通过TxD (传输) 和RxD (接收) 线。 有关电缆设置的描述可以参看下面的第七部分。 ?????? 如果在你的机子上有两个空闲的串口,你也可以只通过这一台计算机运行上面的测试程序。那末你可以在两个控制台上同时运行miniterm。如果你想拔掉鼠标释放这个串口, 要查看一下是否存在/dev/mouse,如存在记着对它进行重定向。如果你使用的是一个多串口的控制卡, 要确保配置正确。我曾经犯过这样的配置错误:程序只在我自己的机子上才正常工作。当我连接另一台机子的时候, ?串口开始零星的丢失字符。 不过,在一台程序上运行两个程序并不是完全异步的。 ? 2、端口设置 ? ?????? 设备文件 /dev/ttyS* 用来与你的Linux机子中的终端关联,这些关联是在启动之后完成配置的。在使用原始设备进行通讯编程时需要特别注意,举例来说,有些设备被配置成在设备上进行数据回显的,当用这些端口进行数据传输时需要对配置进行改变以适应数据传输的要求。 ?????? 所有的参数都可以通过程序来配置。这些配置存放在一个结构termios中:它的定义在asm/termbits.h中: ?????? ?#define NCCS 19 ??????? struct termios { ??????????????? tcflag_t c_iflag;?????????????? /* 输入模式标志*/ ??????????????? tcflag_t c_oflag;?????????????? /*输出模式标志*/ ??????????????? tcflag_t c_cflag;?????????????? /*控制模式标志*/ ??????????????? tcflag_t c_lflag;?? ????????????/*本地模式标志*/ ??????????????? cc_t c_line;??????????????????? /*引脚设置*/ ??????????????? cc_t c_cc[NCCS];??????????????? /*字符控制*/ ??????? }; ? ?????? 这个文件中也包含了所有的标志定义。c_iflag中的输入模式标志控制所有的输入处理,这意味着从设备上传来的字符在被读出之前可以处理一下。 类似地,c_oflag控制输出处理。c_cflag 包含了一些端口设置参数, 比如波特率, 每个字符的位数, 终止位, 等等。。。 存放在c_lflag中的本地模式标志决定字符是否回显, 信号是否被发送到你的程序, 等等… 最后的数组c_cc定义了一些控制字符,比如文件尾,停止, 等等… 控制字符的缺省值的定义在文件 asm/termios.h中。这些标志在termios(3)的手册中都有描述。Termios结构包含c_line(引脚设置) 成员, 它在POSIX兼容机中不被使用。 3. 串口设备的输入概念 ?????? 下面有三种输入方式的介绍。我们可以根据程序选择适当的方式。 值得一提的是无论采用哪种方式,不要通过一个个字符的读取方式来获取一个字符串。因为当我试图这样做的时候,即使没有任何错误,也会丢失一些字符。 3.1. 规范的输入处理 ?????? 这是通常的终端处理模式, 但是这种模式下一个读取操作会返回整条线上

文档评论(0)

1亿VIP精品文档

相关文档