0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

實戰(zhàn)經驗 | STM32GUI TouchGFX 屏幕切換功能簡介

STM32單片機 ? 來源:未知 ? 2023-11-09 10:05 ? 次閱讀


關鍵詞:GUI,TouchGFX,Transition


目錄預覽

1、引言

2、TouchGFX屏幕切換功能

3、小結


01

引言


TouchGFX 是專用于 STM32 的圖形界面設計軟件,可基于低成本開發(fā)優(yōu)秀的圖形界面,而且它已變的越來越流行。為了幫助客戶更加深入地理解和使用 TouchGFX ,本文針對TouchGFX 屏幕切換的實現方式進行了介紹。通過簡析基本例程“Transition Example”的源碼,剖析其中切屏實現的流程;并簡介了如何使用 TouchGFX Designer 快捷地修改屏幕切換模式,希望能幫助客戶更好地使用 TouchGFX 切屏特色與功能。


02

TouchGFX屏幕切換功能


2.1. TouchGFX Transition 類介紹


TouchGFX 框架中關于屏幕切換功能,實現了一個 Transition 基類和五個派生類,其關系如下圖圖 1 所示。其中,Transition 是切屏的抽象基類,定義了屏幕切換期間發(fā)生的基本事務。虛函數主要包括:Init(初始化)、tearDown(銷毀,切屏完成需要的清理過程)、handleTickEvent(Tick 事件處理函數,主要用于完成切屏的動畫效果)、invalidate(失效,用于重繪)等。五個派生類,其中 NoTransition 是最基本的派生類,它沒有任何視覺效果,當前屏幕會直接被新屏內容替換。另外四個派生類則具有動畫效果:BlockTransition、CoverTransition、SlideTransition 和 WipeTransition。


圖1.TouchGFX Transition 類繼承關系


BlockTransition 將屏幕分成 8x6 份塊,在屏幕切換時會每次隨機重繪其中的 2 個塊,比較節(jié)省 MCU 資源,適合性能不高的 MCU;CoverTransition 的動畫效果是“新屏畫面從一個方向移動過來,直至完全覆蓋原屏幕內容”;SlideTransition 的動畫效果是“新屏與原屏拼接在一起,(原屏在前,新屏在后)從指定的方向滑過來”;WipeTransition 的動畫效果是“新屏內容從一個方向展開(有一種擦除原屏,露出新屏的效果)”。BlockTransition、CoverTransition、SlideTransition 和 WipeTransition 均在 handleTickEvent 函數中實現各自風格的動畫效果,tearDown 函數中則銷毀切屏過程中創(chuàng)建的用于動畫的臨時快照控件等。下面我們首先生成Transition 例程,并對例程源碼相關部分做進一步的分析。


2.2. TouchGFX Transition 例程


運行 TouchGFX Designer,選擇 Examples;通過 Select Board Setup 選擇 STM32H735G DK 板(也可以是 TouchGFX 適用的其它板件);從眾多例程中選擇“Transition Example”例程;將 Application name 改為 Transition_Example,如下圖圖 2 所示,然后點擊 Create 創(chuàng)建工程。


圖2.TouchGFX Designer 生成 Transition Example 例程


進入 TouchGFX Designer 主界面后,會看到畫布上有四個方向按鈕和一個背景圖片,如下 圖圖 3 所示。我們對界面不做更改,直接選擇 Designer 右下角 (Run Target)在目標板上運行。該操作將會復制 TouchGFX 框架文件,生成配置文件、makefile、代碼及資源文件(images、fonts、texts),然后編譯鏈接、燒錄目標板并運行。程序運行起來后,您可以熟悉一下該例程應用,該應用有 5 個屏幕畫面,一個主屏及上下左右 4 個屏幕。點擊方向按鈕會進行相關方向的切屏。例程中切屏方式是 SlideTransition 模式。下面我們解讀一下相關代碼,再對Transition 模式進行修改。


圖3.TouchGFX Designer Transition Example 設計界面


2.3. 例程代碼解讀與切屏模式修改


2.3.1. 關鍵代碼流程


切屏操作是由點擊按鈕觸發(fā)的,我們以右向按鈕 為例,一步步查看調用過程。首先我們可以確定當前屏幕是 MainView 類,MainView 繼承自 MainViewBase,該 MainViewBase 由Designer 自動生成。它已經包含了四個按鈕、一個背景框和一個背景圖片。按鈕點擊的處理函數為 buttonCallbackHandler。詳細代碼如下:



我們再來看該按鈕處理函數,這里右向按鈕調用了 application 對象的gotoRightScreenSlideTransitionEast 函數:



在 FrontendApplicationBase 中,gotoRightScreenSlideTransitionEast 接口通過transitionCallback 跳轉到 gotoRightScreenSlideTransitionEastImpl 函數。具體過程,首先application 事務處理過程中會調用 handlePendingScreenTransition,再轉至函數evaluatePendingScreenTransition,經 transitionCallback 完成對函數gotoRightScreenSlideTransitionEastImpl 的調用(更多的關于 Callback 的介紹請參閱相關文檔或 LAT)。如下圖圖 4 所示:


圖4.Transition Callback 的應用過程


具體代碼如下:



函數 gotoRightScreenSlideTransitionEastImpl 中調用了屏幕切換的關鍵模板函數makeTransition。


2.3.2. 模板函數 makeTransition


下面我們來看一看實現屏幕切換功能的關鍵模板函數 makeTransition。該函數在MVPApplication.hpp 中,源碼如下:



我們知道 TouchGFX 應用架構是 MVP 架構(這里不做過多介紹,需要了解的客戶請參考相關文檔),這里的 makeTransition 函數將 TouchGFX 應用中的 View&Presenter 和 model 綁定,并與 transition 聯(lián)系在一起,進而實現切屏功能。具體來說,首先 prepareTransition 函數對當前的 View/Presenter/Transition 進行銷毀;然后以模板參數 touchgfx::SlideTransition(用戶指定的方向)創(chuàng)建 Transition 派生類對象;以模板參數 ScreenType 類進行新 View 的創(chuàng)建(這里是 RighView);再以模板參數 PresenterType 類創(chuàng)建新的 Presenter(這里是RightPresenter)。將 Presenter 與 Model 綁定并將 View 與 Presenter 綁定(以保證可以正常調用各自接口,實現 MVP 架構功能);最后調用 finalizeTransition 函數,在 finalizeTransition 中進行新 View 的 SetupScreen,綁定新 Transition, 并激活新 Transition。


2.3.3. Transition 動畫效果的實現


具體的 Transition 動畫效果是在 Transition 派生類的 handleTickEvent 中實現的。我們例程中是 SlideTransition,其 handleTickEvent 中實現了滑動的效果。將原有屏幕的快照,在滑動方向的來向上與新 View 的快照連接,一起沿滑動方向移動,實現動畫效果。具體請見下面handleTickEvent 函數源碼:



2.3.4. Transition 風格的修改


模板配合 C++編程給予了 TouchGFX 框架極大的簡潔性和適配的便利性,對于切屏風格的增加或修改也是非常的簡便。客戶甚至不需要理解前面介紹的 Transition 具體原理,也能夠非常方便地修改切屏模式。使用 TouchGFX Designer,僅需點擊幾下鼠標即可實現。如下圖圖 5 所示,這里我們在關聯(lián)右向按鈕的 Interaction 中,將 Transition 模式改為了 Wipe 模式,編譯運行即可查看效果。


圖5.TouchGFX Designer Transition 模式的修改


03

小結


TouchGFX 是針對 STM32 產品的專用優(yōu)秀界面設計工具,功能強大易用。本文對屏幕切換功能進行了簡介,從基本示例“Transition Example”出發(fā),對切屏部分的源代碼進行了淺析,并介紹了如何使用 TouchGFX Designer 實現切屏模式的修改。希望本文能夠幫助客戶更深入地理解 STM32 TouchGFX。



完整內容請點擊“閱讀原文”下載原文檔。



原文標題:實戰(zhàn)經驗 | STM32GUI TouchGFX 屏幕切換功能簡介

文章出處:【微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6030

    文章

    44489

    瀏覽量

    631982
  • STM32
    +關注

    關注

    2264

    文章

    10854

    瀏覽量

    354296

原文標題:實戰(zhàn)經驗 | STM32GUI TouchGFX 屏幕切換功能簡介

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    TouchGFX 中 MCU 負載的計算過程介紹

    TouchGFX Desinger 下載的 TBS(TouchGFX Board Setup)大都帶有 MCU 的 負載計算功能,那么如何在自己的板子上增加 MCU 負載計算功能
    的頭像 發(fā)表于 05-24 13:24 ?421次閱讀
    <b class='flag-5'>TouchGFX</b> 中 MCU 負載的計算過程介紹

    請問STM32小容量的芯片能應用GUI嗎?

    STM32F0系列的芯片能用上GUI嗎,不知道像emWIN,TouchGFX對于FLASH有什么具體要求。
    發(fā)表于 04-24 06:19

    TouchGFX G0設備如何使用物理按鍵切換頁面?

    我使用STM32 G070RBT6 + 320*240的SPI屏幕(無觸摸),想通過按鍵切換頁面,在TouchGFX中可以設置使用外部按鍵按下作為觸發(fā),但是我不知道我程序中在哪里告訴
    發(fā)表于 04-09 07:13

    STM32L476使用TouchGfx,編譯會爆空間的原因?

    現在工作需要在STM32L476上使用TouchGFX。 現在Flash 內部是1M,RAM是128KB---屏幕分辨率是:800x480, 現在用cubeMX選擇這樣的分辨率,編譯會爆空間。
    發(fā)表于 04-09 06:38

    STM32L4R9移植touchgfx GUI顯示控件異常花屏的原因?

    移植touchgfx工程后 (1)開啟GUI出顯示異常,問題不能確定,懷疑是dma2d送數據不正確,目前未找到touchgfx的填充界面函數在那里??? (2)關閉GUI顯示函數,直接
    發(fā)表于 04-07 08:30

    TouchGFX+STM32CUBEMX+STM32F429IGT6運行異常的原因?怎么解決?

    使用touchgfx+stm32CubeMx生成適合正點原子阿波羅開發(fā)板的工程文件不能正常運行。首先使用cube生成了LTDC+DMA2D+FMC+FreeRTOS配置,正常點亮了屏幕??梢?/div>
    發(fā)表于 03-25 06:38

    STM32H5 DA證書鏈實戰(zhàn)經驗

    之前我們已經講過了如何通過 DA 認證來回退芯片產品狀態(tài),或者重新打開調試口,這樣開發(fā)人員在芯片為 Closed 狀態(tài)下時仍可以調試芯片。
    的頭像 發(fā)表于 03-12 14:08 ?974次閱讀
    <b class='flag-5'>STM32</b>H5 DA證書鏈<b class='flag-5'>實戰(zhàn)經驗</b>

    基于STM32U5片內溫度傳感器正確測算溫度實戰(zhàn)經驗分享

    STM32 在內部都集成了一個溫度傳感器,STM32U5 也不例外。這個位于晶圓上的溫度傳感器雖然不太適合用來測量外部環(huán)境的溫度,但是用于監(jiān)控晶圓上的溫度還是挺好的,以防止芯片過溫運行。
    的頭像 發(fā)表于 02-22 17:27 ?3888次閱讀
    基于<b class='flag-5'>STM32</b>U5片內溫度傳感器正確測算溫度<b class='flag-5'>實戰(zhàn)經驗</b>分享

    盤點那些硬件+項目學習套件:STM32U5單片機開發(fā)板及入門常見問題解答

    實戰(zhàn)經驗; 優(yōu)勢4: ST官方合作,可考中國電子學會《嵌入式系統(tǒng)設計中級工程師認證》證書,也是2024全國嵌入式大賽ST賽道,ST官方重點推薦的競賽MCU芯片選型。 ▋STM32學習建議 1.初學者,不要
    發(fā)表于 02-19 16:59

    BlueNRG系列協(xié)處理器實戰(zhàn)經驗簡介

    BlueNRG 系列芯片從最早的一代 BlueNRG-MS 開始就支持協(xié)處理器模式。
    的頭像 發(fā)表于 01-05 18:16 ?1721次閱讀
    BlueNRG系列協(xié)處理器<b class='flag-5'>實戰(zhàn)經驗</b><b class='flag-5'>簡介</b>

    實戰(zhàn)經驗 | 如何在用戶應用中開啟 LoRa CAD

    STM32WL LoRa 發(fā)送數據,或做相應的操作。為了降低功耗,STM32WL不能一直處于接收狀態(tài),這樣功耗會很高。我們可以開啟 LoRa CAD(信道活動檢測)功能STM32W
    的頭像 發(fā)表于 12-26 17:45 ?1364次閱讀
    <b class='flag-5'>實戰(zhàn)經驗</b> | 如何在用戶應用中開啟 LoRa CAD

    實戰(zhàn)經驗 | STM32G474 中 Triggered-half 模式的實現

    關鍵詞:Triggered-half,Interleave 目錄預覽 1、引言 2、Triggered-half 模式介紹 3、應用實例 4、小結 01 引言 STM32 G474 中包含了針對
    的頭像 發(fā)表于 12-11 18:15 ?1628次閱讀
    <b class='flag-5'>實戰(zhàn)經驗</b> | <b class='flag-5'>STM32</b>G474 中 Triggered-half 模式的實現

    實戰(zhàn)經驗 | STM32U5 ADC 自校準不成功的問題分析

    關鍵詞:STM32U5,ADC 目錄預覽 1、引言 2、問題 3、問題解決 4、小結 01 引言 很多 STM32 系列中的 ADC 都帶有自校準的功能。它提供了一個自動校準的過程,用于驅動包括
    的頭像 發(fā)表于 12-10 16:45 ?1847次閱讀
    <b class='flag-5'>實戰(zhàn)經驗</b> | <b class='flag-5'>STM32</b>U5 ADC 自校準不成功的問題分析

    實戰(zhàn)經驗 | 移植 SBSFU 到 STM32G070 的過程

    使用 STM32G070RBT6 給海外用戶開發(fā)產品,由于當地新需求,產品需要增加安全啟動的功能。但是由于 X-Cube-SBSFU 包提供的示例中,只有基于 STM32G071 的示例??蛻粢虼嗽儐栐撛趺匆浦病1疚膶?/div>
    的頭像 發(fā)表于 12-08 18:20 ?814次閱讀

    實戰(zhàn)經驗 | TouchGFX 控件附加 ClickListener 功能的方法介紹

    Designer 中的 Mixin 功能,從基礎示例 Button Example 出發(fā),為文本框控件添加 ClickListener (Mixin 功能中的一項),并對源代碼進行簡單剖析。期望能幫助客戶更深入地理解 STM32
    的頭像 發(fā)表于 11-17 17:40 ?1259次閱讀