基于UCOS和UCGUI的电子时钟设计

发表时间:2021/5/19   来源:《科学与技术》2021年第4期   作者:刘永琦
[导读] 本文介绍了基于UCOS和UCGUI电子时钟的设计方案

         刘永琦
         北京电子科技职业学院  机电工程学院航空电气技术系  北京  100176)

         摘要:本文介绍了基于UCOS和UCGUI电子时钟的设计方案。该方案是以32位单片机STM32F103为核心,与温湿度检测模块、PM2.5检测模块、按键模块,报警模块和通讯模块等构成了电子时钟系统。
         关键词:STM32单片机;电子时钟;温湿度传感器

         时钟,自从它被发明的那天起,就成为人们生活中必不可少的一种工具,尤其是在现在这个讲究效率的年代,时钟更是在人类生产、生活、学习等多个领域得到广泛的应用。然而随着时间的推移,人们不仅对于时钟精度的要求越来越高,而且对于时钟功能的要求也越来越多,时钟已不仅仅是一种用来显示时间的工具,在很多实际应用中它还需要能够实现更多其它的功能。诸如闹钟功能、日历显示功能、温度测量功能、湿度测量功能、电压测量功能等。因此,笔者设计了一种基于UCOS和UCGUI电子时钟,可以实现时间,温湿度和PM2.5值等数据的显示,可以通过通讯模块把温湿度数据,PM2.5数据传送到PC端,在教学和实际应用中有一定的参考价值。
1 总体设计方案
         本系统采用的主控制单元是意法半导体(ST)公司推出的是Cortex-M3内核的高性能32位ARM微控制器STM32F103,与液晶显示模块、温湿度检测模块、PM2.5检测模块、按键输入模块、通信模块等外围电路一起构成了基于UCOS和UCGUI的电子时钟系统。该系统具有以下主要功能:①采用24小时制方式显示时间,在LCD液晶上图形显示小时、分钟等功能;②闹钟的功能;③能够检测当前环境的温度、湿度和PM2.5值;④能通过LCD液晶显示器图形显示检测结果;⑤检测到的温湿度和PM2.5数据可以通过通讯模块传送给PC机;⑥设定温湿度上下限值,超过限定值后,可以声光报警功能。系统框架如图1所示。本设计包含硬件设计和软件设计两部分。
         
         图1 系统框图
2 硬件设计
2.1 主控单元
         STM32F103ZET6单片机是一种嵌入式-微控制器的集成电路(IC),是由ST公司开发的STM32F1系列的其中一种,芯体尺寸是32位,速度是72MHz,程序存储器容量是256KB,程序存储器类型是FLASH,RAM容量是48K。
?内嵌经出厂调教的8MHz的RC振荡器。
?串行单线调试(SWD)和JTAG接口。
?多达8个定时器。
?3个16位定时器,每个定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入。
?2个看门狗定时器(独立的和窗口型的):防止程序跑飞,单片机自动复位。
?系统时间定时器:一种简单的,24位写清零、递减、自装载同时具有可灵活控制机制的计数器。
?2个I2C接口(支持SMBus/PMBus):一种简单、双向二线制同步串行总线
?3个USART接口(支持ISO7816接口,LIN,IrDA接口和调制解调控制):通用同步/异步串行接收/发送器USART是一个全双工通用同步/异步串行收发模块
?2个SPI接口(18M位/秒):总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。
         本设计采用的STM32F103ZET6单片机,管脚分布图如下图2所示
         
         图2  STM32F103ZET6管脚分布图
2.2  温湿度检测模块
         温湿度检测模块采用DHT11芯片,DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。该传感器包括一个NTC测温元件和一个电阻式测湿元件,且应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。该传感器主要性能指标和引脚说明如表1、表2所示:
         表1  DHT11主要性能指标

         温湿度传感器DHT11主要由单片机STM32F103ZET6的IO口PG11来控制,如图3所示:
         其中DATA为串行接口(单总线),与STM32F103ZET6的IO口PG11相连接。
         
         
         
         图3 温湿度检测模块电路图
2.3 LCD显示模块
         LCD显示模块采用3.5寸的TFT屏,使用的是HX8357驱动芯片。除数据线以外,信号线主要有五根,包括用于片选的CS、用于选择命令或者数据的RS、用于写使能的WR、用于读使能的RD,以及用于复位的RESET。LCD硬件接口电路如图4所示。
 
图4  LCD硬件接口电路
3 软件设计
         基于UCOS和UCGUI电子时钟系统采用实时操作系统UCOS-II和嵌入式图形系统UCGUI,把系统总体功能分割成单个小任务,通过完成多任务的调配工作,实现总体功能。程序采用C 语言和stm32汇编语言进行设计,编译环境为Keil软件。
3.1  μC/OS-II介绍
         μC/OS-II(Micro Control Operation System Two)是一个可以基于ROM运行的、可裁减的、抢占式、实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,适合很多商业操作系统性能相当的实时操作系统(RTOS)。其核心代码用ANSI C语言编写,只有底层函数需要针对不同的CPU采用汇编语言编写,可以管理64个任务,可移植到近40多种处理器体系上,涵盖了从8位到64位各种CPU(包括DSP)。
         μC/OS-II可以简单的视为一个多任务调度器,在这个任务调度器之上完善并添加了和多任务操作系统相关的系统服务,如信号量、邮箱等。其主要特点有公开源代码,代码结构清晰、明了,注释详尽,组织有条理,可移植性好,可裁剪,可固化。
         μC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分。
3.2 移植μC/OS-II系统
         UCOS-II的移植工作需要一定的硬件条件支持,本设计中所用的是处理器,它满足如下条件,简单的说就是
1、处理器可以通过 C 语言对中断进行开关动作,可以产生频率为10Hz 到1000Hz 的定时中断;
2、采用的精简指令集,可以将堆栈指针和寄存器读写到堆栈和内存当中并且有硬件堆栈;
3、使用的keil编译环境可以产生可重入代码;
    正是由于STM32F103ZET6处理器和所使用的编译器keil 可以满足以上要求,因此可以移植并正常运行UCOS-II  操作系统。
    移植工作主要是以下几个文件的修改:OS_CPU.H、OS_CPU_C.C  和OS_CPU_A.ASM。在OS_CPU.H中设置STM32F103ZET6处理器堆栈增长方向为从高到低、定义与编译器相关的数据类型、4个宏的声明(分别是OS_ENTER_CRITICAL()、OS_EXIT_CRITICAL()、OS_TASK_SW()和OS_STK_GROWTH);在OS_CPU_C.C文件中编写OSInitHookBegin (void) 、void  OSTaskIdleHook (void) 、OSTaskSwHook (void)、OSTCBInitHook (void)、OSTimeTickHook (void)等函数(可以用C语言编写);在OS_CPU_A.ASM文件中编写任务切换等函数(汇编语言编写)。
3.3 μC/GUI介绍
         UCGUI是一种嵌入式应用中的图形支持系统。它设计用于为任何使用LCD图形显示的应用提供高效的独立于处理器及LCD控制器的图形用户接口,它适用单任务或是多任务系统环境, 并适用于任意LCD控制器和CPU下任何尺寸的真实显示或虚拟显示。它的设计架构是模块化的,由不同的模块中的不同层组成,由一个LCD驱动层来包含所有对LCD的具体图形操作。 UCGUI可以在任何的CPU上运行,因为它是100%的标准C代码编写的。UCGUI能够适应大多数的使用黑白或彩色LCD的应用,它提供非常好的允许处理灰度的颜色管理。还提供一个可扩展的2D图形库及占用极少RAM的窗口管理体系。
3.4 μC/GUI移植
         UCGUI可以在任何的cpu上运行, 能够适应绝大多数的使用黑白或彩色LCD的应用,它提供非常好的允许处理灰度的颜色管理。还提供一个可扩展的2d图形库及占用极少ram的窗口管理体系。在UCGUI的最初典型配制可包括是否需要操作系统支持,是否需要内存设备支持,是否需要窗口支持,是否需要抗锯齿支持等众多选项,这对于GUI的定制和GUI的体积是非常重要的。小型系统需求ram100bytes,堆栈500bytes,rom10kbytes,完全满足资源非常紧张的系统之中。
         GUI移植重点和应用程序开发如下:
         (1)首先定义guiconf.h和lcdconf.h这两个文件,前者是UCGUI功能模块和动态存储空间(用于内存设备和窗口对象)大小,默认字体设置等基本GUI预定义控制的定义。后者lcdconf.h为LCD大小,控制器类别,总线宽度,颜色选取等LCD参数控制文件。
         (2)对于LCD自带控制器类别的液晶屏,通过lcdconf.h中的总线接口和寄存器接口进行硬件接口的配制和定义。对于片上集成LCD控制器平台而言,通过对片内LCD控制器寄存器的设置来配制LCD接口信号。在一般的LCD中需要配制的LCD接口信号包括vframe帧同步信号,vline线同步脉冲信号,vclk象素时钟信号,vm信号和数据位不等的象素点数据输出信号。
         (3)LCD驱动编程的实质是液晶屏上的点对应的显存编程,最底层调用函数为画点函数,用户可根据自身平台情况根据总线接口和寄存器接口或者LCD控制器寄存器进行操作。
         (4)在samplegui_x文件夹内包括有与硬件联系紧密的文件,包括gui_x.c,gui_x_embos.c, gui_x_ucos.c等文件, gui_x.c包括大部分与硬件的关联函数,如定时器的初始化和触摸屏相关函数。UCGUI与操作系统挂接的核心是定时器的设置和挂接。UCGUI是通过延时函数gui_delay()调用gui_x_delay,再调用gui_exec()处理窗口部件中的回调函数进行重绘。在任何一款嵌入式操作系统中都需要定时器的心脏跳动作用,支持OS的UCGUI可以通过定时器的设置达到嵌入式操作系统和图形系统的实时和同步操作。在gui_x_ucos.c中通过UCOS中的延时程序同UCGUI挂接实现整合。
         (5)经过移植之后,GUI应用程序开发通过UCGUI而变得非常容易,在调用gui_init()后,用户可以根据需要正确配制UCGUI后,可使用其强大的库函数和丰富的GUI资源进行编程。
3.5 程序设计
         电子时钟系统的软件设计主要包括五个部分:
(1)UCOS-II系统建立任务,包括系统主任务、UCGUI界面任务、温湿度检测任务、PM2.5检测任务、串口通信任务和秒更新任务等。
(2)UCGUI图形界面程序,实现了时间 ,温湿度 、PM2.5等界面显示。
(3) 中断服务程序,主要包括系统时钟节拍处理函数SysTickHandler()、RTC_IRQHandler函数以及USART1_IRQHandler()函数;
(4) 硬件平台初始化程序,包括系统时钟初始化、中断源配置、显示屏接口初始化、温湿度检测模块初始化、PM2.5模块初始化等常用配置,也包括RTC模块单元初始化及配置
(5) RTC模块单元的硬件程序,涉及到RTC模块单元的寄存器配置等。
4 结论
         本次设计的基于UCOS和UCGUI电子时钟的系统,可以实现时间、温湿度、PM2.5值的显示,以及温度达到限定值的报警,在教学和实际应用中有一定的参考价值。
参考文献
[1] 徐宝国,宋爱国.基于 UCOS和 UCGUI的嵌入式数字示波器[J].测控技术,2007(8)
[2] 刘波文,孙岩. 嵌入式实时操作系统μC/OS-II经典实例-基于STM32处理器. 北京 北京航空航天大学出版社,2016
[3] 刘继忠,邱于兵,黄翔. 基于ARM的远程温湿度监测系统的设计[J].仪表技术与传感器,2012(8):90-92.
投稿 打印文章 转寄朋友 留言编辑 收藏文章
  期刊推荐
1/1
转寄给朋友
朋友的昵称:
朋友的邮件地址:
您的昵称:
您的邮件地址:
邮件主题:
推荐理由:

写信给编辑
标题:
内容:
您的昵称:
您的邮件地址: