1.引言
越來(lái)越多的智能設(shè)備會(huì)在 MCU 上實(shí)現(xiàn)圖形界面,而 TouchGFX 是專門(mén)用于 ST MCU上的圖形界面設(shè)計(jì)軟件,使圖形界面在 MCU 上能達(dá)到類似智能手機(jī)的顯示效果。TouchGFX 圖形引擎包括三部分:搜集、更新、渲染。其中在搜集階段,圖形引擎從外部環(huán)境收集事件,這些事件通常是觸摸和按鈕事件。TouchGFX 采樣并將事件傳遞到應(yīng)用程序,這樣原始觸摸動(dòng)作就被轉(zhuǎn)換為更具體的應(yīng)用程序的觸摸事件。例如,點(diǎn)擊(用戶在顯示屏上按下或松開(kāi)手指)、拖動(dòng)(用戶觸摸顯示屏并在顯示屏上移動(dòng)手指)、手勢(shì)(用戶向一個(gè)方向快速移動(dòng)手指,然后松開(kāi))等功能,這些操作都會(huì)被圖形引擎識(shí)別并轉(zhuǎn)發(fā)給當(dāng)前活動(dòng)的 UI 元素。
本文主要介紹 TouchGFX 從顯示器的觸摸控制器讀取觸摸坐標(biāo),并將其傳遞給應(yīng)用程序的方法及原理,使開(kāi)發(fā)者能夠很容易的在 TouchGFX 生成的代碼中添加觸摸功能。
2.TouchGFX 抽象層架構(gòu)
TouchGFX 引擎通過(guò) 實(shí)例化了的HAL子類來(lái)訪問(wèn) HAL。這些子類由 TouchGFX Generator生成,Generator 是創(chuàng)建抽象層的主要工具,可以生成反映 STM32CubeMX 配置的 HAL 部分,以及 CMSIS V1 或 V2 的 OSAL。通常 HAL 的架構(gòu)如下圖 1 所示。
TouchGFX 抽象層(Abstraction Layer,簡(jiǎn)稱 AL)具有一套特殊的職責(zé), 職責(zé)要么在AL (HAL)的硬件部分實(shí)現(xiàn),要么在與 TouchGFX Engine 同步的 AL 部分實(shí)現(xiàn),典型的做法是通過(guò) RTOS (OSAL)來(lái)實(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 元素。
3.觸摸功能實(shí)現(xiàn)步驟
要實(shí)現(xiàn)觸摸功能,首先需通過(guò) STM32CubeMX 正確配置觸摸控制器和 MCU,并添加相應(yīng)驅(qū)動(dòng)代碼,保證 MCU 通過(guò) 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 中的配置界面,開(kāi)發(fā)者需要根據(jù)觸摸控制器驅(qū)動(dòng)芯片進(jìn)行正確配置。
配置好 I2C 后,還需添加 I2C 的驅(qū)動(dòng)代碼,如果沒(méi)有用于觸摸控制器的驅(qū)動(dòng)代碼,則需要從頭開(kāi)始編寫(xiě)。STM32Cube 固件庫(kù)中提供了一些 I2C 通訊的驅(qū)動(dòng)程序,開(kāi)發(fā)者可以從中參考相關(guān)代碼進(jìn)行修改使用。根據(jù)觸摸控制器的數(shù)據(jù)手冊(cè),為確保通過(guò)讀取寄存器可以獲取觸摸坐標(biāo),首先要檢查的是觸摸控制器的 I2C 地址,然后讀取“設(shè)備 ID”寄存器,以進(jìn)行測(cè)試,然后測(cè)試是否可以從觸摸控制器接收到正確的 x 值和 y 值。
3.2. 在接口函數(shù)中添加實(shí)現(xiàn)代碼
在渲染新的一幀之前,TouchGFX 引擎從 TouchController 和 ButtonController 接口收集外部輸入。通過(guò)引擎將觸摸控制器的坐標(biāo)轉(zhuǎn)換為點(diǎn)擊、拖動(dòng)和手勢(shì)事件,并傳遞至應(yīng)用程序。一些觸摸控制器能夠報(bào)告多個(gè)觸摸點(diǎn),TouchGFX 不支持此功能,通常,只需選擇第一個(gè)觸摸點(diǎn)。
TouchGFX 引擎在收集輸入時(shí),引擎會(huì)調(diào)用 tc 對(duì)象的 sampleTouch()函數(shù)。TouchGFX Generator 會(huì)生成一個(gè) TouchController 類,并將接口函數(shù)定義為空。在STM32TouchController.hpp 中會(huì)聲明了 init()和 sampleTouch()兩個(gè)成員函數(shù),開(kāi)發(fā)者需要做的就是在 STM32TouchController.cpp 源文件中添加相應(yīng)的實(shí)現(xiàn)代碼,在 init()函數(shù)中添加觸摸控制器的初始化代碼,在 sampleTouch()函數(shù)中添加相應(yīng)實(shí)現(xiàn)代碼,將讀取的觸摸坐標(biāo)值分配給 x 和 y,并返回是否檢測(cè)到觸摸。
其中有多種實(shí)現(xiàn) sampleTouch()函數(shù)的方法:一種是在 sampleTouch()中輪詢,另一種是基于中斷實(shí)現(xiàn)。在 sampleTouch() 中輪詢:通過(guò)發(fā)送請(qǐng)求并輪詢結(jié)果,從硬件觸摸控制器(通常為 I2C) 讀取觸摸狀態(tài)和觸摸坐標(biāo),默認(rèn)情況下,該函數(shù)每個(gè) tick 時(shí)間被調(diào)用一次, 如下圖 5 所示。
基于中斷: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ù)通過(guò)消息隊(duì)列或全局變量提供給STM32TouchController。
小結(jié)
本文介紹了 TouchGFX 從顯示器的觸摸控制器讀取觸摸坐標(biāo),并將其傳遞給應(yīng)用程序的方法及原理。通過(guò) STM32CubeMX 來(lái)初始化 I2C 外設(shè),添加相應(yīng)的驅(qū)動(dòng)代碼,然后在STM32TouchController.cpp 源文件中實(shí)現(xiàn) init()和 sampleTouch()函數(shù),開(kāi)發(fā)者就能夠很容易的為 TouchGFX 工程添加觸摸功能。
原文標(biāo)題:工程師筆記|基于 TouchGFX 生成的代碼中添加觸摸功能的方法
文章出處:【微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
審核編輯:湯梓紅
-
ST
+關(guān)注
關(guān)注
32文章
1170瀏覽量
130153 -
觸摸
+關(guān)注
關(guān)注
8文章
199瀏覽量
64800 -
TouchGFX
+關(guān)注
關(guān)注
1文章
42瀏覽量
13592
原文標(biāo)題:工程師筆記|基于 TouchGFX 生成的代碼中添加觸摸功能的方法
文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
如何添加觸摸屏驅(qū)動(dòng)到TouchGFX中?
TouchGFX開(kāi)發(fā)(2)----觸摸屏幕組件點(diǎn)亮LED

將程序通過(guò)touchgfx designer下載到開(kāi)發(fā)板,無(wú)法實(shí)現(xiàn)觸摸功能怎么處理?
TouchGFX中Callback模板實(shí)現(xiàn)原理
如何在TouchGFX框架下實(shí)現(xiàn)校準(zhǔn)電阻觸摸屏?

TouchGFX中Callback模板實(shí)現(xiàn)原理

touchGFX手環(huán)滾動(dòng)菜單的實(shí)現(xiàn)(三)

使用TouchGFX二進(jìn)制翻譯(Binary Translation)功能實(shí)現(xiàn)動(dòng)態(tài)更新翻譯

STM32GUI使用TouchGFX二進(jìn)制字體(Binary Font)功能實(shí)現(xiàn)字體動(dòng)態(tài)更新

STM32GUI使用TouchGFX動(dòng)態(tài)圖片功能實(shí)現(xiàn)動(dòng)態(tài)更換表盤(pán)背景功能

評(píng)論