最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

STM32移植U8g2圖形庫(kù)——玩轉(zhuǎn)OLED顯示

2022-03-28 23:19 作者:碼農(nóng)愛(ài)學(xué)習(xí)-B站  | 我要投稿

之前的文章,介紹過(guò)ESP8266在Arduino IDE環(huán)境中使用U8g2庫(kù),實(shí)現(xiàn)OLED上的各種圖形顯示。

【實(shí)例演示】ESP8266+U8g2庫(kù),玩轉(zhuǎn)OLED顯示

本篇,介紹一下U8g2庫(kù)如何移植到STM32上,進(jìn)行OLED的圖形顯示。

本次的實(shí)驗(yàn)硬件為:

  • STM32:型號(hào)為最常見(jiàn)的STM32F103C8T6

  • OLED:0.96寸OLED,IIC接口(如果是SPI接口,文中也有對(duì)應(yīng)的修改介紹)

1 U8g2簡(jiǎn)介

U8g2 是一個(gè)用于嵌入式設(shè)備的單色圖形庫(kù)。U8g2支持單色OLED和LCD,并支持如SSD1306等多種類型的OLED驅(qū)動(dòng)。

U8g2源碼的開(kāi)源庫(kù)地址:https://github.com/olikraus/u8g2

2 移植步驟

首先下載U8g2的源碼,因?yàn)镾TM32主要是使用C語(yǔ)言編程,所以只需關(guān)注源碼中的C源碼部分,即csrc文件夾下的文件。

2.1 精簡(jiǎn)c源碼

U8g2支持多種顯示驅(qū)動(dòng)的屏幕,因?yàn)樵创a中也包含了各個(gè)驅(qū)動(dòng)對(duì)應(yīng)的文件,為了減小整個(gè)工程的代碼體積,在移植U8g2時(shí),可以刪除一些無(wú)用的文件。

2.1.1 去掉無(wú)用的驅(qū)動(dòng)文件

這些驅(qū)動(dòng)文件通常是u8x8_d_xxx.c,xxx包括驅(qū)動(dòng)的型號(hào)和屏幕分辨率。ssd1306驅(qū)動(dòng)芯片的OLED,使用u8x8_ssd1306_128x64_noname.c這個(gè)文件,其它的屏幕驅(qū)動(dòng)和分辨率的文件可以刪掉。

2.1.2 精簡(jiǎn)u8g2_d_setup.c

由于我的OLED是IIC接口,只留一個(gè)本次要用到的u8g2_Setup_ssd1306_i2c_128x64_noname_f就好(如果是SPI接口,需要使用u8g2_Setup_ssd1306_128x64_noname_f這個(gè)函數(shù)),其它的可以刪掉或注釋掉。

注意,與這個(gè)函數(shù)看起來(lái)十分相似的函數(shù)的有:

  • u8g2_Setup_ssd1306_128x64_noname_1

  • u8g2_Setup_ssd1306_128x64_noname_2

  • u8g2_Setup_ssd1306_128x64_noname_f

  • u8g2_Setup_ssd1306_i2c_128x64_noname_1

  • u8g2_Setup_ssd1306_i2c_128x64_noname_2

  • u8g2_Setup_ssd1306_i2c_128x64_noname_f

其中,前面3個(gè),是給SPI接口的OLED用的,函數(shù)最后的數(shù)字或字母,代表顯示時(shí)的buf大?。?/p>

  • 1:128字節(jié)

  • 2:256字節(jié)

  • f1024字節(jié)

2.1.3 精簡(jiǎn)u8g2_d_memory.c

由于用到的u8g2_Setup_ssd1306_i2c_128x64_noname_f函數(shù)中,只調(diào)用了u8g2_m_16_8_f這個(gè)函數(shù),所以留下這個(gè)函數(shù),其它的函數(shù)一定要?jiǎng)h掉或注釋掉,否則編譯時(shí)很可能會(huì)提示內(nèi)存不足?。?!

2.2 編寫(xiě)移植函數(shù)

精簡(jiǎn)源碼之后,還需要編寫(xiě)如下的配置函數(shù)。

2.2.1 GPIO初始化

對(duì)OLED用到的IIC接口進(jìn)行GPIO的初始化配置:

如果是SPI接口,則初始化對(duì)應(yīng)的SPI接口即可。

2.2.2 u8x8_gpio_and_delay

這個(gè)函數(shù)也需要自己寫(xiě),主要的修改包括:

  • 賦予U8g2相應(yīng)的延時(shí)函數(shù),比如下面的delay_ms和delay_us

  • 為U8g2提供IIC接口的高低電平調(diào)用:

    • U8x8_MSG_GPIO_I2C_CLOCK:IIC的SCL

    • U8x8_MSG_GPIO_I2C_DATA:IIC的SDA

如果是SPI接口,可以參考如下寫(xiě)法:

可以看出,對(duì)于IIC與SPI接口,只有分別進(jìn)行對(duì)應(yīng)的配置即可。

2.2.3 u8g2Init

U8g2的初始化,需要調(diào)用下面這個(gè)u8g2_Setup_ssd1306_128x64_noname_f函數(shù),該函數(shù)的4個(gè)參數(shù)含義:

  • u8g2:傳入的U8g2結(jié)構(gòu)體

  • U8G2_R0:默認(rèn)使用U8G2_R0即可(用于配置屏幕是否要旋轉(zhuǎn))

  • u8x8_byte_sw_i2c:使用軟件IIC驅(qū)動(dòng),該函數(shù)由U8g2源碼提供

  • u8x8_gpio_and_delay:就是上面我們寫(xiě)的配置函數(shù)

2.2.4 顯示測(cè)試函數(shù)

使用U8g2提供的測(cè)試函數(shù),用于查看顯示效果

2.3 源碼加入到MDK編譯

在一個(gè)STM32的基礎(chǔ)例程上進(jìn)行修改。

2.3.1添加u8g2源碼到工程

左側(cè)工程目錄添加U8g2源碼,然后再添加U8g2的頭文件搜尋目錄,如下:

2.3.2 主函數(shù)

主函數(shù)中,首先是IIC的初始化和U8g2的初始化,然后就可以測(cè)試U8g2的圖形顯示功能了:


3 測(cè)試效果

4 總結(jié)

本篇介紹了如何將U8g2圖形庫(kù)移植到STM32中,其中主要的修改包括:

  • 精簡(jiǎn)源碼中的u8g2_d_setup.c和u8g2_d_memory.c

  • OLED所用IIC接口的GPIO初始化

  • 編寫(xiě)u8x8_gpio_and_delay和u8g2Init

其中,u8g2_d_memory.c文件一定要去掉無(wú)用的函數(shù),否則編譯時(shí)會(huì)提示內(nèi)存不足;對(duì)于SPI接口的OLED,參考IIC接口進(jìn)行類似的修改即可。



STM32移植U8g2圖形庫(kù)——玩轉(zhuǎn)OLED顯示的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
花莲市| 涟源市| 乌海市| 丹凤县| 囊谦县| 花莲县| 阳高县| 天峻县| 岫岩| 揭西县| 玉田县| 定边县| 武乡县| 鄂托克旗| 沙田区| 湘阴县| 金平| 耒阳市| 红河县| 景宁| 新宁县| 六盘水市| 阜平县| 富平县| 潞西市| 武威市| 东台市| 新余市| 宜春市| 乐陵市| 登封市| 驻马店市| 铜陵市| 武平县| 富阳市| 如东县| 克什克腾旗| 来凤县| 石城县| 筠连县| 永春县|