【自选开发板活动】基于国产单片机TK499的GUI图形库LVGL移植
#申请原创#一,TK499介绍 TK499是深圳市好钜润科技自主研发的一款国产MCU。那好钜润科技是一个什么样的公司呢?以下是该公司官网的介绍: 深圳市好钜润科技有限公司秉持“需求有多远,我们就能走多远”的企业理念,是一家从事芯片研发、薄膜半导体设计,液晶屏制造和销售液晶显示屏(LCD),LED背光源和液晶显示模组及液晶显示控制的专业生产厂家。产品横跨半导体,液晶屏及软件设计三大产业。 依托自有半导体芯片的研发,我们不仅可以 提供专业的液晶模组定制,还可以提供一站式的嵌入式系统,智能硬件显示方案,界面方案定制。从芯片,液晶屏,软件等三个方面为客户提供高性价比,精简高效率显示方案。品牌下的产品通盖TN,HTN,STN,FSTN,CSTN和TFT 等模式的液晶显示屏,以及COB,COG,COF,TAB等类型的液晶模组。产品广泛应用于仪器仪表,家电,通讯,工控设备,汽车电子(汽车防盗器,汽车车载播放,汽车倒车雷达)和数码钟表,测量工具等领域。 好钜润科技拥有强大的技术研发能力,我们的优势是擅于根据客户的要求提供完整的产品解决方案,帮客户量身定做合适的液晶屏产品。 期待与您的合作,更期待您的莅临!您的发展就是好钜润的发展,愿我们携手共同创造经济财富! 经营理念: 需求有多远,我们就能走多远! 根据公司官网的这段介绍,大概知道是以液晶显示屏为主的一家科技公司。 TK499应该是该公司目前唯一的一款MCU产品。TK499特性:· 内核:Cortex-M4,240Mhz,具有DSP指令,支持浮点运算;· 支持Qaud-SPI FLASH接口;· 8M字节32位SDRAM;· 支持TK80,向下兼容intel8080接口;· LCD-TFT控制器,支持1600万色RGB888;· 一个12位ADC,6通道;· 多达10个32位定时器;· 70多个具有中断功能的IO;· 通讯接口丰富;· TouchPad接口;由上能看出来,这款芯片资源还是非常丰富的,该芯片专门针对LCD显示和触摸做了很多的原生支持。这款MCU我看网上用的人很少,基本上只有官方的资料。官方资料除了数据手册和寄存器文档外,还提供了二十几个相关的示例代码,一般常规的应该大概也够了。资料大概有这些:
根据我的初步体验,这款MCU和STM32的使用方法还非常类似,所以使用起来很容易上手。关于TK499芯片本身,我不打算做太多的介绍,有兴趣的同学可以亲自去体验。二,TK499开发板我手上一款TK499开发板,这款开发板是21ic电子论坛活动赞助的,在此也感谢21ic论坛组织这么好的活动。
这款开发板配置还是挺豪华的,正面配有一块800*480的电阻触摸屏,背面是主控和一些外设。外设主要有:wifi模块ESP8266,sd卡座,UART1,UART2,UART4接口引出,SWD调试口引出,SPI2接口引出,若干IO口引出,一个复位按键和一个用户案件,另外开发板还外挂了一块SPI接口的FLASH。由此可见,可玩性还是非常高的。开发板在这里也不做过多的介绍,这也并不是本文的重点,下面开始切入正题。三,嵌入式GUI图形库LVGL移植
1. LVGL简介LVGL是一个免费的开源图形库,提供了创建嵌入式GUI所需的一切,具有易于使用的图形元素、漂亮的视觉效果和低内存占用。特点: · 强大的构建模组 按钮、图表、列表、滑块、图像等先进的图形 动画、反锯齿、半透明、平滑滚动多样的输入设备 触摸板、鼠标、键盘、编码器等多显示器支持 支持同时使用多个TFT或单色显示器多语言支持 UTF-8格式文字编码完全自定义 图形元素硬件无关 可用于任意微控制器或显示器可裁剪 用于小内存(80 KB FLASH,12 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.h到GUI目录,并修改文件名位lv_conf.h。
2.5 MDK配置 在MDK工程中新建2个group,名字分别为lvgl和lvgl_porting。然后把GUI\lvgl\src下面的所有c文件添加到MDK的lvgl中;把GUI\lvgl\examples\porting下面的lv_port_disp.c添加到MDK的lvgl_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移植成功了,可以在这个基础上进行更复杂的应用开发了。
补几张跑LVGL官方demo的图片:
楼主星期天也上班啊,竞业精神可以,这个主要用在那方面,开发板是免费的??。
昨天 发表于 2022-3-28 08:25
楼主星期天也上班啊,竞业精神可以,这个主要用在那方面,开发板是免费的??。
...
免费的,二姨家的活动。
下期还有,敬请关注 我手上有开发板屏幕和几个片子,去年涨价之前买的,当时还是25元一片,还在吃灰中。。。 值得参加!机会难得! yangbeioften 发表于 2022-4-7 15:57
我手上有开发板屏幕和几个片子,去年涨价之前买的,当时还是25元一片,还在吃灰中。。。 ...
赶紧搞起来
klbyf 发表于 2022-4-11 13:29
值得参加!机会难得!
请关注下期活动 太好了!棒棒达! 不建议入手,我买他们好几套。资料非常差,百度搜也很少有参考程序。还没有技术支持。不建议入手。资料少的可怜。百度搜TK499,看到的基本就是这种推广介绍帖子,没多少干货。 拉勾上调不许变 发表于 2022-10-26 10:52
不建议入手,我买他们好几套。资料非常差,百度搜也很少有参考程序。还没有技术支持。不建议入手。资料少的 ...
是的,不建议入手,做产品肯定不太建议,发烧友评测一下还是可以的。
他这个产品好像没有继续做下去了,如果能够继续做下去,应该还是蛮有竞争力的 太好了!棒棒达! 能问一下在主函数是引用什么头文件才能用lvgl库的函数?是直接用lv_obj.h吗? 缡乃头子 发表于 2023-2-8 18:43
能问一下在主函数是引用什么头文件才能用lvgl库的函数?是直接用lv_obj.h吗? ...
#include "lvgl.h"
#include "lv_port_disp.h"
#include "lv_port_indev.h"
这三个就行 大佬,大佬。能问一下为什么会卡在lv_label_create的LV_ASSERT_MEM(new_label);这里? 缡乃头子 发表于 2023-2-14 15:51
大佬,大佬。能问一下为什么会卡在lv_label_create的LV_ASSERT_MEM(new_label);这里?
你是自己写的测试程序还是用的官方自带的demo? 缡乃头子 发表于 2023-2-14 15:51
大佬,大佬。能问一下为什么会卡在lv_label_create的LV_ASSERT_MEM(new_label);这里?
你是自己写的测试程序还是用的官方自带的demo? xinmeng_wit 发表于 2023-2-14 20:51
你是自己写的测试程序还是用的官方自带的demo?
我是用了RT_thread和Lvgl,忘记加lv_port_disp_init();加了之后一直报错内存内存不足 缡乃头子 发表于 2023-2-15 09:40
我是用了RT_thread和Lvgl,忘记加lv_port_disp_init();加了之后一直报错内存内存不足 ...
而且加Lvgl库之前,也就210KB代码,我是512KB的FLASH 而且现在不是系统的问题,不用系统只用LVGL库,只要一用lv_port_disp_init();就报错,内存不足。而且我设置它最大32U*1024U,32KB而已完全够用
页:
[1]
2