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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于 TouchGFX 生成的代碼中添加觸摸功能的方法

jf_pJlTbmA9 ? 來源:STM32單片機 ? 作者:STM32單片機 ? 2023-10-27 09:21 ? 次閱讀

1.引言

越來越多的智能設(shè)備會在 MCU 上實現(xiàn)圖形界面,而 TouchGFX 是專門用于 ST MCU上的圖形界面設(shè)計軟件,使圖形界面在 MCU 上能達(dá)到類似智能手機的顯示效果。TouchGFX 圖形引擎包括三部分:搜集、更新、渲染。其中在搜集階段,圖形引擎從外部環(huán)境收集事件,這些事件通常是觸摸和按鈕事件。TouchGFX 采樣并將事件傳遞到應(yīng)用程序,這樣原始觸摸動作就被轉(zhuǎn)換為更具體的應(yīng)用程序的觸摸事件。例如,點擊(用戶在顯示屏上按下或松開手指)、拖動(用戶觸摸顯示屏并在顯示屏上移動手指)、手勢(用戶向一個方向快速移動手指,然后松開)等功能,這些操作都會被圖形引擎識別并轉(zhuǎn)發(fā)給當(dāng)前活動的 UI 元素。

本文主要介紹 TouchGFX 從顯示器的觸摸控制器讀取觸摸坐標(biāo),并將其傳遞給應(yīng)用程序的方法及原理,使開發(fā)者能夠很容易的在 TouchGFX 生成的代碼中添加觸摸功能。

2.TouchGFX 抽象層架構(gòu)

TouchGFX 引擎通過 實例化了的HAL子類來訪問 HAL。這些子類由 TouchGFX Generator生成,Generator 是創(chuàng)建抽象層的主要工具,可以生成反映 STM32CubeMX 配置的 HAL 部分,以及 CMSIS V1 或 V2 的 OSAL。通常 HAL 的架構(gòu)如下圖 1 所示。

wKgZomUD6OWAORsAAACq3MT8RD8126.png

TouchGFX 抽象層(Abstraction Layer,簡稱 AL)具有一套特殊的職責(zé), 職責(zé)要么在AL (HAL)的硬件部分實現(xiàn),要么在與 TouchGFX Engine 同步的 AL 部分實現(xiàn),典型的做法是通過 RTOS (OSAL)來實現(xiàn)。圖 2 總結(jié)了 TouchGFX AL 的主要職責(zé),其中有一項任務(wù)就是報告觸摸與物理按鈕事件,TouchGFX 將原始觸摸動作轉(zhuǎn)換為具體的觸摸事件,并轉(zhuǎn)發(fā)給當(dāng)前活動的 UI 元素。

wKgZomUD6OeAR704AAC8MW6X664199.png

3.觸摸功能實現(xiàn)步驟

要實現(xiàn)觸摸功能,首先需通過 STM32CubeMX 正確配置觸摸控制器和 MCU,并添加相應(yīng)驅(qū)動代碼,保證 MCU 通過 I2C 或其他接口從觸摸控制器讀取信息,最后在TouchController 接口函數(shù)中添加相應(yīng)的實現(xiàn)代碼。

3.1. STM32CubeMX 配置

為了實現(xiàn)與觸摸控制器的通訊,大多數(shù)觸摸控制器都會連接至 I2C 總線,因此需要在STM32CubeMX 中對 I2C 外設(shè)進行設(shè)置。許多 STM32 MCU 具有多個 I2C 外設(shè),因此需選擇正確的 I2C 進行配置,此外還需配置相關(guān) GPIO,圖 3 是 I2C 在 STM32CubeMX 中的配置界面,開發(fā)者需要根據(jù)觸摸控制器驅(qū)動芯片進行正確配置。

wKgaomUD6OiAGHs9AAJRQc81jLg317.png

配置好 I2C 后,還需添加 I2C 的驅(qū)動代碼,如果沒有用于觸摸控制器的驅(qū)動代碼,則需要從頭開始編寫。STM32Cube 固件庫中提供了一些 I2C 通訊的驅(qū)動程序,開發(fā)者可以從中參考相關(guān)代碼進行修改使用。根據(jù)觸摸控制器的數(shù)據(jù)手冊,為確保通過讀取寄存器可以獲取觸摸坐標(biāo),首先要檢查的是觸摸控制器的 I2C 地址,然后讀取“設(shè)備 ID”寄存器,以進行測試,然后測試是否可以從觸摸控制器接收到正確的 x 值和 y 值。

3.2. 在接口函數(shù)中添加實現(xiàn)代碼

在渲染新的一幀之前,TouchGFX 引擎從 TouchController 和 ButtonController 接口收集外部輸入。通過引擎將觸摸控制器的坐標(biāo)轉(zhuǎn)換為點擊、拖動和手勢事件,并傳遞至應(yīng)用程序。一些觸摸控制器能夠報告多個觸摸點,TouchGFX 不支持此功能,通常,只需選擇第一個觸摸點。

wKgaomUD6OmALemNAAC0MHB7G6A772.png

TouchGFX 引擎在收集輸入時,引擎會調(diào)用 tc 對象的 sampleTouch()函數(shù)。TouchGFX Generator 會生成一個 TouchController 類,并將接口函數(shù)定義為空。在STM32TouchController.hpp 中會聲明了 init()和 sampleTouch()兩個成員函數(shù),開發(fā)者需要做的就是在 STM32TouchController.cpp 源文件中添加相應(yīng)的實現(xiàn)代碼,在 init()函數(shù)中添加觸摸控制器的初始化代碼,在 sampleTouch()函數(shù)中添加相應(yīng)實現(xiàn)代碼,將讀取的觸摸坐標(biāo)值分配給 x 和 y,并返回是否檢測到觸摸。

其中有多種實現(xiàn) sampleTouch()函數(shù)的方法:一種是在 sampleTouch()中輪詢,另一種是基于中斷實現(xiàn)。在 sampleTouch() 中輪詢:通過發(fā)送請求并輪詢結(jié)果,從硬件觸摸控制器(通常為 I2C) 讀取觸摸狀態(tài)和觸摸坐標(biāo),默認(rèn)情況下,該函數(shù)每個 tick 時間被調(diào)用一次, 如下圖 5 所示。

wKgZomUD6OuAKgbpAAF5WywBfOA014.png

基于中斷:I2C 讀取命令由定時器定期啟動,或作為對觸摸硬件外部中斷的響應(yīng)而啟動。圖 6 中 STM32TouchController.cpp 代碼顯示了 sampleTouch 如何在 RTOS 的系統(tǒng)中實現(xiàn)。當(dāng)觸摸事件產(chǎn)生時,I2C 會產(chǎn)生中斷,并將數(shù)據(jù)通過消息隊列或全局變量提供給STM32TouchController。

wKgaomUD6O2AdWKHAAC9HngkZlg616.png

小結(jié)

本文介紹了 TouchGFX 從顯示器的觸摸控制器讀取觸摸坐標(biāo),并將其傳遞給應(yīng)用程序的方法及原理。通過 STM32CubeMX 來初始化 I2C 外設(shè),添加相應(yīng)的驅(qū)動代碼,然后在STM32TouchController.cpp 源文件中實現(xiàn) init()和 sampleTouch()函數(shù),開發(fā)者就能夠很容易的為 TouchGFX 工程添加觸摸功能。

來源:STM32單片機
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請聯(lián)系小編進行處理


審核編輯 黃宇

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

    關(guān)注

    1

    文章

    42

    瀏覽量

    13196
  • HAL
    HAL
    +關(guān)注

    關(guān)注

    2

    文章

    69

    瀏覽量

    12576
收藏 人收藏

    評論

    相關(guān)推薦

    TouchGFX實現(xiàn)觸摸功能方法及原理

    包括三部分:搜集、更新、渲染。其中在搜集階段,圖形引擎從外部環(huán)境收集事件,這些事件通常是觸摸和按鈕事件。TouchGFX 采樣并將事件傳遞到應(yīng)用程序,這樣原始觸摸動作就被轉(zhuǎn)換為更具體的應(yīng)用程序的
    的頭像 發(fā)表于 05-12 13:14 ?9136次閱讀

    如何添加觸摸屏驅(qū)動到TouchGFX?

    使用STM32CubeMX移植TouchGFX 一文中介紹了如何用TouchGFX點亮屏幕,但是此時屏幕還沒有觸摸功能。下面將介紹如何添加
    的頭像 發(fā)表于 10-09 14:41 ?1983次閱讀

    TouchGFX開發(fā)(2)----觸摸屏幕組件點亮LED

    了解如何使用 TouchGFX 配置屏幕,添加觸摸按鈕,并通過按鈕控制板載 LED 的狀態(tài)。
    的頭像 發(fā)表于 11-09 15:25 ?1153次閱讀
    <b class='flag-5'>TouchGFX</b>開發(fā)(2)----<b class='flag-5'>觸摸</b>屏幕組件點亮LED

    touchgfx生成代碼報錯怎么解決?

    touchgfx生成代碼報錯,怎么解
    發(fā)表于 06-03 08:51

    STM32F429I-DISC1的觸摸屏為什么無法使用TOUCHgfx生成代碼正常工作?

    簡單的按鈕按下項目,但是,在 STM32CUBEIDE 調(diào)試并加載此代碼后,無法在此觸摸屏上檢測到按下。我做了很多嘗試,包括將演示固件加載回我的電路板,以檢查是否由于電路板損壞而出現(xiàn)問題,但是當(dāng)我通過
    發(fā)表于 12-02 06:27

    TouchGFX為什么無法添加鏈接?

    我正在嘗試運行 TouchGFX 教程的教程 2(因為我是新成員,我無法添加鏈接,但它是 TouchGFX 版本 4 19 教程指南,教程 2)我已經(jīng)成功運行到“第 4 步:
    發(fā)表于 12-07 06:45

    TouchGFX沒有生成新屏幕的轉(zhuǎn)換聲明代碼是何原因

    ::gotoMainScreenNoTransition() )但是當(dāng)我嘗試再添加一個屏幕時,TouchGFX 沒有生成屏幕新屏幕的轉(zhuǎn)換聲明代碼,但它確實在 FrontendAppli
    發(fā)表于 12-21 06:42

    將圖形點擊觸發(fā)器添加到圖形和生成代碼中出錯如何解決呢?

    我將“圖形點擊觸發(fā)器”添加到圖形和生成代碼。在 MainView Base.cpp graph.setClick Action(graphClickCallback)
    發(fā)表于 01-06 06:42

    如何在不使用CubeMX的情況下將touchgfx項目文件添加到keil?

    Designer 生成的新文件。例如,當(dāng)我在 TouchGFX Designer 添加新屏幕并生成
    發(fā)表于 01-29 07:54

    如何在代碼touchgfx-open-repository添加二維碼小部件?

    我想動態(tài)生成二維碼,也想在運行時有時清除它。我得到了 github 鏈接并在我的項目中添加了這些文件。我仍然不確定如何稱呼它。您提到調(diào)用 qrCode.setXY(0,0
    發(fā)表于 02-08 07:44

    TouchGFXCallback模板實現(xiàn)原理

    interaction 給按鍵添加響應(yīng);或者創(chuàng)建多個界面,在界面間進行切換;這些功能由 designer 幫我們自動生成代碼實現(xiàn)了,那與
    發(fā)表于 09-11 06:16

    LPC4353 TouchGFX

    LPC4353 TouchGFX,觸摸代碼。
    發(fā)表于 03-17 08:18 ?15次下載

    TouchGFX代碼框架以及如何添加用戶代碼

    1. 摘要 本文檔主要介紹,TouchGFX代碼框架以及如何添加用戶代碼。 2. 準(zhǔn)備工作 可以正常運行的TouchGFX工程 3.
    的頭像 發(fā)表于 01-18 11:28 ?2611次閱讀
    <b class='flag-5'>TouchGFX</b><b class='flag-5'>代碼</b>框架以及如何<b class='flag-5'>添加</b>用戶<b class='flag-5'>代碼</b>

    如何在TouchGFX框架下實現(xiàn)校準(zhǔn)電阻觸摸屏?

    電阻觸摸屏 3. 校準(zhǔn)添加 電阻式觸摸屏在實際應(yīng)用必須進行校準(zhǔn),而校準(zhǔn)有多種方法,一種是使用Touc
    的頭像 發(fā)表于 01-21 10:14 ?4441次閱讀
    如何在<b class='flag-5'>TouchGFX</b>框架下實現(xiàn)校準(zhǔn)電阻<b class='flag-5'>觸摸</b>屏?

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

    Designer 的 Mixin 功能,從基礎(chǔ)示例 Button Example 出發(fā),為文本框控件添加 ClickListener (Mixin 功能
    的頭像 發(fā)表于 11-17 17:40 ?1259次閱讀