公司要开发自己的串口显示屏,所以就研究一下SWM34SVET6这个芯片。

资料链接:SYNWIT系列 MCU 的应用开发需要哪些资料 - 资料下载 - 华芯微特开发论坛

 图片转换工具:Image Converter — LVGL

开发准备

开发环境用keil5,安装Synwit的芯片包,选择SWM341xE。

我是使用J-link下载,如果找不到设备可能是J-link的驱动版本太低。搜索SEGGER-Link,SEGGER - The Embedded Experts - Downloads - J-Link / J-Trace

官网下载最新的驱动,照着这篇文章,华芯微特开发环境搭建-SWM34SVET6为例-CSDN博客

安上然后选择Cortex-M33,

开发记录

2025/07/28-09:23

使用的是Waiken-Smart 慧勤智远,慧勤智远 SWM34SVET6 V1.1小系统板\4. 程序源码\1,标准例程\实验24 2.4&3.5寸SPI模块显示实验,华芯微特SWM34SVET6开发板内置8MB SDRAM配套多款触摸屏国产M33-tmall.com天猫

根据原理图修改了引脚,背光亮了,但是没有东西显示。

2025/07/29-10:57

屏幕使用的型号是:EP4011S

正方形液晶屏 4.0寸液晶屏 IPS全视角 显示屏 480*480 EP4011S-淘宝网

屏幕用的驱动是ST7701S,还得学一下,这个驱动芯片和RGB接口到底是怎么用的。

ST7701S的RGB接口有两种模式,HV和DE模式

HV模式:

行列模式,就是需要HSYNC(行同步)和VSYNC(场同步)信号配合。

比如我用的480*480分辨率的屏幕,使用RGB888,就需要有480个VS和480个HS,看图我的理解是:一个VS代表第n列,每列有480个HS,每个HS有24+前沿+后沿个PCLK。相当于定位了,0列0行这几个点显示一个24位数。

DE模式:

前边和HV模式都一样,但是为啥要用DE来做同步呢?原来的是PCLK,现在变成了DOTCLK。

我想HV模式不是更方便吗?DE就一直拉高就行呗。

看了原理图寻思寻思,我是不是其他的信号线没给啊,能显示就怪了。

我RESET、CS、SCL、SDA都给了信号,信号对不对就不知道了,到时候把飞线焊在芯片引脚看看。

然后就是DCLK、HSYNC、VSYNC、DE这几根线了,还有RGB各八根线。

2025/07/29-14:45

例程换成了《慧勤智远 SWM34SVET6 V1.1小系统板\4. 程序源码\1,标准例程\实验8 LCD(RGB屏)实验》

重新配置了一下,将SPI配置那边使用屏幕厂商的配置,RGB这边用上边的例程,能够点亮了。

下一步学习一下LVGL部分。

2025/07/29-15:17

尝试了一下不知道为啥RGB888中的,蓝色和红色是对调的。现在是BGR888。怀疑跟时序先后有关系。

后记:

在ST7701的寄存器0x36里面设置0x08就可以了。

不同颜色的字体显示效果不好。其中蓝色的好多是断的,能看出来字母,但是显示效果不好。

2025/07/29-15:23

学习lvgl

2025/07/31-08:00

发现一个问题:RGB中R和B是反过来的,是BGR。。。

昨天看lvgl图片的例程看了一天,显示就是有问题,当#define LV_COLOR_DEPTH     32的时候显示这样:

#define LV_COLOR_DEPTH     16显示这样:

不知道为什么会这样显示。。。我确实是想用RGB888显示。接着看LVGL有没有什么参数可以调的。

这个屏幕还不是主流屏幕,可以参考的地方太少了。

2025/07/31-08:34

尝试用Code::Blocks模拟试一下,看看是不是硬件的问题。

安装了韦东山的lvgl里面的codeblocks,模拟运行了一下代码,没有问题啊。

对了一下lv_conf.h里面的参数,发现#define LV_MEM_SIZE (42U * 1024U)          /*[bytes]*/我这边给的是42K,不知道够不够用。我之前确实改过,但是编译就出问题了,估计是内存不够用了。

2025/07/31-10:48

我想扩大#define LV_MEM_SIZE (42U * 1024U),但是最多扩大到45,再多一点就要爆炸(编译过不去)。看看怎么调整一下。

调整成48之后,完全没显示了,屏一直闪烁。应该不是这个原因。

2025/08/04-13:34

找了好长时间,我感觉是配置错误了,问了DeepSeek发现

#define MY_DISP_HOR_RES 800

我是480x480的屏幕,改成了480,就能正常显示了。

但是我想显示自己的图片,480x480的,RGB888图片太大了,编译不过去。

已知电路板上有W25Q64还有一个SD card接口。我需要区分一下这些存储空间都是干啥的。

2025/08/07-11:19

这两天一直在琢磨调用SD卡里面的图片显示在屏幕里。

搜到一个:LVGL从SD卡读取图片并显示到MCU LCD屏详细笔记教程_lvgl显示sd卡图片-CSDN博客

也不知道是配置的问题,还是挂载的问题,我只能挂载"sd:","0:"挂载不上去。

/* FATFS */
#define LV_USE_FS_FATFS             1
#if LV_USE_FS_FATFS
    #define LV_FS_FATFS_LETTER      'S'        /* 设置一个可访问驱动器的大写字母(例如。“A”) */
    #define LV_FS_FATFS_CACHE_SIZE  0           /* >0在lv_fs_read()中缓存这个字节数 */
#endif


Res = f_mount(&SD_FS,"sd:",1);	/* 挂载SD卡 */

2025/08/13-11:05

终于能显示了,问题在这,我的这个LV_FS_FATFS_LETTER设置的是'S',然后我创建图片是这样写的:

img = lv_img_create(lv_scr_act());                                 /* 创建图片部件 */
lv_img_set_src(img, "sd:/images/img_5.bin");                       /* 设置图片源 */
lv_obj_align(img, LV_ALIGN_CENTER, 0, 0);            	   		   /* 设置图片位置 */
lv_obj_update_layout(img);  

修改为:

img = lv_img_create(lv_scr_act());                                 /* 创建图片部件 */
lv_img_set_src(img, "S:/images/img_5.bin");                        /* 设置图片源 */
lv_obj_align(img, LV_ALIGN_CENTER, 0, 0);            	   		   /* 设置图片位置 */
lv_obj_update_layout(img);  

还有我把png改为bin了。终于显示图片了。

2025/08/14-13:59

琢磨一下串口接收和Modbus,通过Modbus协议切换图片。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐