【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 初學者重要提示
- 務必看第11章學習GUIX Studio的使用方法和第12章學習GUIX Studio生成的程式碼移植到硬體平臺的方法。
- STM32F429驅動SPI Flash的MDK下載算法制作方法已經發布,詳見第47章。http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 。
- 下載本章節相關例子前,務必先新增好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平臺使用。
實驗目的:
- 本章主要學習學習GUI全字型檔,主題和圖片儲存到外部SPI Flash。
實驗內容:
- 共建立瞭如下幾個任務,通過按下按鍵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漢字顯示的全字型檔方式,推薦大家熟練掌握本章節的函式用法。