首頁 > 評測 > 【STM32U599J-DK測評】屏幕觸摸控制LED

【STM32U599J-DK測評】屏幕觸摸控制LED

  
  • 作者:
  • 來源:
  • [導(dǎo)讀]
  • 在STM32U599J-DK開發(fā)板上,有兩個用戶可以控制的LED: 8864365dd89d1a0a14.png (619.76 KB )下載附件2024-2-27 15:05 上傳 這篇分享,結(jié)合屏幕,對這兩個LED進(jìn)行控制。 一、TouchGFX界面設(shè)計 首先,在TouchG
在STM32U599J-DK開發(fā)板上,有兩個用戶可以控制的LED:


這篇分享,結(jié)合屏幕,對這兩個LED進(jìn)行控制。

一、TouchGFX界面設(shè)計
首先,在TouchGFX中,新建一個項目:


并選擇對應(yīng)的開發(fā)板:


然后,準(zhǔn)備一張背景圖片:

圖片大小為480x480的,對應(yīng)屏幕大小。


在TouchGFX中,進(jìn)入到Images管理,添加圖片:


然后,在Screen界面,添加這個圖片做為背景圖:


再添加兩個按鈕,用于控制兩個LED:


再給兩個按鈕,都設(shè)置好點擊調(diào)用:



設(shè)計過程中,隨時可以點擊右下角中間的按鈕,進(jìn)行模擬測試:



設(shè)計完成后,點擊右下角的左邊,生成代碼:


然后,點擊左則的 Files,即可打開生成后的代碼和項目目錄:


項目目錄如下:


其中包含了STM32CubeIDE和Keil等編輯器的項目文件。

二、代碼編寫
我使用STM32CubeIDE進(jìn)行開發(fā),直接進(jìn)入下面的目錄打開即可:


TouchGFX采用了類似MVC的MVP開發(fā)模式:


生成的界面處理部分代碼,和我們邏輯功能部分的代碼,是分離的。
通過這樣的方式,界面可以繼續(xù)修改,不對我們實際邏輯處理的代碼產(chǎn)生影響。

在生成的Screen1ViewBase.cpp文件中,有界面處理的實際代碼:


在這個文件的頭部,提示了,不要修改這個文件。除非,后續(xù)不再使用TouchGFX進(jìn)一步修改設(shè)計了。

上述代碼中,包含了按鍵調(diào)用的設(shè)置:
  1. toggleButton_red.setAction(buttonCallback);

  2. toggleButton_green.setAction(buttonCallback);
復(fù)制代碼


點擊后,調(diào)用該文件中定義的回調(diào):
  1. void Screen1ViewBase::buttonCallbackHandler(const touchgfx::AbstractButton& src)
  2. {
  3.     if (&src == &toggleButton_green)
  4.     {
  5.         //Interaction_green
  6.         //When toggleButton_green clicked call virtual function
  7.         //Call ToggleLED_green
  8.         ToggleLED_green();
  9.     }
  10.     if (&src == &toggleButton_red)
  11.     {
  12.         //Interaction_red
  13.         //When toggleButton_red clicked call virtual function
  14.         //Call ToggleLED_red
  15.         ToggleLED_red();
  16.     }
  17. }
復(fù)制代碼
在該回調(diào)中,通過判斷點擊來源,確定調(diào)用具體的處理邏輯函數(shù)。

根據(jù)界面的設(shè)置,需要在Screen1View.hpp中生命對應(yīng)的邏輯處理函數(shù):


然后在Screen1View.cpp中,編寫具體的實現(xiàn):
  1. #include <gui/screen1_screen/Screen1View.hpp>
  2. #ifndef SIMULATOR
  3. #include "stm32u5xx_hal.h"
  4. #endif

  5. Screen1View::Screen1View()
  6. {

  7. }

  8. void Screen1View::setupScreen()
  9. {
  10.     Screen1ViewBase::setupScreen();
  11. }

  12. void Screen1View::tearDownScreen()
  13. {
  14.     Screen1ViewBase::tearDownScreen();
  15. }

  16. void Screen1View::ToggleLED_green()
  17. {
  18. #ifndef SIMULATOR
  19.     if(toggleButton_green.getState())
  20.     {
  21.         HAL_GPIO_WritePin(GPIOE, GPIO_PIN_0, GPIO_PIN_RESET);//LD2藍(lán)燈亮
復(fù)制代碼


在上述代碼中,使用了 SIMULATOR 宏定義來判斷是否處于模擬器模式。如果不加處理,則使用模擬器運行,可能會出錯。

三、實際效果:
編寫完成后,編譯下載,最終效果如下:



  • 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!

網(wǎng)友評論

  • 聯(lián)系人:巧克力娃娃
  • 郵箱:board@21ic.com
  • 我要投稿
  • 歡迎入駐,開放投稿

熱門標(biāo)簽
項目外包 more+