概述
TouchGFX是一種先進(jìn)的軟件框架,用于開發(fā)嵌入式圖形界面(GUI)。借助其特性,開發(fā)者可以在STM32連接到單色OLED顯示器,并使用PNG文件和Touch GFX引擎在屏幕上顯示圖像。
最近在弄ST的課程,需要樣片的可以加群申請(qǐng):615061293。
參考文檔:https://support.touchgfx.com/4.18/zh-CN/docs/introduction/welcome
視頻教學(xué)
https://www.bilibili.com/video/BV17m4y1t7RT/
樣品申請(qǐng)
https://www.wjx.top/vm/mSVawPF.aspx
完整代碼下載
https://download.csdn.net/download/qq_24312945/87806820
生成例程
使用STM32CUBEMX生成例程,這里使用MCU是STM32G030C8T6。 使用的OLED的IIC接口是PB8和PB9。
配置IIC。
配置時(shí)鐘樹
配置時(shí)鐘為64M。
開啟調(diào)試接口
移植SSD1306
源碼使用的是GitHub上面的stm32-ssd1306源碼。
[https://github.com/afiskon/stm32-ssd1306]
git clone的地址為:
[https://github.com/afiskon/stm32-ssd1306.git]
下載完畢之后,需要的文件如下所示。
將這幾個(gè)文件分別添加到對(duì)應(yīng)的文件夾中。
將這幾個(gè)文件分別添加到對(duì)應(yīng)的文件夾中。
修改ssd1306_conf_template.h文件中的定義,選取實(shí)際所使用的MCU和接口(IIC或者SPI,以及對(duì)應(yīng)通道)。
在main.c中添加頭文件。
/* USER CODE BEGIN Includes */
#include "ssd1306.h"
#include "ssd1306_tests.h"
/* USER CODE END Includes */
在main.c中添加SSD1306初始化函數(shù)和demo演示函數(shù)。
/* USER CODE BEGIN 2 */
ssd1306_Init();
ssd1306_TestDrawBitmap();
/* USER CODE END 2 */
在ssd1306_fonts.h文件中使用的頭文件為ssd1306_conf.h,所以需要修改ssd1306_conf_template.h文件名稱。
右鍵重命名。
修改函數(shù)為ssd1306_conf.h。
配置調(diào)試
點(diǎn)擊小蟲子的下拉箭頭,選擇Debug Configurations
這里我使用JLink進(jìn)行調(diào)試。
將程序下載進(jìn)去之后,可以看到OLED正常的進(jìn)行顯示。
開啟TouchGFX
在STM32CUBEMX中安裝X-CUBE-TOUCHGFX軟件包。
對(duì)X-CUBE-TOUCHGFX進(jìn)行配置。
對(duì)軟件包進(jìn)行配置,打開X-CUBE-TOUCHGFX,可以看到需要配置CRC。
開啟CRC。
配置屏幕參數(shù)由于使用的是單色OLED,所以設(shè)置為BW。
設(shè)置屏幕刷新率
設(shè)置屏幕刷新率為20Hz,定時(shí)器計(jì)算函數(shù)如下所示。
使用一個(gè)定時(shí)器來(lái)產(chǎn)生一個(gè)20Hz的中斷來(lái)刷新屏幕。 PSC配置為640-1,ARR配置為5000-1。
開啟中斷。
配置TouchGFX
重新生成工程之后,可以在STM32CUBEIDE中開啟TouchGFX。
開啟完畢之后,界面如下所示。
由于所使用的OLED是單色的,那么配置底色為黑色的。 添加Box組件。
選擇顏色為黑色。
所需的png圖片可以從下面網(wǎng)站中進(jìn)行下載。
[https://iconsdb.com/]
在TouchGFX添加圖片組件。
選擇對(duì)應(yīng)的圖片。
調(diào)整相應(yīng)的位置。
生成代碼。
代碼生成成功。
TouchGFX代碼配置
在TouchGFXConfiguration.cpp中,可以看到已經(jīng)導(dǎo)入了LCD驅(qū)動(dòng)文件。
TouchGFXHAL.cpp定義TouchGFXGeneratedHAL的子類TouchGFXHAL。 OSWrappers.cpp(OSAL) 包含與TouchGFX Engine同步所需的功能,所以需要在TouchGFXHAL.cpp引入頭文件。
#include "ssd1306.h"
#include < touchgfx/hal/OSWrappers.hpp >
需要將數(shù)據(jù)從MCU緩沖區(qū)傳輸?shù)斤@示緩沖區(qū)中。
const unsigned char* bitmap = (const unsigned char*) getClientFrameBuffer();
ssd1306_Fill(Black);
ssd1306_DrawBitmap(0, 0, bitmap, 128, 64, White);
ssd1306_UpdateScreen();
在最后添加一個(gè)函數(shù),函數(shù)將被定時(shí)器每秒調(diào)用20次,用來(lái)刷新屏幕。
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函數(shù)中,注釋掉剛剛的測(cè)試代碼。
開啟定時(shí)器中斷。
HAL_TIM_Base_Start_IT(&htim17);
定義溢出事件回調(diào)函數(shù)。
extern void touchgfxSignalVSync(void);
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim- >Instance == TIM6)
{
touchgfxSignalVSync();
}
}
編譯
編譯過(guò)程中如果出現(xiàn)Flash不夠,可以修改優(yōu)化等級(jí)。
選擇Project->Properties
選擇合適的優(yōu)化等級(jí)。
實(shí)際效果
程序下載進(jìn)去之后,OLED顯示如下所示。
審核編輯:湯梓紅
-
OLED
+關(guān)注
關(guān)注
119文章
6253瀏覽量
226538 -
IIC接口
+關(guān)注
關(guān)注
0文章
23瀏覽量
11828 -
TouchGFX
+關(guān)注
關(guān)注
1文章
42瀏覽量
13542
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
如何添加觸摸屏驅(qū)動(dòng)到TouchGFX中?
如何使用CubeMX創(chuàng)建TouchGFX工程
使用RT-Thread Studio開發(fā)TouchGFX軟件庫(kù)的原理及其步驟
TouchGFX代碼框架以及如何添加用戶代碼

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

TouchGFX在STM32F429IGT6上的移植(RT-Thread版本)

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

STM32 TouchGFX部分控件功能測(cè)試
TouchGFX界面開發(fā):TouchGFX軟件安裝

評(píng)論