发新帖本帖赏金 50.00元(功能说明)我要提问
12下一页
返回列表
打印
[国产单片机]

【自选开发板活动】基于国产单片机TK499的GUI图形库LVGL移植

[复制链接]
12768|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#申请原创#
TK499介绍
TK499是深圳市好钜润科技自主研发的一款国产MCU。
那好钜润科技是一个什么样的公司呢?
以下是该公司官网的介绍:
深圳市好钜润科技有限公司秉持“需求有多远,我们就能走多远”的企业理念,是一家从事芯片研发、薄膜半导体设计,液晶屏制造和销售液晶显示屏(LCD),LED背光源和液晶显示模组及液晶显示控制的专业生产厂家。产品横跨半导体,液晶屏及软件设计三大产业。
  依托自有半导体芯片的研发,我们不仅可以 提供专业的液晶模组定制,还可以提供一站式的嵌入式系统,智能硬件显示方案,界面方案定制。从芯片,液晶屏,软件等三个方面为客户提供高性价比,精简高效率显示方案。品牌下的产品通盖TN,HTN,STN,FSTN,CSTN和TFT 等模式的液晶显示屏,以及COB,COG,COF,TAB等类型的液晶模组。产品广泛应用于仪器仪表,家电,通讯,工控设备,汽车电子(汽车防盗器,汽车车载播放,汽车倒车雷达)和数码钟表,测量工具等领域。
  好钜润科技拥有强大的技术研发能力,我们的优势是擅于根据客户的要求提供完整的产品解决方案,帮客户量身定做合适的液晶屏产品。
  期待与您的合作,更期待您的莅临!您的发展就是好钜润的发展,愿我们携手共同创造经济财富!
  经营理念:
  需求有多远,我们就能走多远!
根据公司官网的这段介绍,大概知道是以液晶显示屏为主的一家科技公司。
TK499应该是该公司目前唯一的一款MCU产品。
TK499特性:
· 内核:Cortex-M4240Mhz,具有DSP指令支持浮点运算;
· 支持Qaud-SPI FLASH接口;
· 8M字节32SDRAM
· 支持TK80,向下兼容intel8080接口;
· LCD-TFT控制器,支持1600万色RGB888
· 一个12ADC,6通道;
· 多达1032位定时器;
· 70多个具有中断功能的IO
· 通讯接口丰富;
· TouchPad接口;
由上能看出来,这款芯片资源还是非常丰富的,该芯片专门针对LCD显示和触摸做了很多的原生支持。
这款MCU我看网上用的人很少,基本上只有官方的资料。官方资料除了数据手册和寄存器文档外,还提供了二十几个相关的示例代码,一般常规的应该大概也够了。资料大概有这些:


根据我的初步体验,这款MCUSTM32的使用方法还非常类似,所以使用起来很容易上手。
关于TK499芯片本身,我不打算做太多的介绍,有兴趣的同学可以亲自去体验。
二,TK499开发板
我手上一款TK499开发板,这款开发板是21ic电子论坛活动赞助的,在此也感谢21ic论坛组织这么好的活动。


这款开发板配置还是挺豪华的,正面配有一块800*480的电阻触摸屏,背面是主控和一些外设。外设主要有:wifi模块ESP8266sd卡座,UART1,UART2,UART4接口引出,SWD调试口引出,SPI2接口引出,若干IO口引出,一个复位按键和一个用户案件,另外开发板还外挂了一块SPI接口的FLASH。由此可见,可玩性还是非常高的。
开发板在这里也不做过多的介绍,这也并不是本文的重点,下面开始切入正题。
三,嵌入式GUI图形库LVGL移植
1. LVGL简介
LVGL是一个免费的开源图形库,提供了创建嵌入式GUI所需的一切,具有易于使用的图形元素、漂亮的视觉效果和低内存占用。
特点:
· 强大的构建模组 按钮、图表、列表、滑块、图像等先进的图形 动画、反锯齿、半透明、平滑滚动多样的输入设备 触摸板、鼠标、键盘、编码器等多显示器支持 支持同时使用多个TFT或单色显示器多语言支持 UTF-8格式文字编码完全自定义 图形元素硬件无关 可用于任意微控制器或显示器可裁剪 用于小内存(80 KB FLASH12 KB RAM)操作操作系统、外部存储以及GPU 支持但非必须单帧缓存 即可实现先进的图形效果C语言编写 以最大化兼容(C++ 兼容)模拟器 无需嵌入式硬件就可以在电脑上开始GUI设计教程、示例、主题 从而快速GUI设计文档 在线及离线免费开源 基于MIT协议
运行要求:


2. 开始移植
2.1获取LVGL源码
源码可以直接在官方github上下载,地址:https://github.com/lvgl/lvgl/tags
目前最新版本已经更新到8.2.0了,每个大版本之间区别都比较大,我就选择一个我自己相对比较熟悉的版本来进行移植。我就选择版本7.11.0来进行本次移植。


下载完成后解压,可以看到如下内容:


虽然解压后内容很多,但是我们只需要其中的4个文件/文件夹。分别是:examples文件夹,src文件夹,lv_conf_template.h文件和lvgl.h文件。


2.2 准备一个LCD驱动调通的MDK工程
我这边是在开发板LED工程上增加了LCD驱动,前期已经调试通过了,能正常显示,所以本次我就基于这个工程进行LVGL的移植。



2.3 建立LVGL相关的文件夹
在工程目录中新建名叫GUI的文件夹,然后在GUI文件夹里面再新建一个名为lvgl的文件夹;再把之前解压后的4个文件/文件夹复制到刚刚新建的GUI/lvgl目录中:



2.4 文件名修改
1.修改GUI/lvgl/examples/porting目录下的所有文件的文件名,修改后如下:


lv_port_disp是与显示有关的文件,lv_port_indev是与输入设备有关的文件,lv_port_fs是与文件系统有关的文件,本次我只涉及到显示,所以其实只需要用到lv_port_disp文件就可以。
2.复制GUI\lvgl目录下的lv_conf_template.hGUI目录,并修改文件名位lv_conf.h



2.5 MDK配置
MDK工程中新建2group,名字分别为lvgllvgl_porting
然后把GUI\lvgl\src下面的所有c文件添加到MDKlvgl中;把GUI\lvgl\examples\porting下面的lv_port_disp.c添加到MDKlvgl_porting中。添加后如下:


工程中添加头文件路径:


修改队栈大小:

设置C99模式:
因为LVGL要求必须C99及以上。



2.6 文件修改
打开lv_conf.h文件,使能条件编译和设置屏幕分辨率:

打开lv_port_disp.c文件,使能条件编译,修改和增加头文件:

修改lv_port_disp_init函数:

在函数disp_init中添加LCD的初始化代码:


在函数disp_flush中添加打点函数,也可以直接添加矩形填充函数,我这里添加的是画点函数:


到此,lv_port_disp.c文件就修改完毕。
打开lv_port_disp.h文件,使能条件编译,并添加函数声明:


配置一个1ms中断一次的定时器,作为lvgl的心跳:


到此,LVGL就算移植完成了,下面就要写一段测试代码来验证移植是否成功。
写了一个创建文本控件的测试程序,如果能够成功显示,说明我们的lvgl移植成功了,否则就是失败的,测试程序如下:
void test_demo(void)
{
        static lv_style_t label_style;
       
        lv_style_init(&label_style);
        lv_style_set_text_opa(&label_style,LV_STATE_DEFAULT,LV_OPA_COVER);
        lv_style_set_text_color(&label_style,LV_STATE_DEFAULT,LV_COLOR_RED);
        lv_style_set_text_font(&label_style,LV_STATE_DEFAULT,&lv_font_montserrat_32);
       
        lv_obj_t *label1 = lv_label_create(lv_scr_act(),NULL);
        lv_obj_add_style(label1,LV_LABEL_PART_MAIN,&label_style);
        lv_label_set_text(label1,"Hello LVGL");
        lv_obj_align(label1,NULL,LV_ALIGN_CENTER,0,0);
}
最后,进行验证:
在主函数中进行相关初始化,和测试程序调用:

编译,应该能通过,如果不能通过,可以根据错误提示进行修改。
通过后下载到开发板,效果:

到此,说明LVGL移植成功了,可以在这个基础上进行更复杂的应用开发了。


使用特权

评论回复

打赏榜单

21小跑堂 打赏了 50.00 元 2022-03-31
理由:恭喜通过原创文章审核!请多多加油哦!

相关帖子

沙发
xinmeng_wit|  楼主 | 2022-3-27 17:19 | 只看该作者
补几张跑LVGL官方demo的图片:











使用特权

评论回复
板凳
昨天| | 2022-3-28 08:25 | 只看该作者
    楼主星期天也上班啊,竞业精神可以,  这个主要用在那方面,  开发板是免费的??。

使用特权

评论回复
地板
xinmeng_wit|  楼主 | 2022-3-28 15:00 | 只看该作者
昨天 发表于 2022-3-28 08:25
楼主星期天也上班啊,竞业精神可以,  这个主要用在那方面,  开发板是免费的??。
...

免费的,二姨家的活动。
下期还有,敬请关注

使用特权

评论回复
5
yangbeioften| | 2022-4-7 15:57 | 只看该作者
我手上有开发板屏幕和几个片子,去年涨价之前买的,当时还是25元一片,还在吃灰中。。。

使用特权

评论回复
6
klbyf| | 2022-4-11 13:29 | 只看该作者
值得参加!机会难得!

使用特权

评论回复
7
xinmeng_wit|  楼主 | 2022-4-13 07:55 | 只看该作者
yangbeioften 发表于 2022-4-7 15:57
我手上有开发板屏幕和几个片子,去年涨价之前买的,当时还是25元一片,还在吃灰中。。。 ...

赶紧搞起来

使用特权

评论回复
8
xinmeng_wit|  楼主 | 2022-4-13 07:56 | 只看该作者
klbyf 发表于 2022-4-11 13:29
值得参加!机会难得!

请关注下期活动

使用特权

评论回复
9
klbyf| | 2022-4-14 08:32 | 只看该作者
太好了!棒棒达!

使用特权

评论回复
10
拉勾上调不许变| | 2022-10-26 10:52 | 只看该作者
不建议入手,我买他们好几套。资料非常差,百度搜也很少有参考程序。还没有技术支持。不建议入手。资料少的可怜。百度搜TK499,看到的基本就是这种推广介绍帖子,没多少干货。

使用特权

评论回复
11
xinmeng_wit|  楼主 | 2022-11-1 19:32 | 只看该作者
拉勾上调不许变 发表于 2022-10-26 10:52
不建议入手,我买他们好几套。资料非常差,百度搜也很少有参考程序。还没有技术支持。不建议入手。资料少的 ...

是的,不建议入手,做产品肯定不太建议,发烧友评测一下还是可以的。
他这个产品好像没有继续做下去了,如果能够继续做下去,应该还是蛮有竞争力的

使用特权

评论回复
12
玥月| | 2022-11-2 08:18 | 只看该作者
太好了!棒棒达!

使用特权

评论回复
13
缡乃头子| | 2023-2-8 18:43 | 只看该作者
能问一下在主函数是引用什么头文件才能用lvgl库的函数?是直接用lv_obj.h吗?

使用特权

评论回复
14
xinmeng_wit|  楼主 | 2023-2-12 18:39 | 只看该作者
缡乃头子 发表于 2023-2-8 18:43
能问一下在主函数是引用什么头文件才能用lvgl库的函数?是直接用lv_obj.h吗? ...

#include "lvgl.h"
#include "lv_port_disp.h"
#include "lv_port_indev.h"

这三个就行

使用特权

评论回复
15
缡乃头子| | 2023-2-14 15:51 | 只看该作者
大佬,大佬。能问一下为什么会卡在lv_label_create的LV_ASSERT_MEM(new_label);这里?

使用特权

评论回复
16
xinmeng_wit|  楼主 | 2023-2-14 20:51 | 只看该作者
缡乃头子 发表于 2023-2-14 15:51
大佬,大佬。能问一下为什么会卡在lv_label_create的LV_ASSERT_MEM(new_label);这里?

你是自己写的测试程序还是用的官方自带的demo?

使用特权

评论回复
17
xinmeng_wit|  楼主 | 2023-2-14 20:51 | 只看该作者
缡乃头子 发表于 2023-2-14 15:51
大佬,大佬。能问一下为什么会卡在lv_label_create的LV_ASSERT_MEM(new_label);这里?

你是自己写的测试程序还是用的官方自带的demo?

使用特权

评论回复
18
缡乃头子| | 2023-2-15 09:40 | 只看该作者
xinmeng_wit 发表于 2023-2-14 20:51
你是自己写的测试程序还是用的官方自带的demo?

我是用了RT_thread和Lvgl,忘记加lv_port_disp_init();加了之后一直报错内存内存不足

使用特权

评论回复
19
缡乃头子| | 2023-2-15 10:05 | 只看该作者
缡乃头子 发表于 2023-2-15 09:40
我是用了RT_thread和Lvgl,忘记加lv_port_disp_init();加了之后一直报错内存内存不足 ...

而且加Lvgl库之前,也就210KB代码,我是512KB的FLASH

使用特权

评论回复
20
缡乃头子| | 2023-2-16 17:29 | 只看该作者
而且现在不是系统的问题,不用系统只用LVGL库,只要一用lv_port_disp_init();就报错,内存不足。而且我设置它最大32U*1024U,32KB而已完全够用

使用特权

评论回复
发新帖 本帖赏金 50.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

240

帖子

1

粉丝