本章节为大家讲解GUIX汉字显示的全字库方式。
20.1初学者重要提示
20.2下载算法存放位置(操作前必看)
20.3 GUIX Studio设置汉字显示
20.4 GUIX汉字显示设置
20.5 GUIX窗口任意位置汉字显示
20.6 内部Flash和QSPI Flash程序调试下载配置(重要必看)
20.7 实验例程设计框架
20.8实验例程
20.9 总结
1、 务必看第11章学习GUIX Studio的使用方法和第12章学习GUIX Studio生成的代码移植到硬件平台的方法。
2、GUIX Studio生成的汉字是采用的UTF-8编码。
3、 GUIX Studio V6.0.2设置字体语言后不能立即生效,关闭软件重新打开后解决
http://www.armbbs.cn/forum.php?mod=viewthread&tid=99661 。
4、 STM32H7花式玩转QSPI Flash相关章节都已经发布:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=101064 。
这里强烈推荐看:第83章 STM32H7 的内部 Flash 和 QSPI Flash都运行程序的混合方式(强烈推荐)。
5、 下载本章节相关例子前,务必先添加好QSPI Flash的下载算法。本章使用的方法支持内部Flash和外部QSPI Flash可以同时下载,同时仿真。如此以来,大家可以方便的将全字库存到外部QSPI Flash,简单易用,大大方便大家项目实战。
(注:例子下载地址 http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 )
编译例子:V7-060_QSPI Flash的MDK下载算法制作,生成的算法文件位于此路径下:
生成算法文件后,需要大家将其存到到MDK安装目录,有两个位置可以存放,任选其一,推荐第2种:
GUIX Studio的设置和第18的界面差不多,效果如下:
这个知识点在第13章有详细讲解,我们这里添加的函数为_cbWindow0:
首先,我们要在Languages对话框添加中文语言。打开菜单Configure->Languages:
打开后的效果如下:
点击按钮Add Language:
添加后的效果如下:
这样就完成了在原来英文的基础上再添加一种语言。
添加了新的语言后,删除GUIX Studio默认创建的英文,在Language Index里面选择1,然后点击Delecte Languagle:
删除后,Number of Languages语言数变成了1:
Language ID这里,我们要选项使用Chinese[zh]
在GUIX Studio的如下位置添加新的字库(推荐将此字库和GUIX Studio工程文件放到一起):
点击后,弹出的对话框如下:
1、Browse按钮用于选择字库。
2、此处推荐选择Project Relative Path相当路径。
3、设置字体高度为24点阵。
4、此处的勾选比较重要,用于添加扩展字符范围,GUIX Studio默认没有包含全角字字符。
这里将上面三个地址范围打对勾了,其中User Defined Page1范围FF00到FFEF是全角字符范围,这个范围是我们手动添加上的。其它两个勾选的地址范围是中文全字库。
5、使用1bpp,没有使用抗锯齿。
6、生成完毕后,别忘了点击保存。
选中创建的BUTTON控件,设置Text内容:安富莱电子,设置Font采用我们前面创建的NotoSerifSC。
设置了显示汉字,函数gx_studio_display_configure的第3个参数要根据GUIX Studio的设置来选择。
#define LANGUAGE_CHINESE 0
#define DISPLAY_1_LANGUAGE_TABLE_SIZE 1
gx_studio_display_configure(DISPLAY_1, stm32h7_graphics_driver_setup_565rgb,
LANGUAGE_CHINESE, DISPLAY_1_THEME_1, &root);
#define GX_EXTENDED_UNICODE_SUPPORT
比如我们这里是将汉字显示放在MainTask.c文件,那么将此文件编码格式设置为UTF-8即可。简单点的办法,大家可以用记事本打开这个文件,然后设置为UTF-8并保存:
MDK5 AC5编译UTF-8编码源文件容易出错,解决办法是在此位置添加--locale=english
MDK AC6无需设置。
下面将GUIX资源文件下载到QSPI Flash,需要大家先在这里添加QSPI Flash地址范围:
然后设置资源文件到外部QSPI Flash:鼠标右击文件guiapp_resources.c,选择Options。
GUIX窗口任意位置汉字的实现如下:
VOID _cbWindow0(GX_WINDOW *widget)
{
GX_RECTANGLE drawto;
GX_CANVAS *mycanvas;
/* 默认的窗口绘制回调函数,即默认界面效果绘制 */
gx_window_draw(widget);
/* 定义一个矩形框,后续的2D绘制函数都是在这个矩形范围内绘制的 */
gx_utility_rectangle_define(&drawto,
10,
100,
400,
265);
/* 返回窗口对应的canvas画布 */
gx_widget_canvas_get(widget, &mycanvas);
/*
在指定的画布上启动绘图。此功能在内部被延迟绘图算法调用,GUIX在需要画布时自动执行更新。
但是允许应用程序绕过延期绘图算法并立即执行。
首先调用gx_canvas_drawing_inititate在画布上绘画。
然后调用所需的绘图函数,最后然后调用gx_canvas_drawing_complete即可。
*/
gx_canvas_drawing_initiate(mycanvas, widget, &drawto);
/* 设置笔刷画线的颜色值 */
gx_context_raw_line_color_set(0xff000000);
/* 设置笔刷填充的颜色值 */
gx_context_raw_fill_color_set(0xff00ff00);
gx_context_font_set(GX_FONT_ID_NOTOSERIFSC);
gx_canvas_text_draw(10, 130, "故人西辞黄鹤楼,烟花三月下扬州Ab", -1);
gx_canvas_text_draw(10, 160, "孤帆远影碧空尽,唯见长江天际流Cd", -1);
/* 用于强制立即绘制,注意,务必和gx_canvas_drawing_initiate成对调用 */
gx_canvas_drawing_complete(mycanvas, GX_TRUE);
}
将下面两个地方配置后,就可以像使用内部Flash一样使用QSPI Flash进行调试了。并且这种方式可以方便的调试程序,内部Flash和外部Flash都做调试。
注意这里一定要够大,否则会提示算法文件无法加载:
我们这里是将其加到DTCM中,即首地址为0x20000000,大家也可以存储到任意其它RAM地址,只要空间还够加载算法文件即可。推荐使用AXI SRAM(地址0x24000000),因为这块RAM空间足够大。
如果要下载程序到内部Flash和外部QSPI Flash里面,需要做如下配置,两个下载算法都要添加进来:
注意这里一定要够大,否则会提示算法文件无法加载:
我们这里是将其加到DTCM中,即首地址为0x20000000,大家也可以存储到任意其它RAM地址,只要空间还够加载算法文件即可。
如果要做调试下载,需要做如下配置:
本章例程的重点是GUIX的中文显示。
(注,如果是电阻屏,需要做触摸校准,校准方法看本教程附件章节A)
配套例子:
本章节配套了如下两个例子供大家移植参考:
GUIX Studio生成的代码在硬件平台实际运行的工程,含有MDK AC5和AC6四个版本工程。
GUIX Studio工程模板,设计界面后,生成的文件可直接添加到MDK,IAR和GCC软件平台使用。
实验目的:
实验内容:
App Task Start任务 :启动任务,这里用作BSP驱动包处理。
App Task MspPro任务 :消息处理,这里用作LED闪烁。
App Task UserIF任务 :按键消息处理。
App Task GUI任务 :GUI应用任务。
App Task STAT任务 :统计任务。
App Task IDLE任务 :空闲任务。
GUIX System Thread :GUI系统任务。
System Timer Thread任务:系统定时器任务。
实验效果:
GUIX Studio的界面设计如下:
串口打印任务执行情况:
IAR,MDK AC5和AC6工程可以串口打印任务执行情况:按开发板的按键K1可以打印,波特率 115200,数据位 8,奇偶校验位无,停止位 1:
本章节主要为大家讲解了GUIX汉字显示的全字库方式,推荐大家熟练掌握本章节的函数用法。