Rice我叫加饭? · 2020年11月05日

RT-Thread Nano上移植GuiLite Samples

首发:Rice 嵌入式开发技术分享
作者:RiceDIY

    最近手痒痒的,想玩一下显示器,也是为了选型,制作我的小板子。目前这个板子还没画完,还想加多点动能,目前只有显示器,没有其他外设了,感觉太简陋了。不过这篇文章的主角不是这个板子。而是聊聊移植guilite到stm32上,以及如何跑在RT-Thread Nano。

image.png

我们的MCU型号为:stm32f103c8t6。移植之前要先让显示器工作,所以要先将显示器的驱动写好。我采用的显示器是128*160,驱动芯片为st7735s。相关的驱动代码,我放在我的github上,链接见文末。
通过看guilite的Samples,我们最终目标一个画点的接口,格式为:void (*draw\_pixel)(int x, int y, unsigned int rgb);。

《移植RT-Thread Nano到stm32》

我们移植之前,需要准备好工程。如何移植RTT-Nano可以参考RTT官网文档,这里就不详细介绍了。

image.png

《移植GuiLite Samples》

我们需要把他的源码下载,源码路径:https://gitee.com/idea4good/G...。它提供了很多demo。
image.png
我们以移植HelloStar为例,在我们创建好的工程建立一个目录uicode,我们进入HelloStar\UIcode目录将UIcode.cpp和GuiLite.h拷贝到uicode目录中。
image.png
然后将UIcode.cpp添加到工程中。注意要添加头文件路径。

image.png
编译,如果出现错误“type qualifier on return type is meaningless”。我们需要配置一下,添加“-O1 -g -W”,如下图:

image.png

GuiLite Samples在RTT上的实现》
根据官网的文档说明。

image.png

需要实现void delay\_ms(unsigned short nms)函数,实现这个函数的目的是为了实现thread\_sleep()。

image.png
但是RTT并没有提供这个延时函数,而是使用rt\_err\_t rt\_thread\_mdelay(rt\_int32\_t ms)等,所以我们对这个函数进行了封装。如下图:

image.png

根据官网的文档说明,我们要对显示器接口进行封装,如下:

image.png

其中,红框部分是我们st7735驱动中的画点函数。
创建一个线程,将guilite和st7735驱动起来,以及运行guilite显示。

image.png

你会发现线程没有增加循环,这是因为startHelloStar这个函数内部有个是循环,所以我们不需要增加。如下:
image.png

为了适配我们的屏幕,还需要根据自己屏幕的像素,修改一下显示的尺寸如下:

image.png

《编译运行》

编译(编译成功):

image.png

烧录运行:如何烧录进去,无法显示,有可能是堆空间分配不足的原因,需要根据芯片的资源,将堆空间加大,如图:

image.png

效果如下:

image.png

HelloStar

image.png

Hello3D

image.png

HelloWave

源码下载链接:https://github.com/RiceChen/P...\_GuiLite\_to\_RT-Thread.git,在Porting\_GuiLite\_HelloStar分支上

image.png

有任何人问题加作者微信。。。

300.jpg

UDP协议栈系列篇阅读

更多嵌入式技术干货请关注Rice 嵌入式开发技术分享
推荐阅读
关注数
1761
内容数
51
一个周末很无聊的嵌入式软件工程师,写写经验,写写总结。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息