TouchGFX開發(fā)(3)----使用TouchGFX配置IIC接口OLED
概述
TouchGFX是一種先進(jìn)的軟件框架,用于開發(fā)嵌入式圖形界面(GUI)。借助其特性,開發(fā)者可以在STM32連接到單色OLED顯示器,并使用PNG文件和Touch GFX引擎在屏幕上顯示圖像。 最近在弄ST的課程,需要樣片的可以加群申請:615061293。 參考文檔:https://support.touchgfx.com/4.18/zh-CN/docs/introduction/welcome
視頻教學(xué)
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。

配置時(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中添加頭文件。

?在main.c中添加SSD1306初始化函數(shù)和demo演示函數(shù)。

?在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í)器來產(chǎn)生一個(gè)20Hz的中斷來刷新屏幕。 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引入頭文件。

?需要將數(shù)據(jù)從MCU緩沖區(qū)傳輸?shù)斤@示緩沖區(qū)中。
??

在最后添加一個(gè)函數(shù),函數(shù)將被定時(shí)器每秒調(diào)用20次,用來刷新屏幕。
在main.c函數(shù)中,注釋掉剛剛的測試代碼。?

開啟定時(shí)器中斷。

?定義溢出事件回調(diào)函數(shù)。

編譯
編譯過程中如果出現(xiàn)Flash不夠,可以修改優(yōu)化等級(jí)。?

選擇Project->Properties?

選擇合適的優(yōu)化等級(jí)。?

實(shí)際效果
程序下載進(jìn)去之后,OLED顯示如下所示。?
