Linux C编程连载【3】-串口编程
1.. 设计目的
设计一个串口程序,该程序执行时,具有通信参数选择及串口收发数据功能,界面友好。
2 设计流程图及说明
如图1.1所示,程序运行后,首先进入功能选择,共4中功能可供选择,分别为接收数据,发送数据,接收文件,发送文件。根据提示,键入不同的数字,可以进入不同的功能。设置完毕,进入参数设置,可以保持默认参数,也可以设置用户参数,若设置有误,还可以对参数重新设置。参数设置确认后,打开串口。若串口打开无误,则根据用户的选择进入不同的功能。
图1.1 总体设计流程图
3 设计测试
3.1 测试环境及步骤
测试环境:VMware WorkStation 6.0.2+Fedora 10+minicom+广嵌开发板
测试步骤:
(1) 配置minicom
[tande@localhost ~]$sudo minicom –s
图3.1 配置minicom
(2) 建立nfs服务
[tande@localhost ~]$sudo ifconfig eth0 192.168.2.1 netmask 255.255.255.0
[tande@localhost ~]$sudo vi /etc/exports
添加
/mnt/share 192.168.2.*(rw,no_root_squash)
[tande@localhost ~]$ sudo service nfs restart
将交叉编译的程序拷贝至/mnt/share目录下。
(3) 开发板连接串口,用网线和宿主机相连,运行minicom进入开发板(目标机)
[tande@localhost ~]$sudo minicom
[root@(none) /]#mount –t nfs –o nolock 192.168.2.1:/mnt/share /mnt
(4) 打开另一个终端,进入宿主机程序目录
[tande@localhost ~]$cd work/c/device/serial/
[tande@localhost ~]$sudo ./serial
(5) 目标机
[root@(none) mnt]# ./serial
3.2 测试结果
(1)用2号功能(发送数据)控制目标机执行相应的命令
宿主机运行./serial,在功能选择时键入2,参数选择默认,进入数据发送。在宿主机输入相应的命令就可以控制目标机执行相应的命令。如图3.2所示,宿主机(图3.2左)分别发送ls、cd mnt、q(退出发送数据程序),目标机(图3.2右)执行了相应的命令。
图3.2 宿主机控制目标机
(2)目标机与宿主机数据收发
宿主机运行./serial,键入2,选择数据发送。目标机运行./serial,键入1,选择数据接收。通信参数保持默认。宿主机发送hello,测试结果如图3.3(a)、(b)所示。
图3.3(a) 宿主机发送数据
图3.3(b) 目标机接收数据
(3)目标机接收宿主机启动信息
如图3.4所示,关闭minicom,宿主机运行./serial,选择1号功能,接收数据,参数保持默认。开发板上电,宿主机即可接收开发板启动信息。
图3.4 宿主机接收目标机启动信息
(4)目标机接收文件
如图3.5所示,关闭minicom,宿主机运行./serial,选择3号功能,接收文件,参数保持默认。输入接收文件名为1.txt(可以指定保存路径,如/home/tande/1.txt)。打开宿主机开发板。接收完成后,文件夹中多了一个1.txt的文件。该文件的权限是root,要更改权限后才能查看。
图3.5宿主机接收文件
(5)目标机发送文件
1)编辑发送文件(以root身份)
[tande@localhost serial]$ sudo vi 1.txt?
ls
cd home
q
2)打开minicom,进入目标机。
3)新建一个终端,执行./serial,选择4号功能,参数保持默认。键入发送的文件名为1.txt。实验结果如图3.6(a)、(b)所示。
图3.6(a)宿主机发送文件
图3.6(b)目标机接收文件数据
(6) 通信参数设置
功能选择完成后,进入通信参数设置。程序提示“Use the default parameter ? y/n”。键入y,保持默认参数不变。键入n,进入用户参数设置。设置完成后,程序会提示参数信息,并询问“The parameter is OK? y/n”键入y,参数设置完成,键入n,返回重新设置,测试结果如图3.7(a-d)所示。若串口类型为USB转串口,则需要将uart.h中宏定义
#define COM_TYPE GNR_COM 改为 #define COM_TYPE USB_COM
重新编译即可。
图3.7(a)参数设置
图3.7(b)参数设置
图3.7(c)参数设置
图3.7(d)参数设置
【代码清单】
uart.h
serial.c