|
距离毕设的时间还剩20天左右,这几天一直忙着做毕设,今天终于将51单片机和串口通信的问题解决了,抽出点时间,写一下遇到的问题。不然,过几天又忘了,记录下来也给后续学习的技术宅能提供一点帮助。
我的串口实验是:ARM9 控制板通过串口发送一个指令,51接受到这个指令后,根据这个指令控制小车的运行方式。(为什么不用arm9直接控制小车而采用51控制小车呢?
答:我的想法是电机驱动这一块直接交付给下一级控制器,程序简单,容易实现,况且通过串口,只需解析一个指令就可以实现)。
1、做此类串口通信一定要记得共地,我采用的方法是直接用5v直流输出引出了两个接口,分别为两个控制板供电,这样的话串口通讯的电压没有一点问题。
2、做串口通讯的一定要搞清楚,你的串口到底那几个没被使用,你可以根据厂家提供的电路原理图查看。选择好你做串口实验的串口号。(记得有些串口驱动移植的时候没有设置为通用串口,你要搞清楚额。)。如果你是在别人移植好的,驱动上做串口应用程序的开发,你要搞清楚,别人的串口名称。因为时间紧张,串口驱动我没有自己移植,我是在厂家移植好的驱动上进行应用程序的开发,所以我就可以在 Linux 根目录下的/dev/查看串口名称。
我的串口名称有/dev/s3c2410_serialX(X=0,1,2).. 因此,编写应用程序的时候一定要注意fd=open(“/dev/此处的串口名称”,XXXXX);
3、我的51板中本来设置好的运行协议是十六进制的数,后来查看说write函数只能写字符,我只好用字符常量代替原来的十六进制协议类。调整后的51板程序思路是:
串口接收到字符数据 f=前进,b=后退,l=左转,r=右转,s=停止。51板的程序弄好以后,我只要通过arm板给51板发送这些字符,51板就能控制小车的运行方式。
4、Arm linux 串口应用程序的开发,跟windows的差不多,基本都是调用api,然后编写,不过相比较windows而言,linux更容易理解一个操作系统,因为只有当你把bootloader ,linux kernel,文件系统,驱动这些都移植过一遍,你就很容易理解一个操作系统的原理,也就不难理解调用api 是则么回事类。 串口应用程序的开发就是对串口结构体进行设置。注意串口设置的时候波特率一定要和你51板设置的波特率一致奥,否则不能通信。然后通过读写函数对串口进行控制。向串口发送指令是通过Write(fd,buf,sizeof(buf)),函数实现的,我就写了一个字符f 然后就可以实现小车的前进了。
5、让我纠结了好长时间的问题。程序写好以后,一定要用arm-linux-gcc交叉编译指令,不能用gcc指令编译,这个编译的程序只能在pc的linux上跑,不然将编译好的可执行程序下载到开发板上是不能运行。另外如果你用arm-linux-gcc编译后生成的可执行文件是a.out文件这个在arm板上也不能运行。必须要用arm-linux-gcc main.c -o myserial这个指令进行编译,生成的myserial可执行程序才能在arm板上运行。程序下载到开发板以后,一定要加上权限 chmod 777 myserial . 然后执行 ./myserial ,你就可以发现你的小车可以前进了。
|
|