控制/MCU
随着居民生活水平的提高和气象意识的增强,近年来自动气象站得到了大力的发展。自动气象站需要可视化的人机界面,既能发布动态的气象数据,也能对气象站发送控制指令。因此,自动气象站拥有可视化的液晶显示控制模块是非常重要的。
为了节约硬件资源,采用STM32F103VET6单片机驱动7寸触摸屏作为显示控制模块的硬件平台。为实现多任务处理,移植经过裁剪和修改的UC/OS-II操作系统。同时移植可裁剪的界面设计软件接口UCGUI,实现可视化人机界面。构建软硬件可裁剪的自动气象站控制模块,即能满足自动气象站工作现场的任务需求,也减少了软硬件资源的浪费,充分发挥了嵌入式产品在工控现场的优势。
采用STM32F103VET6作为主控制器芯片,利用TFT屏驱动程序和触摸驱动程序驱动7寸触摸屏,系统整体框图如图1所示。
针对该CPU移植UC/GUI和UC/OS-II是本文的关键。液晶驱动程序和触摸驱动程序配合UCGUI提供的接口函数,搭建可视化人机交互界面,移植适用于本系列CPU的UC/OS-II实现多任务处理。
图1 系统整体
基于价格和性能的综合考虑,选择STM32F103VET6作为主控制器芯片。STM32F103系列CPU采用CORTEX-M3内核,最高工作频率72MHz,拥有256~512KBFLASH程序存储器,并行LCD接口,兼容8080/6800模式。
LCD模块采用群创AT070TN90系列TFT屏。该液晶显示模块由LCD面板,SSD1963控制电路,电源与调压器电路,背光控制电路4部分组成。其中SSD1963控制电路包含了1块SSD1963控制芯片,负责与处理器进行通信,根据处理器传输过来的数据刷新内部显存,控制LCD面板刷新显示。
TFT显示屏与STM32F103的接口如图2所示。
图2 TFT显示屏与STM32F103的接口电路
TFT显示屏表面贴有一块XPT2046控制的四线制触摸屏,该触摸屏的Y+,Y-,X+,X-分别与XPT2046的4个引脚相连。当屏幕被按下时,XPT2046内部的125KHz转换速率的逐步逼近型12位A/D转换器执行2次A/D转换计算触摸位置,然后以SPI总线方式传送给CPU。
移植GUI接口主要实现包括画点、线、矩形、多边形、位图等功能。GUI所有的系统函数都是通过调用这些接口函数来实现的,而这些接口函数又都是基于画点函数来实现,几乎GUI显示功能都最终调用画点函数,所以LCD驱动程序重点在画点函数的编写。
/*在指定坐标画指定颜色的点*/
vOIDLCD_SETPOINT(U16X,U16Y,U16C)
{
LCD_WRITECOM(0X002A);
LCD_WRITERAM(X>>8);
LCD_WRITERAM(X&0X00FF);
LCD_WRITERAM(HDP>>8);
LCD_WRITERAM(HDP&0X00FF);
LCD_WRITECOM(0X002B);
LCD_WRITERAM(Y&0X00FF);
LCD_WRITERAM(VDP>>8);
LCD_WRITERAM(VDP&0X00FF);
LCD_WRITECOM(0X002C);
LCD_WRITERAM(C);
}
实现了对LCD像素的操作,进而修改移植UCGUI图形接口,从而方便UCGUI通过调用该最底层函数来实现丰富的图形界面。
UCGUI是一种小型嵌入式图形界面接口,独立于CPU和LCD控制器,对系统要求很低。8/16/32位CPU,2~6KB的RAM,30~60KB的ROM,2KB的堆栈即可满足。UCGUI接口完全对外开放,结构如表1所示。
表1 UCGUI源码组织结构
移植UCGUI的前提就是修改配置头文件。根据硬件电路设计,显示器控制器型号,以及设计中将使用UC/OS操作系统的实际情况,配置头文件具体修改如下:
将该修改完头文件的UCGUI源码包编译进工程,利用GUI自带的图形接口函数,便可在LCD屏上任意位置画任意的图形。实现自动气象站的多任务处理的功能,给液晶显示控制模块移植一个结构小巧的UC/OS-II操作系统也是必不可少的。
UC/OS-II是免费的公开的源代码,具有可剥夺内核。绝大部分代码用C语言编写,仅有与CPU相关的代码用汇编编写,总量也仅为200行左右,被压缩到最低限度以便移植到任意一种CPU上。只要有标准的C交叉编译器,汇编器和连接器等软件工具,就可以将UC/OS-II移植到例如STM32这样的CPU中。因为其执行效率高,占用空间小,实时性好,可扩展性强,最小内核可编译至2KB,所以UC/OS-II能完美运行于STM32中。
UC/OS-II可大致分成核心、任务处理、时间处理、任务同步与通信、CPU的移植等5个部分。
1)核心部分(OSCORE.C)包括操作系统初始化,系统运行,中断进出的前导、时钟节拍、任务调度、事件处理等部分。
2)任务处理部分(OSTASK.C)包括任务的建立、删除、挂起、恢复等。因为UC/OS-II是以任务为基本调度单位的,所以该部分也很重要。
3)时钟部分(OSTIME.C)UC/OS-II中最小时钟单位是TIMETICK(时钟节拍),任务延迟等操作在此完成。
4)任务同步与通信部分此部分包括信号量、邮箱、邮箱队列、事件标志等部分。主要用于任务间的互相联系和对临界资源的访问。
5)与CPU的接口部分该部分是UC/OS-II针对CPU移植的部分。该部分牵扯到SP等系统指针,所以通常由汇编语言编写。
UC/OS-II在STM32上移植,前提需要修改3个文件,它们是OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM。
1)临界代码段
UC/OS-II为保证某段代码完整执行,需要临时关闭中断,代码执行完成后开启中断。UC/OS-II通过OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()2个宏来实现中断的打开和关闭,对于M3内核,栈增长方向是向下增长,因此需要宏定义OS_TASK_GROWTH为1。
在μVISION4集成开发环境中编写测试代码。在主函数MAIN()中,系统函数OSTASKCREATEEXT()创建系统主任务APPTASKSTART(),在主任务中创建2个系统实际运行的任务APPTASK_LCD()和APPTASK_LED(),设置任务优先级和任务栈大小,2个任务用于液晶显示和LED闪烁。APPTASK_LCD()和APPTASK_LED()的任务配置如表2所示。
表2任务参数设置
系统在2个任务情况下运行效果如图4所示。
图4 显示控制模块
结果表明多任务运行流畅,工作稳定。因此,该自动气象站控制模块工作可靠有效。
设计基于STM32的自动气象站控制模块。STM32单片机的高速、低耗的优越性能完全可以满足触摸屏主控制芯片的要求,TFT液晶显示器可以满足更复杂、多彩、灵活的显示任务,符合显示屏性能不断攀升的发展趋势。将UC/OS-II操作系统和UC/GUI图形接口同时移植到F103系列CPU中,实现多任务处理,完全适应自动气象站多变的任务需求,能承担更加灵活的液晶显示任务。相比传统的自动气象站控制模块,设计在实现多任务,多界面的前提下,将软硬件资源的消耗上降到最低,体现了现代电子设备设计的低功耗低成本的特点。
全部0条评论
快来发表一下你的评论吧 !