概述
TouchGFX是一種先進的軟件框架,用于開發嵌入式圖形界面(GUI)。借助其特性,開發者可以在STM32連接到單色OLED顯示器,并使用PNG文件和Touch GFX引擎在屏幕上顯示圖像。
最近在弄ST的課程,需要樣片的可以加群申請:615061293。
參考文檔:https://support.touchgfx.com/4.18/zh-CN/docs/introduction/welcome
視頻教學
https://www.bilibili.com/video/BV17m4y1t7RT/
樣品申請
https://www.wjx.top/vm/mSVawPF.aspx
完整代碼下載
https://download.csdn.net/download/qq_24312945/87806820
生成例程
使用STM32CUBEMX生成例程,這里使用MCU是STM32G030C8T6。 使用的OLED的IIC接口是PB8和PB9。
配置IIC。
配置時鐘樹
配置時鐘為64M。
開啟調試接口
移植SSD1306
源碼使用的是GitHub上面的stm32-ssd1306源碼。
[https://github.com/afiskon/stm32-ssd1306]
git clone的地址為:
[https://github.com/afiskon/stm32-ssd1306.git]
下載完畢之后,需要的文件如下所示。
將這幾個文件分別添加到對應的文件夾中。
將這幾個文件分別添加到對應的文件夾中。
修改ssd1306_conf_template.h文件中的定義,選取實際所使用的MCU和接口(IIC或者SPI,以及對應通道)。
在main.c中添加頭文件。
/* USER CODE BEGIN Includes */
#include "ssd1306.h"
#include "ssd1306_tests.h"
/* USER CODE END Includes */
在main.c中添加SSD1306初始化函數和demo演示函數。
/* USER CODE BEGIN 2 */
ssd1306_Init();
ssd1306_TestDrawBitmap();
/* USER CODE END 2 */
在ssd1306_fonts.h文件中使用的頭文件為ssd1306_conf.h,所以需要修改ssd1306_conf_template.h文件名稱。
右鍵重命名。
修改函數為ssd1306_conf.h。
配置調試
點擊小蟲子的下拉箭頭,選擇Debug Configurations
這里我使用JLink進行調試。
將程序下載進去之后,可以看到OLED正常的進行顯示。
開啟TouchGFX
在STM32CUBEMX中安裝X-CUBE-TOUCHGFX軟件包。
對X-CUBE-TOUCHGFX進行配置。
對軟件包進行配置,打開X-CUBE-TOUCHGFX,可以看到需要配置CRC。
開啟CRC。
配置屏幕參數由于使用的是單色OLED,所以設置為BW。
設置屏幕刷新率
設置屏幕刷新率為20Hz,定時器計算函數如下所示。
使用一個定時器來產生一個20Hz的中斷來刷新屏幕。 PSC配置為640-1,ARR配置為5000-1。
開啟中斷。
配置TouchGFX
重新生成工程之后,可以在STM32CUBEIDE中開啟TouchGFX。
開啟完畢之后,界面如下所示。
由于所使用的OLED是單色的,那么配置底色為黑色的。 添加Box組件。
選擇顏色為黑色。
所需的png圖片可以從下面網站中進行下載。
[https://iconsdb.com/]
在TouchGFX添加圖片組件。
選擇對應的圖片。
調整相應的位置。
生成代碼。
代碼生成成功。
TouchGFX代碼配置
在TouchGFXConfiguration.cpp中,可以看到已經導入了LCD驅動文件。
TouchGFXHAL.cpp定義TouchGFXGeneratedHAL的子類TouchGFXHAL。 OSWrappers.cpp(OSAL) 包含與TouchGFX Engine同步所需的功能,所以需要在TouchGFXHAL.cpp引入頭文件。
#include "ssd1306.h"
#include < touchgfx/hal/OSWrappers.hpp >
需要將數據從MCU緩沖區傳輸到顯示緩沖區中。
const unsigned char* bitmap = (const unsigned char*) getClientFrameBuffer();
ssd1306_Fill(Black);
ssd1306_DrawBitmap(0, 0, bitmap, 128, 64, White);
ssd1306_UpdateScreen();
在最后添加一個函數,函數將被定時器每秒調用20次,用來刷新屏幕。
extern "C"
void touchgfxSignalVSync(void)
{
/* VSync has occurred, increment TouchGFX engine vsync counter */
touchgfx::HAL::getInstance()- >vSync();
/* VSync has occurred, signal TouchGFX engine */
touchgfx::OSWrappers::signalVSync();
}
在main.c函數中,注釋掉剛剛的測試代碼。
開啟定時器中斷。
HAL_TIM_Base_Start_IT(&htim17);
定義溢出事件回調函數。
extern void touchgfxSignalVSync(void);
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim- >Instance == TIM6)
{
touchgfxSignalVSync();
}
}
編譯
編譯過程中如果出現Flash不夠,可以修改優化等級。
選擇Project->Properties
選擇合適的優化等級。
實際效果
程序下載進去之后,OLED顯示如下所示。
審核編輯:湯梓紅
-
OLED
+關注
關注
119文章
6219瀏覽量
224818 -
IIC接口
+關注
關注
0文章
23瀏覽量
11735 -
TouchGFX
+關注
關注
1文章
42瀏覽量
13283
發布評論請先 登錄
相關推薦
如何添加觸摸屏驅動到TouchGFX中?
如何使用CubeMX創建TouchGFX工程
使用RT-Thread Studio開發TouchGFX軟件庫的原理及其步驟
TouchGFX升級至V4.12,每秒幀數從9幀升級至60幀 更新TouchGFX Suite
TouchGFX代碼框架以及如何添加用戶代碼
![<b class='flag-5'>TouchGFX</b>代碼框架以及如何添加用戶代碼](https://file.elecfans.com/web1/M00/DA/DD/o4YBAGAFALyAXolWAAE0yFQU-bs844.png)
TouchGFX中Callback模板實現原理
![<b class='flag-5'>TouchGFX</b>中Callback模板實現原理](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
TouchGFX在STM32F429IGT6上的移植(RT-Thread版本)
![<b class='flag-5'>TouchGFX</b>在STM32F429IGT6上的移植(RT-Thread版本)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
touchGFX手環滾動菜單的實現(三)
![<b class='flag-5'>touchGFX</b>手環滾動菜單的實現(三)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
TouchGFX界面開發:TouchGFX軟件安裝
![<b class='flag-5'>TouchGFX</b>界面<b class='flag-5'>開發</b>:<b class='flag-5'>TouchGFX</b>軟件安裝](https://file1.elecfans.com/web2/M00/88/C9/wKgZomR0CXGAd6DnAAA5TAE9SEo180.png)
評論