用过linux系统都知道,我们可以通过终端输命令来操作linux系统。
这个是对于PC机的。
但是对于嵌入式来说,没有显示器,那怎么来模拟这个终端了。这里就要用到嵌入式中最好用到功能,串口。我们可以通过串口,将要显示的东西发送给PC,然后PC在显示出来,这样不就模拟终端了。
用到的工具:
secureCRT 7.2
虚拟串口
Keil C51
proteus
第一个工具,功能很强大,这里用来当串口终端,即通过串口发数据和接收数据。
首先是proteus构建原理图
串口接口的设置如上所示,连接到COM4,波特率为9600。
这里要注意的是,单片机的时钟频率要设置为11.0592M。
然后是设置虚拟串口
添加COM3和COM4一对虚拟串口。这样,将串口终端连接到COM3,这样就实现了串口终端和proteus的连接了。
在secureCRT中设置
硬件平台搞定后,就要开始写程序了。
首先是要定义几个字符串:
这里,第一个字符串是用来最开始显示的。。
第二个字符串,就是终端前面的提示部分。
第三个字符串,是说明无效命令的。。因为这里没有对命令进行处理,把所有接收到的命令都当成是未知命令。
然后就开始写程序了。
首先是main函数的主要部分:
uart_init(),是串口初始化,就是配置串口。
uart_string(a); 这个函数,是将字符串a发送到串口。
下面的while循环就是关键了。
首先是发送提示的信息,即终端前面显示的那部分。这个在前面的数组中已经定义好了。
然后就等待一个while循环。这个循环判断的是flag。这个flag是接收数据标志位,当接收数据后,会为1,然后往下执行。如果没有接收到数据,那么为0.那么就会一直在循环里面。这样,就实现了等待接收命令。
程序中,是利用终端接收数据的。当接收数据后,会置flag为1.
接收到数据后,首先是发送接收到的数据。然后发送\r\n。实现换行。然后在发送 未知命令的字符串。
然后就是中断函数
对接收的数据,进行判断,如果是接收到了\r,即换行(这里的\r是测试出来的,因为secureCRT的回车发送的就是\r,不同的工具可能发送的不一样,有的可能是\n)。那么说明主机命令发送结束。那就将标志位置1,这样主函数就能跳出while循环,接着执行。接收的数据是存在一个数组里面的。如果接收的数据不是\r,那么说明是命令,就把接收到数据存在数组里面去。然后在把这个接收到的数据在发送回去。这里一定要发送回去,不然的话,在serureCRT那边,你输入命令,是看不到命令的。只能看到命令的执行效果。主要的地方是在接收的部分。
数据接收完毕后,在发送一个\r\n。这样才能使下一次显示提示是在界面最左边的位置上的。
程序装载在proteus的单片机中。执行仿真。
开始界面
这是不是就很像linux中的终端了。
输入命令
然后就可以有执行效果了。
这样,就用串口模拟了linux的终端了。
这里只要在主函数的while(!flag) 这条语句之后,添加对命令处理的函数,这样就能真正模拟终端了。
可以看出,串口是有多么的好用。用这个方法,就能做出交互的界面来。只要在secure CRT中输入命令。然后单片机接收到命令,对命令进行处理,然后将处理后的信息返回PC。
系列其他篇
原文首发于骏的世界博客
作者:卢骏.
更多Arm技术相关的文章请关注Arm技术博客极术专栏,每日更新。