
最近手痒痒的,想玩一下显示器,也是为了选型,制作我的小板子。目前这个板子还没画完,还想加多点动能,目前只有显示器,没有其他外设了,感觉太简陋了。不过这篇文章的主角不是这个板子。而是聊聊移植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/GuiLiteSamples.git。它提供了很多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这个函数内部有个是循环,所以我们不需要增加。如下:

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

《编译运行》
编译(编译成功):

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

效果如下:
http://mpvideo.qpic.cn/0bf2euaasaaa2uanieeoq5pfajodbesqacia.f10003.mp4?dis_k=0e6df7fe11095c54a1a7bc6f07aa5955&dis_t=1652167465&vid=wxv_1288976080363225091&format_id=10003&support_redirect=0&mmversion=false
HelloStar
http://mpvideo.qpic.cn/0bf2lqaayaaanmanesuoojpfaxgdbroaadaa.f10003.mp4?dis_k=92f355482b85172370c6fb8ff63fb125&dis_t=1652167465&vid=wxv_1288977268542439427&format_id=10003&support_redirect=0&mmversion=false
Hello3D
http://mpvideo.qpic.cn/0bf2kuaa2aaaaqanhouoo5pfavodbvkqadia.f10003.mp4?dis_k=000576a86b476fd8d382d91cf6649aae&dis_t=1652167465&vid=wxv_1288977701579161601&format_id=10003&support_redirect=0&mmversion=false
HelloWave
源码下载链接:https://github.com/RiceChen/Porting_GuiLite_to_RT-Thread.git,在Porting_GuiLite_HelloStar分支上


本文分享自 Rice 嵌入式开发技术分享 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!