1. 程式人生 > 實用技巧 >【STM32F429】第20章 ThreadX GUIX外接主題,字型檔和相簿到外部SPI Flash

【STM32F429】第20章 ThreadX GUIX外接主題,字型檔和相簿到外部SPI Flash

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

第20章 ThreadX GUIX外接主題,字型檔和相簿到外部SPI Flash

本章節為大家講解GUIX外接主題,字型檔和相簿到外部SPI Flash的方法。

20.1初學者重要提示

20.2下載演算法存放位置(操作前必看)

20.3 GUIX Studio生成bin格式資原始檔

20.4 新增bin格式資原始檔到功能並載入到SPI Flash

20.5 載入SPI Flash內容到動態記憶體並安裝主題和字型檔

20.6 方法一:內部Flash和SPI Flash程式分別下載注意事項

20.7 方法二:內部Flash和SPI Flash程式同時下載

20.8 實驗例程設計框架

20.9 實驗例程

20.10 總結

20.1 初學者重要提示

  1. 務必看第11章學習GUIX Studio的使用方法和第12章學習GUIX Studio生成的程式碼移植到硬體平臺的方法。
  2. STM32F429驅動SPI Flash的MDK下載算法制作方法已經發布,詳見第47章。http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255
  3. 下載本章節相關例子前,務必先新增好SPI Flash的下載演算法。本章使用的方法支援內部Flash和外部SPI Flash可以同時下載。如此以來,大家可以方便的將字型檔,相簿和主題存到外部SPI Flash,簡單易用,大大方便大家專案實戰。

20.2 下載演算法存放位置(操作前必看)

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

編譯例子:V6-025_SPI Flash的MDK下載算法制作,生成的演算法檔案位於此路徑下:

生成演算法檔案後,需要大家將其存到到MDK安裝目錄,有兩個位置可以存放,任選其一,推薦第2種:

  • 第1種:存放到MDK的STM32F4軟包安裝目錄裡面:\Keil\STM32F4xx_DFP\2.15.0\CMSIS\Flash(軟包版本不同,數值2.15.0不同)。
  • 第2種:MDK的安裝目錄 \ARM\Flash裡面。

20.3 GUIX Studio生成bin格式資原始檔

GUIX Studio的設定和第7章移植章節的介面一樣,大家可以直接使用例子V7-2007_GUIX Studio Template(RG565)做修改。

下面為大家講解如何將此介面設定的主題,字型檔和圖片存到外部SPI Flash中。

20.3.1 設定GUIX主題非靜態定義

開啟選單中的主題設定選項:

取消靜態定義前的對勾:


20.3.2 設定GUI字型檔的非常靜態定義

開啟選單中的主題設定選項:


取消靜態定義前的對勾:


20.3.3 將資原始檔生成bin格式

選擇生成所有檔案:


配置如下:


  • binary mode 勾上表示二進位制模式。
  • generate resource header表示生成資原始檔標頭檔案。
  • Binary Mode File Format:Binary 表示生成檔案格式為bin格式。

點選生成後,可以看到生成的資原始檔是bin格式的。

20.4 新增bin格式資原始檔到工程並載入到SPI Flash

20.4.1 第1步:將bin檔案轉換為C陣列格式檔案

為了方便將bin檔案新增到MDK工程中,我們這裡使用小軟體B2C.exe將其轉換為C格式檔案(此軟體已經放到本章配套例子V6-2023_GUIX Studio Font Theme and Picture Load From SPI Flash裡面)。

轉換後生成的檔案為guiapp_resources.c :

20.4.2 第2步:新增GUIX Studio生成的檔案到工程

將GUIX Studio生成的3個檔案和第1步中的guiapp_resources.c都新增到工程中:

20.4.3 第3步:配置MDK,防止bin各種資原始檔被優化

為了防止MDK優化檔案guiapp_resources.c,需要大家配置MDK的Linker選項:

20.4.4 第4步:設定GUIX資原始檔到外部SPI Flash。

下面將GUIX資原始檔下載到SPI Flash,需要大家先在這裡新增SPI Flash地址範圍:

然後設定資原始檔到外部SPI Flash:滑鼠右擊檔案guiapp_resources.c,選擇Options。

20.5 載入SPI Flash內容到動態記憶體並安裝主題和字型檔

20.5.1 第1步:載入SPI Flash中資料到動態記憶體

載入函式使用我們前面移植章節在App_SysFunction.c檔案中定義的函式:memory_allocate

VOID *memory_allocate(ULONG size)
{
    VOID *memptr;

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

載入方法如下,注意動態記憶體是否夠載入:

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;

20.5.2 第2步:載入主題和字型檔

主題和字型檔載入實現如下:

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檔案中如下的兩個定義決定的:

#define DISPLAY_1_STRING_TABLE_SIZE  4
#define DISPLAY_1_LANGUAGE_TABLE_SIZE 1

20.6 方法一:內部Flash和SPI Flash程式分別下載注意事項

20.6.1 第1步:下載的RAM空間要夠大

配置方法如下,注意這裡一定要夠大,否則會提示演算法檔案無法載入:

20.6.2 第2步:載入外接SPI Flash演算法並下載

僅載入SPI Flash演算法檔案:

全編譯工程,點選這裡一鍵下載:

下載成功效果(會提示沒有0x08000000地址的演算法,不用管,因為我們沒有新增內部Flash演算法):

20.6.3 第3步:載入內部Flash演算法並下載

僅載入內部演算法檔案:

全編譯工程,點選這裡一鍵下載:

下載成功效果(會提示沒有0xC0000000地址的演算法,不用管,因為我們沒有新增SPI Flash演算法):

20.7 方法二:內部Flash和SPI Flash程式同時下載

內部Flash和SPI Flash的演算法檔案都載入進來:

同時下載會提示如下錯誤,也就是校驗的時候沒有通過,實際測試程式已經正常運行了,大家可以不用理會:

或者簡單些,大家不勾選校驗也可以的:

不放心的話,就繼續還用上面小節的分步下載。

20.8 實驗例程設計框架

本章例程的重點是載入外部SPI Flash中的內容(GUX Studio生成)到SDRAM。

20.9 實驗例程

(注,如果是電阻屏,需要做觸控校準,校準方法看本教程附件章節A)

配套例子:

本章節配套了如下兩個例子供大家移植參考:

  • V6-2023_GUIX Font Theme and Picture Load From SPI Flash

GUIX Studio生成的程式碼在硬體平臺實際執行的工程,含有MDK版本工程。

  • V6-2024_GUIX Studio Font Theme and Picture Load From SPI Flash

GUIX Studio工程模板,設計介面後,生成的檔案可直接新增到MDK平臺使用。

實驗目的:

  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:

20.10 總結

本章節主要為大家講解了GUIX漢字顯示的全字型檔方式,推薦大家熟練掌握本章節的函式用法。