最近,我很幸运受邀参加MM32F5260开发板的测评活动。一直以来我对于图形化界面包有很高的热忱,LVGL是一款优秀的开源嵌入式图像界面库,它拥有丰富的组件和样式。但是由于涉及到图像的渲染,需要消耗大量的RAM空间。
MM32F5260是一款搭载了基于 Arm v8-M 架构 32 位 Star-MC1 内核(兼容 Cortex-M33)的 MCU 产品,其工作频率可达 120MHz,同时拥有256KB Flash和128KB RAM,达到了LVGL官方的推荐配置,所以本次测评活动决定移植LVGL9到MM32F5260平台上。
本次移植参考了很多网络的文章,此处仅列出几个较为重要的
1.LVGL 移植到 STM32 通法 ( 例:LVGL 9.2.2 到 STM32F429 )
https://www.cnblogs.com/Huae/...
2.LVGL官方手册的移植部分
https://docs.lvgl.io/9.2/porting
本次的移植工作主要分为4步
1、获取最新的LVGL代码并进行裁剪
2、在Keil工程中添加对应的.c和.h文件
3、实现st7735s的驱动
4、修改LVGL的display_flush函数中的画点函数修改为st7735s的画点函数
1、获取最新的LVGL代码并进行裁剪
我们从github中可以拉取最新的代码
在gitbash中执行git clone https://github.com/lvgl/lvgl.git
只保留如下的文件
2、在Keil工程中添加对应的.c和.h文件
本次移植选择的是”MM32F5260库函数与例程”中的GPIO_LED_Toogle工程作为模板
在GPIO_LED_Toggle文件夹中创建两个新的文件夹(lvgls、User)用于存储LVGL代码与用户代码
lvgls的目录结构如下
lvgls/lvgl的目录结构如下
lvgls/lvgl_app为空(后续用来存储自己的ui文件)
User用来存储自己写的代码(spi配置代码,st7735s驱动代码)
在keil中按照src中的文件夹创建Group,并导入该文件夹下的所有.c文件
在keil中添加Include路径
3、实现st7735s的驱动
主要实现以下几个函数
void SPI2_Init(void); //配置SPI2并初始化
void TFT_Init(void); //初始化LCD
void lcd_write_command(uint8_t cmd); //使用SPI2发送指令
void lcd_write_data(uint8_t data); //使用SPI2发送8位数据
void lcd_write_data_u16(uint16_t data); //使用SPI2发送16位数据
void lcd_write_address(uint8_t x_start,uint8_t y_start,uint8_t x_end,uint8_t y_end); 设置颜色数据写入地址
4、修改LVGL的lv_port_disp_init函数与disp_flush中的画点函数
lv_port_disp_init函数中,注释掉Example 2与Example 3部分
disp_flush函数中,将原有的示例画点函数替换为自己的
5、最后在main函数中初始化LVGL并测试一些基础组件是否正常渲染
重点!
在例程LibSamples_MM32F5260_V0.11.3\Device\MM32F5260\Source目录下MM32F5260.sct文件中修改heap与stack的大小为0x2000,LVGL的某些组件才能正常渲染!!
总结:
本次的移植工作暂时告一段落了,在debug的过程中,我学习了解了mcu的编译、连接与启动的过程,这应该才是嵌入式软件开发的魅力之处吧!
事物的发展总是螺旋式上升的,最后感谢灵动微电子和极术社区提供的平台与硬件开发板,祝国产mcu越做越好!