首发:Rice 嵌入式开发技术分享
作者:RiceDIY
最近手痒痒的,想玩一下显示器,也是为了选型,制作我的小板子。目前这个板子还没画完,还想加多点动能,目前只有显示器,没有其他外设了,感觉太简陋了。不过这篇文章的主角不是这个板子。而是聊聊移植guilite到stm32上,以及如何跑在RT-Thread Nano。
我们的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官网文档,这里就不详细介绍了。
《移植GuiLite Samples》
我们需要把他的源码下载,源码路径:https://gitee.com/idea4good/G...。它提供了很多demo。
我们以移植HelloStar为例,在我们创建好的工程建立一个目录uicode,我们进入HelloStar\UIcode目录将UIcode.cpp和GuiLite.h拷贝到uicode目录中。
然后将UIcode.cpp添加到工程中。注意要添加头文件路径。
编译,如果出现错误“type qualifier on return type is meaningless”。我们需要配置一下,添加“-O1 -g -W”,如下图:
《GuiLite Samples在RTT上的实现》
根据官网的文档说明。
需要实现void delay\_ms(unsigned short nms)函数,实现这个函数的目的是为了实现thread\_sleep()。
但是RTT并没有提供这个延时函数,而是使用rt\_err\_t rt\_thread\_mdelay(rt\_int32\_t ms)等,所以我们对这个函数进行了封装。如下图:
根据官网的文档说明,我们要对显示器接口进行封装,如下:
其中,红框部分是我们st7735驱动中的画点函数。
创建一个线程,将guilite和st7735驱动起来,以及运行guilite显示。
你会发现线程没有增加循环,这是因为startHelloStar这个函数内部有个是循环,所以我们不需要增加。如下:
为了适配我们的屏幕,还需要根据自己屏幕的像素,修改一下显示的尺寸如下:
《编译运行》
编译(编译成功):
烧录运行:如何烧录进去,无法显示,有可能是堆空间分配不足的原因,需要根据芯片的资源,将堆空间加大,如图:
效果如下:
HelloStar
Hello3D
HelloWave
源码下载链接:https://github.com/RiceChen/P...\_GuiLite\_to\_RT-Thread.git,在Porting\_GuiLite\_HelloStar分支上
有任何人问题加作者微信。。。
UDP协议栈系列篇阅读
更多嵌入式技术干货请关注Rice 嵌入式开发技术分享