#申请原创#
一,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移植成功了,可以在这个基础上进行更复杂的应用开发了。
|