【STM32H7】第21章 ThreadX GUIX外置主题,字库和图库到外部SPI Flash

2021-01-26 16:13:03 浏览数 (1)

最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429

第21章 ThreadX GUIX外置主题,字库和图库到外部SPI Flash

本章节为大家讲解GUIX外置主题,字库和图库到外部SPI Flash的方法。

21.1初学者重要提示

21.2下载算法存放位置(操作前必看)

21.3 GUIX Studio生成bin格式资源文件

21.4 添加bin格式资源文件到功能并加载到SPI Flash

21.5 加载SPI Flash内容到动态内存并安装主题和字库

21.6 内部Flash和SPI Flash程序调试下载配置(重要必看)

21.7 实验例程设计框架

21.8实验例程

21.9 总结

21.1 初学者重要提示

  1. 务必看第11章学习GUIX Studio的使用方法和第12章学习GUIX Studio生成的代码移植到硬件平台的方法。
  2. STM32H7驱动SPI Flash的MDK下载算法制作方法已经发布,详见第84章。http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 。
  3. 下载本章节相关例子前,务必先添加好SPI Flash的下载算法。本章使用的方法支持内部Flash和外部SPI Flash可以同时下载。如此以来,大家可以方便的将字库,图库和主题存到外部SPI Flash,简单易用,大大方便大家项目实战。
  4. 本章节SPI Flash的存储方法与上个章节的QSPI Flash的存储方法不同,本章是利用GUIX Studio生成的bin文件存到SPI Flash。当然,QSPI Flash也可以采用此方法,但SPI Flash不可以采用QSPI Flash的存储方法,因为STM32H7驱动SPI Flash不支持内存映射模式。

21.2 下载算法存放位置(操作前必看)

(注:例子下载地址 http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 )

编译例子:V7-065_SPI Flash的MDK下载算法制作,生成的算法文件位于此路径下:

生成算法文件后,需要大家将其存到到MDK安装目录,有两个位置可以存放,任选其一,推荐第2种:

  • 第1种:存放到MDK的STM32H7软包安装目录里面:KeilSTM32H7xx_DFP2.6.0CMSISFlash(软包版本不同,数值2.6.0不同)。
  • 第2种:MDK的安装目录 ARMFlash里面。

21.3 GUIX Studio生成bin格式资源文件

GUIX Studio的设置和第7章移植章节的界面一样,大家可以直接使用例子V7-2007_GUIX Studio Template(RG565)做修改。

下面为大家讲解如何将此界面设置的主题,字库和图片存到外部SPI Flash中。

21.3.1 设置GUIX主题非静态定义

打开菜单中的主题设置选项:

取消静态定义前的对勾:

21.3.2 设置GUI字库的非常静态定义

打开菜单中的主题设置选项:

取消静态定义前的对勾:

21.3.3 将资源文件生成bin格式

选择生成所有文件:

配置如下:

  • binary mode 勾上表示二进制模式。
  • generate resource header表示生成资源文件头文件。
  • Binary Mode File Format:Binary 表示生成文件格式为bin格式。

点击生成后,可以看到生成的资源文件是bin格式的。

21.4 添加bin格式资源文件到工程并加载到SPI Flash

21.4.1 第1步:将bin文件转换为C数组格式文件

为了方便将bin文件添加到MDK工程中,我们这里使用小软件B2C.exe将其转换为C格式文件(此软件已经放到本章配套例子V7-2027_GUIX Studio Font Theme and Picture Load From SPI Flash里面)。

转换后生成的文件为guiapp_resources.c :

21.4.2 第2步:添加GUIX Studio生成的文件到工程

将GUIX Studio生成的3个文件和第1步中的guiapp_resources.c都添加到工程中:

21.4.3 第3步:配置MDK,防止bin各种资源文件被优化

为了防止MDK优化文件guiapp_resources.c,需要大家配置MDK的Linker选项:

21.4.4 第4步:设置GUIX资源文件到外部SPI Flash。

下面将GUIX资源文件下载到SPI Flash,需要大家先在这里添加SPI Flash地址范围:

然后设置资源文件到外部SPI Flash:鼠标右击文件guiapp_resources.c,选择Options。

21.5 加载SPI Flash内容到动态内存并安装主题和字库

21.5.1 第1步:加载SPI Flash中数据到动态内存

加载函数使用我们前面移植章节在App_SysFunction.c文件中定义的函数:memory_allocate

代码语言:javascript复制
VOID *memory_allocate(ULONG size)
{
    VOID *memptr;

    if (tx_byte_allocate(&memory_pool, &memptr, size, TX_NO_WAIT) == TX_SUCCESS)
    {
        return memptr;
    }
    return NULL;
}

加载方法如下,注意动态内存是否够加载:

代码语言:javascript复制
uint8_t *buf;
GX_UBYTE *root_address;
extern const unsigned char _acguiapp_resources[204562UL   1];

buf = memory_allocate(sizeof(_acguiapp_resources));
sf_ReadBuffer(buf, 0, sizeof(_acguiapp_resources));
root_address = (GX_UBYTE *)buf;

21.5.2 第2步:加载主题和字库

主题和字库加载实现如下:

代码语言:javascript复制
GX_THEME *theme = GX_NULL;
INT theme_id = 0;
GX_STRING **language_table = GX_NULL;
GX_UBYTE *root_address;

/* 加载主题 */
gx_binres_theme_load(root_address, theme_id, &theme);
guiapp_display_table[0].theme_table = (const GX_THEME **)&theme;
    
/* 加载字体 */
gx_binres_language_table_load_ext(root_address, (GX_STRING ***)&language_table);
guiapp_display_table[0].language_table = (GX_CONST GX_STRING **)language_table;
guiapp_display_table[0].language_table_size = 1;
guiapp_display_table[0].string_table_size = 4;

这里特别注意language_table_size = 1和string_table_size = 4从那里来的,这个是由guiapp_resources.h文件中如下的两个定义决定的:

代码语言:javascript复制
#define DISPLAY_1_STRING_TABLE_SIZE  4
#define DISPLAY_1_LANGUAGE_TABLE_SIZE 1

21.6 内部Flash和QSPI Flash程序调试下载配置(重要必看)

将下面两个地方配置后,就可以像使用内部Flash一样使用SPI Flash进行程序下载了。注意这里一定要够大,否则会提示算法文件无法加载:

我们这里是将其加到DTCM中,即首地址为0x20000000,大家也可以存储到任意其它RAM地址,只要空间还够加载算法文件即可。推荐使用AXI SRAM(地址0x24000000),因为这块RAM空间足够大。

如果要下载程序到内部Flash和外部SPI Flash里面,需要做如下配置,两个下载算法都要添加进来:

21.7 实验例程设计框架

本章例程的重点是加载外部SPI Flash中的内容(GUX Studio生成)到SDRAM。

21.8 实验例程

(注,如果是电阻屏,需要做触摸校准,校准方法看本教程附件章节A)

配套例子:

本章节配套了如下两个例子供大家移植参考:

  • V7-2026_GUIX Font Theme and Picture Load From SPI Flash

GUIX Studio生成的代码在硬件平台实际运行的工程,含有MDK AC5和AC6四个版本工程。

  • V7-2027_GUIX Studio Font Theme and Picture Load From SPI Flash

GUIX Studio工程模板,设计界面后,生成的文件可直接添加到MDK,IAR和GCC软件平台使用。

实验目的:

  1. 本章主要学习学习GUI全字库,主题和图片存储到外部SPI Flash。

实验内容:

  1. 共创建了如下几个任务,通过按下按键K1可以通过串口打印任务堆栈使用情况

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的界面设计如下:

串口打印任务执行情况:

MDK AC5和AC6工程可以串口打印任务执行情况:按开发板的按键K1可以打印,波特率 115200,数据位 8,奇偶校验位无,停止位 1:

21.9 总结

本章节主要为大家讲解了GUIX汉字显示的全字库方式,推荐大家熟练掌握本章节的函数用法。

0 人点赞