WCHGUI 软件开发使用说明
一、GUI介绍
WCHGUIDesigner 是沁恒微电子自主研发的嵌入式 UI 可视化开发工具,依托沁恒全系列 RISC-V MCU 软硬件生态,采用所见即所得的拖拽式可视化开发模式。 开发人员可通过拖拽排布各类界面控件,自动生成标准化 C 语言工程代码,简化 UI 界面开发流程。该工具已内嵌至 MounRiver Studio II(MRS2)集成开发环境,可完成 UI 设计、源码生成、工程编译与程序下载流程,适用于 CH32V、CH32L 等系列芯片配套彩屏产品开发。
WCHGUIDesigner 支持矩形、图片、艺术字、标签、静态文字、按钮、开关、动画、进度条、滑块、二维码等多种显示控件,以及触摸、按键等交互方式。通过控件的灵活组合,可快速搭建导航菜单、任务栏、交互动效和数据表盘等界面效果,满足电器面板、工业仪器、智能旋钮屏等应用场景的人机交互需求。
下图为WCHGUIDesigner UI界面以及所支持控件库。

二、硬件平台
- CH32V203C8T6-R1开发板,该板带有SPI FLASH接口,已换成8MB的FLASH(W25Q64)
- 2.4寸SPI接口TFT-LCD屏,驱动芯片为ILI9341,分辨率为240*320
硬件引脚连接如下:

三、软件平台
开发环境:MRS2(https://mounriver.com/download)
开发工具:WCHGUIDesigner
四、使用指南
1、创建文件夹
为便于演示,直接在桌面创建CH32V203 GUI以及GUI Project两个文件夹,分别用于存放CH32V203 GUI工程以及WCHGUIDesigner生成的GUI项目文件
2、创建工程

工程创建完成之后,会自动弹出WCHGUIDesigner软件,如下图
3、新建项目
点击新建项目,跳出如下窗口,在该界面可调整屏幕分辨率、是否为圆形屏幕、外部FLASH大小以及项目存放路径,该项目存放在GUI Project文件夹。此处屏幕分辨率为320*240,外部FLASH大小为8MB
4、新增页面
创建项目完成之后,界面如下
可以点击页面列表旁边“+”,选择新建空白页面、或菜单页面、或动画轮播
此处以菜单页面为例,选择菜单页面之后,界面如下

该界面为默认界面,可根据自己需要修改界面,有提供对应的控件库。
注意:关于新增页面之后,有时候窗口可能看不到页面视图,如下图

此时可选择视图,重置面板布局,即可看到页面视图,如下图


5、保存项目
页面修改完成之后,点击文件,选择保存项目

6、生成代码
项目保存之后,可点击生成,选择MCU C代码生成,界面如下。此时外部输出选择V203工程的User文件夹,若需要修改外部FLASH大小,此时也可以修改。

点击生成文件,此时界面如下

此时可点击关闭,可将WCHGUIDesigner软件最小化,下次使用时再调出。
7、修改工程
打开前面新建的CH32V203 GUI工程,如下

工程默认使用SPI1操作FLASH,使用SPI2驱动屏幕。
关于SPI1操作FLASH,例程默认使用PA4作为片选引脚,但CH32V203C8T6-R1开发板使用的是PA2作为片选引脚,可将程序中PA4改为PA2,如下图,其他建议按照工程默认配置连接。

工程默认适配驱动芯片为ST7789的屏幕,对于其他驱动芯片的屏幕,需要对LCD_Init和LCD_SetWindows两个函数进行修改。
void LCD_Init(void) { SPI2_Init(); SPI2_DMA_Init(); LCD_GPIOInit(); LCD_RESET(); LCD_CS_CLR(); LCD_WR_REG(0x28); LCD_exec_init((uint8_t*)lcd_ili9341_init_cmds); Delay_Ms(10); LCD_Clear(LCD_BLACK); Delay_Ms(10); LCD_LED_SET(); } /********************************************************************* * @fn LCD_SetWindows * * @brief Setting LCD display window * * @param xStar - the bebinning x coordinate of the LCD display window * yStar - the bebinning y coordinate of the LCD display window * xEnd - the endning x coordinate of the LCD display window * yEnd - the endning y coordinate of the LCD display window * * @return none */ void LCD_SetWindows(uint16_t xStar, uint16_t yStar, uint16_t xEnd, uint16_t yEnd) { LCD_CS_CLR(); LCD_WR_REG(LCD_SET_X); LCD_WR_DATA(xStar >> 8); LCD_WR_DATA(0x00FF & xStar); LCD_WR_DATA(xEnd >> 8); LCD_WR_DATA(0x00FF & xEnd); LCD_WR_REG(LCD_SET_Y); LCD_WR_DATA(yStar >> 8); LCD_WR_DATA(0x00FF & yStar); LCD_WR_DATA(yEnd >> 8); LCD_WR_DATA(0x00FF & yEnd); LCD_WR_REG(LCD_MEM_WRITE); LCD_CS_SET(); }
LCD_Init函数主要用于屏幕初始化配置,对于不同驱动芯片的屏幕,其对应命令不同,一般主要对 lcd_ili9341_init_cmds 数组中命令进行修改即可;
例程默认屏幕驱动芯片为ST7789,此处我所用屏幕驱动芯片为ILI9341,参考 lcd_ili9341_init_cmds 数组,添加 lcd_ili9341_init_cmds 数组,对应ILI9341驱动芯片命令,具体如下:
static const uint8_t lcd_ili9341_init_cmds[] = { // ========== 电源控制 ========== 3, 0xCF, 0x00, 0xC1, 0x30, // Power control B 4, 0xED, 0x64, 0x03, 0x12, 0x81, // Power on sequence control 3, 0xE8, 0x85, 0x00, 0x78, // Driver timing control A 5, 0xCB, 0x39, 0x2C, 0x00, 0x34, 0x02, // Power control A 1, 0xF7, 0x20, // Pump ratio control 2, 0xEA, 0x00, 0x00, // Driver timing control B // ========== 电源电压设置 ========== 1, 0xC0, 0x23, // Power control 1 - GVDD 1, 0xC1, 0x10, // Power control 2 - step-up factor 2, 0xC5, 0x3E, 0x28, // VCOM control 1 1, 0xC7, 0x86, // VCOM control 2 // ========== 像素格式与显示方向 ========== 1, 0x3A, 0x55, // Pixel Format: 16bit RGB565 1, 0x36, #if USE_HORIZONTAL == 0 0x48, // 竖屏正常 #elif USE_HORIZONTAL == 1 0x28, // 横屏模式1 #elif USE_HORIZONTAL == 2 0x88, // 横屏模式2 #elif USE_HORIZONTAL == 3 0xE8, // 竖屏翻转 #endif // ========== 帧率控制 ========== 2, 0xB1, 0x00, 0x18, // Frame Rate (normal mode) ~79Hz 3, 0xB6, 0x08, 0x82, 0x27, // Display Function Control // ========== 伽马校正 ========== 1, 0xF2, 0x00, // 3Gamma Function Disable 1, 0x26, 0x01, // Gamma Set: curve 1 15, 0xE0, 0x0F, 0x31, 0x2B, 0x0C, 0x0E, 0x08, 0x4E, 0xF1, 0x37, 0x07, 0x11, 0x0A, 0x16, 0x0B, 0x00, // Positive Gamma Correction 15, 0xE1, 0x00, 0x0E, 0x14, 0x03, 0x11, 0x07, 0x31, 0xC1, 0x48, 0x08, 0x0F, 0x0C, 0x31, 0x36, 0x0F, // Negative Gamma Correction // ========== 显示控制 ========== 0, 0x11, // Sleep Out (退出睡眠模式) 0, 0x29, // Display On (开启显示) // ========== 终止标志 ========== 0xFF, 0xFF, };
可在lcd.h文件中调整显示方向,也可在此处重新调整分辨率。
LCD_SetWindows函数,主要用于LCD显示窗口设置,不同驱动芯片的列地址设置命令、行地址设置命令以及写显存命令不一样,需要做修改。
此处所用屏驱芯片ILI9341和工程默认驱动芯片ST7789对于这3个命令的值是一样的,如下图,因此此处不需要做修改。若是其它驱动芯片,此处命令可能不一样,具体需要对照数据手册进行修改。

8、编译工程
工程修改完毕之后,可直接编译工程,如下图,一般按照上述流程修改不会编译报错

工程修改编译完毕之后,下载到MCU实现硬件显示需要分两步:
(1)需要将项目生成bin文件下载到外部FLASH;
(2)需要将工程生成bin/hex文件下载到内部FLASH;
9、片外FLASH下载
片外FLASH下载需要配合对应工程进行下载,该工程与新建V203工程默认均使用SPI1引脚操作FLASH,在使用该工程时,若你前面修改了片选引脚,此处要注意修改该工程SPI FLASH片选引脚,和前面一样改为PA2,然后直接编译。

工程编译后,会在 obj 文件夹下生成名称为 algorithm.bin 的文件,通过两线方式配合WCH-LinkE下载到外部 FLASH,需要选择正确的文件。
外部 FLASH 下载流程如下:
(1) 在工具 Memory Type 选项中选择外部模式。
(2)选择对应的 MCU 芯片型号
(3) 添加工程编译后的最新 algorithm.bin 文件
(4)选择需要下载到外置 FLASH 的的固件
(5)确认两线连接,点击下载,等待

关于步骤3对应的工程文件路径如下:

关于步骤4对应的生成文件路径如下:

整体如下:

10、工程下载
将项目生成bin文件下载到片外FLASH之后,直接下载工程,此时屏幕显示菜单界面,如下图

五、控件使用
1、矩形控件使用
鼠标选中矩形控件,直接拖拽到页面视图中,如下图,可通过拖拉或修改X、Y坐标修改矩形大小或位置,此外,支持修改矩形背景色和选择触摸。

选中页面,可直接修改页面背景色,如下图。

注意:背景颜色可根据自己需要配置选择,下介绍字体颜色同理。

2、图片控件使用
鼠标选中图形控件,直接拖拽到页面视图中,如下图,可通过拖拉或修改X、Y坐标修改图片大小或位置,此外,支持选择触摸、图片类型和压缩方式。

此时添加图片需要导入对应图片资源,导入方式如下,可直接点击”导入“导入图片资源,也可先新建分组,比如建立”图片“分组,导入资源到图片分组中。

添加图片资源之后,直接选择对应的图片,即可添加,如下图。关于背景色修改,参考前面介绍。


3、艺术字控件使用
鼠标选中艺术字控件,直接拖拽到页面视图中,如下图,可通过拖拉或修改X、Y坐标修改艺术字区域大小或位置,此外,支持选择触摸、修改文本、字体、字号、对齐方式、字体加粗、字体颜色、艺术字区域背景颜色。

注意 :艺术字字符集合默认只有”0123456789%:.-+ ?“,可根据自己需要添加abcd等字符,如下图,但需要注意目前不支持汉字。

4、标签控件使用
鼠标选中标签控件,直接拖拽到页面视图中,如下图,可通过拖拉或修改X、Y坐标修改标签区域大小或位置,此外,支持选择触摸、修改文本、对齐方式、字体颜色以及标签区域背景颜色。标签支持显示汉字。

5、静态文字控件
鼠标选中静态文字控件,直接拖拽到页面视图中,如下图,可通过拖拉或修改X、Y坐标修改静态文字区域大小或位置,此外,支持选择触摸、修改文本、字体、文本位置、字号、字体加粗、斜体、字体颜色、背景、背景色、背景图片、压缩方式等。

6、按钮控件
鼠标选中按钮控件,直接拖拽到页面视图中,如下图,可通过拖拉或修改X、Y坐标修改按钮控件区域大小或位置,此外,支持选择触摸、修改默认按钮是否按下、按钮图片压缩方式等。可通过点击按钮控件动态演示按钮按下和抬起状态,默认按键是抬起状态。

点击按钮,按键按下时,如下,显示按下时图片。

7、开关控件
鼠标选中开关控件,直接拖拽到页面视图中,如下图,可通过拖拉或修改X、Y坐标修改开关区域大小或位置,此外,支持选择触摸、修改默认开启、开关图片压缩方式等。可通过点击开关控件动态演示开关开启和关闭状态,默认开关是关闭状态。

点击开关,开关开启时,如下,显示开启时图片。

8、动画控件
鼠标选中动画控件,直接拖拽到页面视图中,如下图,可通过拖拉或修改X、Y坐标修改动画区域大小或位置,此外,支持选择触摸、压缩方式以及动画资源。动画资源导入方式参考前面图片资源导入方式。选中动画资源之后,可修改对应的帧。

9、进度条控件
鼠标选中进度条控件,直接拖拽到页面视图中,如下图,可通过拖拉或修改X、Y坐标修改进度条区域大小或位置,此外,支持选择触摸、修改进度条进度值、进度条方向、背景色以及填充色等。

10、滑块控件
鼠标选中滑块控件,直接拖拽到页面视图中,如下图,可通过拖拉或修改X、Y坐标修改滑块区域大小或位置,此外,支持选择触摸、初始百分比、滑块方向、背景图等。

11、二维码控件
鼠标选中二维码控件,直接拖拽到页面视图中,如下图,可通过拖拉或修改X、Y坐标修改二维码区域大小或位置,此外,支持选择触摸、修改二维码内容、前景色、背景色等。

六、GUI演示
如下图,为GUI配置界面

GUI配置完成之后,在工程对应文件中会生成对应的控件ID结构体,如下图,在GUI配置是使用了11个控件,此时结构体中包含11个控件ID,调用对应控件ID进行修改使用。

比如要实现标签0、1、2、3、4等的动态变化,可直接在wui_page_page_1_loop函数中使用相关函数调用对应控件ID修改即可,该标签对应的ID是11,则按照下图调用即可,关于动态变化间隔时间,不建议直接在该loop函数中直接加延时,可以通过标志位判断实现相应延时效果。
关于进度条,其对应的控件ID是05,直接调用wui_widget_pb_set_value(PAGE_1_COMPONENT_005, CNT);函数进行修改即可。


浙公网安备 33010602011771号