https://static.assets-stash.eet-china.com/album/old-resources/2009/10/29/5af5d90f-f260-446f-8390-c6ad9967c601.rar现在这个程序的通用性比较强了,因为各种stm32处理器的配置都差不多相同,串口命令中断的使用在各种开发板上应该都能用。不过按键输入和液晶显示只能在智林STM32开发板上使用。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
将Shell移植到串口上(三)
一、概述
到现在,这个简单shell的架构算是比较完整了,既可以利用开发板上的几个按键输入命令,在液晶上回显并执行命令。而且现在也可以使用串口终端来进行控制了,使命令的输入很方便,更加适合于开发复杂一些的程序。
二、程序结构简单介绍
1、startup组
两个文件:(1)stm<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />32f10x_vector.s是初始化文件,主要是定义了堆栈大小、用户堆、stm32向量表、复位处理程序和一个堆栈处理程序__user_initial_stackheap。(2)stm32的库文件。
2、ucos_stm32组
也包含两个文件,是usos操作系统在stm32处理器上的移植文件。现在我使用ucos操作系统还是现成,以后要花时间将它好好研究一下。
3、ucos源文件组
4、shell文件组
里面两个文件:(1)一个是lcd.c,现在有用的主要是LCD_PutChar()函数,用于在液晶上输出字符,以后移植GUI的时候,还要编写一些函数。(2)shell.c,该文件利用LCD_PutChar()实现的液晶字符输出,并利用字符位置、背景色和前景色等全局变量实现字符的格式化输出。比如Shell_PutChar(‘\n’),显示会产生回车换行的效果。
5、device文件组
对于智林stm32开发板上外围设备的驱动,基本上都在这里。现在有5个文件。(1)board_config.c:开发板硬件配置文件,主要进行时钟系统配置。NVIC的总配置。开发板上用到的GPIO口,其他外围设备的IO口复用、初始状态和终端配置等。
(2)rtc.c现在我的开发板可以实现24小时显示,与实际时钟是对应的。如果重新编译使用,需要写入当时的运行时间。以下是RTC初始化中的一段程序
u8 s[9]="16:54:11"; //程序何时下载运行,该变量应改为当时时间。
if (BKP_ReadBackupRegister(BKP_DR1) !=0xAAAA )
{
RTC_Init(); //对RTC进行初始化
RTCCount=Time_GetCountFromStr(s); //从时间串获取对应计数值
RTC_SetCounter(RTCCount); //将计数值写入RTC计数器
RTC_WaitForLastTask();
BKP_WriteBackupRegister(BKP_DR1, 0xAAAA);
}
(3)speaker.c。现在就一个函数,让扬声器以500Hz的频率发出声音,用于命令缓冲区满,或者提示符下按退格键时使用。以后文件系统移植成功了,可能还要添加一些函数用于播放音乐。
(4)func_getchar.c这个函数主要是模拟键盘的。我再前面的文章中对相关的实现方法做了一些介绍,这里就不再重复了。
(5)uart.c。实现了Uart_Putchar(),Uart_PutString()等函数,用于在串口终端显示。
6、userapp文件组
该文件组主要是用户任务文件和中断程序文件。
(1)user_app.c:main函数和开始任务在这个文件。
(2)stm32f10x_it.c,中断程序基本都在这里定义。
(3)task_keyscan.c,键盘扫描任务文件。
(4)task_cmdshell.c,利用键盘和液晶实现的简单shell。
(5)task_uartcmd.c,利用串口中断实现命令处理。
7、userlib文件组
在用户任务中用到的体积比较大的函数在这个文件组实现。
(1)cmdtable.c,任务cmdshell中用到的命令函数。
(2)uartcmd.c,任务uartcmd中用到的命令函数。
文章评论(0条评论)
登录后参与讨论