www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

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

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

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


這篇分享,結合屏幕,對這兩個LED進行控制。

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


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


然后,準備一張背景圖片:

圖片大小為480x480的,對應屏幕大小。


在TouchGFX中,進入到Images管理,添加圖片:


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


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


再給兩個按鈕,都設置好點擊調用:



設計過程中,隨時可以點擊右下角中間的按鈕,進行模擬測試:



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


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


項目目錄如下:


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

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


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


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

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


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

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

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


點擊后,調用該文件中定義的回調:
  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. }
復制代碼
在該回調中,通過判斷點擊來源,確定調用具體的處理邏輯函數。

根據界面的設置,需要在Screen1View.hpp中生命對應的邏輯處理函數:


然后在Screen1View.cpp中,編寫具體的實現:
  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藍燈亮
復制代碼


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

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



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

網友評論