SWM34SVET6-LCD开发记录
公司要开发自己的串口显示屏,所以就研究一下SWM34SVET6这个芯片。
公司要开发自己的串口显示屏,所以就研究一下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协议切换图片。
更多推荐



所有评论(0)