移植后的效果如上图所示,采用的LVGL版本是8.2,接下来是详细的移植过程。
项目来源简单介绍
某天在某宝瞎逛时,突然发现一款单片机,最小系统板只有9.9,这不正好戳中老夫穷逼的心,想到就现在就一块F103最小系统板也得要20、30元,而且仔细一看主频240M,支持WiFi/蓝牙,好家伙我直呼太香,于是果断入手。
主控芯片介绍
W801 芯片是基于平头哥XT804内核设计的soc芯片,支持2.4G IEEE802.11b/g/n Wi-Fi 通讯协议;支持 BT/BLE 双模工作模式,支持 BT/BLE4.2 协议。芯片集成32位 CPU 处理器,内置丰富数字接口;支持TEE安全引擎,支持多种硬件加解密算法,内置DSP、浮点运算单元与安全引擎,支持代码安全权限设置,内置2MBFlash存储器,支持固件加密存储、固件签名,适用于用于智能家居等广泛的物联网领域。
圆形屏幕
选择的是优信电子店铺下的,驱动芯片是GC9A01。
项目目标
最终是希望在W801芯片上实现开源项目SmartKonb智能旋钮开源项目的效果(其实做不到。。。)。
平台搭建和代码准备
1、安装剑池CDK
在平头哥官网下载,国产软件安装都很简单,几乎就是下一步,也没有破解的操作,直接上手就能用。
下载地址:https://occ.t-head.cn/product?id=3864775351511420928&type=soft
2、下载串口烧录软件
去联盛德官网搜W800,找到下面的页面,下载Upgrade_Tools_V1.4.8,无需安装,解压双击就能运行:
下载地址:https://www.winnermicro.com/html/1/156/158/558.html
3、下载W800SDK代码
我使用的是在海凌科官网下载的wm_sdk_w80x_20211115,解压到本地后,在wm_sdk_w80x_20211115\tools\w800\projects\SDK_Project\project\CDK_WS\W800_SDK目录下找到W800_SDK.cdkproj,双击打开工程项目。
下载地址:https://www.hlktech.com/Goods-199.html
4、下载LVGL-8.2和驱动代码代码
命令:git clone --recurse-submodules https://github.com/lvgl/lv_sim_visual_studio.git -b release/v8.2
命令:git clone --recurse-submodules https://github.com/lvgl/lv_drivers.git -b release/v8.2
代码移植过程
1、前期代码准备
在wm_sdk_w80x_20211115目录下新建一个lvgl文件夹,将lvgl库下的src,examples文件夹和lvgl.h、lvgl_conf_template.h文件复制到新建目录下,并将lvgl_conf_template.h重命名为lvgl_conf.h
在examples目录下的porting文件夹中,将 lv_port_disp_template.c和lv_port_disp_template.h文件复制到lvgl目录下,并删除命名中的_template,删除porting文件夹。最终如下图所示:
2、代码编写
2.1、将LVGL库加载进入项目下
在CDK编辑器下,左侧项目结构右键选择Add Source Folder,并选择刚刚新建的lvgl目录,点击添加即可。
2.2、SPI驱动代码
在工程项目src目录下右键选择新建文件lcd.h lcd.c lcd_spi_dirver.h lcd_spi_driver.c 四个文件 ,如下图所示:
代码如下
lcd.h
#ifndef _LCD_H_
#define _LCD_H_
#include "lcd.h"
#include "wm_gpio_afsel.h"
#define LCD_SCL WM_IO_PB_15 //--->>TFT --SCL
#define LCD_SDA WM_IO_PB_17 //--->>TFT --SDA
#define LCD_RST WM_IO_PB_24 //--->>TFT --RST
#define LCD_DC WM_IO_PB_25 //--->>TFT --RS/DC
#define LCD_CS WM_IO_PB_14 //--->>TFT --CS
#define LCD_BL WM_IO_PB_27 //--->>TFT --BL
#define LCD_DC_SET do{ tls_gpio_write(LCD_DC, 1);} while(0)
#define LCD_LED_SET do{ tls_gpio_write(LCD_BL, 1);} while(0)
#define LCD_RST_SET do{ tls_gpio_write(LCD_RST,1);} while(0)
#define LCD_DC_CLR do{ tls_gpio_write(LCD_DC, 0);} while(0)
#define LCD_LED_CLR do{ tls_gpio_write(LCD_BL, 0);} while(0)
#define LCD_RST_CLR do{ tls_gpio_write(LCD_RST,0);} while(0)
#define X_MAX_PIXEL (128)
#define Y_MAX_PIXEL (160)
#define RED 0xF800
#define GREEN 0x07E0
#define BLUE 0x001F
#define WHITE 0xFFFF
#define BLACK 0x0000
#define YELLOW 0xFFE0
#define GRAY0 0xEF7D
#define GRAY1 0x8410
#define GRAY2 0x4208
void LCD_GpioInit(void);
void LCD_Reset(void);
void LCD_Back_On(void);
v