一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

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

1.引言

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

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

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

TouchGFX 引擎通過 實(shí)例化了的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)的硬件部分實(shí)現(xiàn),要么在與 TouchGFX Engine 同步的 AL 部分實(shí)現(xiàn),典型的做法是通過 RTOS (OSAL)來實(shí)現(xiàn)。圖 2 總結(jié)了 TouchGFX AL 的主要職責(zé),其中有一項(xiàng)任務(wù)就是報(bào)告觸摸與物理按鈕事件,TouchGFX 將原始觸摸動(dòng)作轉(zhuǎn)換為具體的觸摸事件,并轉(zhuǎn)發(fā)給當(dāng)前活動(dòng)的 UI 元素。

wKgZomUD6OeAR704AAC8MW6X664199.png

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

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

3.1. STM32CubeMX 配置

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

wKgaomUD6OiAGHs9AAJRQc81jLg317.png

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

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

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

wKgaomUD6OmALemNAAC0MHB7G6A772.png

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

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

wKgZomUD6OuAKgbpAAF5WywBfOA014.png

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

wKgaomUD6O2AdWKHAAC9HngkZlg616.png

小結(jié)

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

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


審核編輯 黃宇

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

    關(guān)注

    1

    文章

    42

    瀏覽量

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

    關(guān)注

    2

    文章

    71

    瀏覽量

    12929
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

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

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

    touchgfx生成代碼報(bào)錯(cuò)怎么解決?

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

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

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

    TouchGFX為什么無法添加鏈接?

    我正在嘗試運(yùn)行 TouchGFX 教程的教程 2(因?yàn)槲沂切鲁蓡T,我無法添加鏈接,但它是 TouchGFX 版本 4 19 教程指南,教程 2)我已經(jīng)成功運(yùn)行到“第 4 步:
    發(fā)表于 12-07 06:45

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

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

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

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

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

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

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

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

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

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

    LPC4353 TouchGFX

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

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

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

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

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

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

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