首頁 > 評測 > NUCLEO伴侶之Adafruit 1.8 TFT Shield

NUCLEO伴侶之Adafruit 1.8 TFT Shield

NUCLEO   Asafruit   TFT   shield   拓展板   顯示屏   
  • 作者:SATURN
  • 來源:21ic
  • [導(dǎo)讀]
  • NUCLEO板的擁護(hù)者喜歡NUCLEO的一絲不掛,喜歡啥外設(shè)就掛接啥外設(shè),非常靈活,加上低廉的價格,有人甚至稱之為神板!但是也有人稱NUCLEO為點(diǎn)燈板,因?yàn)槌薒ED,NUCLEO上啥也沒有,只有點(diǎn)燈!今天給大家來評測一款TFT顯示屏的拓展板,可以兼容NUCLEO。

ST的NUCLEO開發(fā)板讓ST粉絲亦愛亦恨。

NUCLEO板的擁護(hù)者喜歡NUCLEO的一絲不掛,喜歡啥外設(shè)就掛接啥外設(shè),非常靈活,加上低廉的價格,有人甚至稱之為神板!但是也有人稱NUCLEO為點(diǎn)燈板,因?yàn)槌薒ED,NUCLEO上啥也沒有,只有點(diǎn)燈!

NUCLEO做為核心板,確實(shí)只提供了核心功能,除了MCU及引出的GPIO,基本上就沒有其它的東西了。不過ST也考慮到了粉絲的感受。那就是雖然咱沒有提供板載外設(shè),但是提供的接口是標(biāo)準(zhǔn)化的,比如ST ZIO,就是兼容Arduino接口的,你想要外設(shè),手頭的Arduino擴(kuò)展板就可以派上用場!除了硬件,ST也在軟件生態(tài)上予以支持,在HAL固件庫里也提供了一些主流外設(shè)的支持,以BSP的形式提供給用戶。

不知大家有沒有注意到,不知從何時起,NUCLEO系列特別是144系列開發(fā)板,都悄悄加入了對Adafruit 1.8 TFT的支持,如果發(fā)現(xiàn)該擴(kuò)展板,則打開LCD顯示方面的功能;如果沒有檢測到擴(kuò)展板,則開始點(diǎn)燈。

Adafruit 1.8 TFT Shield(下文簡稱SHIELD)是Adafruit提供的一款兼容Arduino接口的擴(kuò)展板,提供了LCD顯示、SD卡存儲及游戲搖桿支持功能,因?yàn)槭茿rduino接口兼容,所以應(yīng)用面非常廣。

老規(guī)矩,先看熱鬧。

熟悉Adafruit產(chǎn)品的用戶會發(fā)現(xiàn),Adafruit似乎對黑色情有獨(dú)鐘,大量的產(chǎn)品都是以黑色為基調(diào)的,像近期推出的Feather系列,差不多都是黑色的PCB設(shè)計。SHIELD的包裝是黑色,在包裝盒的標(biāo)簽上可以看到產(chǎn)品型號。

包裝盒內(nèi)含擴(kuò)展板一塊,就是Adafruit 1.8 TFT Shield,另外還提供了排針x1,默認(rèn)沒有焊接,正式體驗(yàn)之前還得先把它焊接好。由于擴(kuò)展板上包含LCD,所以使用了厚厚的防震泡沫進(jìn)行了包裝。

擴(kuò)展板主要包含三大部件:LCD、SD卡接口及游戲搖桿。另外GPIO均有絲印標(biāo)注,這樣的好處一是可以非常清楚的連接其它需要擴(kuò)充的外設(shè),另外在與ST ZIO等非標(biāo)準(zhǔn)接口連接時更容易對準(zhǔn),不會接錯了。

擴(kuò)展板背面就沒有啥了。

擴(kuò)展板特寫圖,可以清楚看到Adafruit的LOGO及SD接口及游戲搖桿。

這是擴(kuò)展板與NUCLEO-H743ZI的合體照,安裝時注意擴(kuò)展板的D0接口與ST ZIO的D0接口對準(zhǔn)就行,NUCLEO也不再孤單了!

怎么能少了與Arduino的合影呢!其實(shí)這款擴(kuò)展板與Arduino連接在一起,更和諧。

如果說Adafruit 1.8 TFT Shield與NUCLEO 144的合照是小鳥依人的話,那么Adafruit 1.8 TFT Shield與Arduino的合照可以說是珠聯(lián)璧合。

在上電之前,先看下擴(kuò)展板的一些主要特性。擴(kuò)展板提供的主要功能如下

• 1.8 TFT顯示功能

• 物理尺寸為69x53.5mm

• 128x160分辨率,使用ST7735來驅(qū)動

• 四線SPI接口與MCU通信

• SD卡接口,使用SPI接口

• 兼容3.3/5V供電

• LCD最高消耗約100mA電流,SD卡工作電流在20-100mA之間,視讀寫情況而定

擴(kuò)展板整體結(jié)構(gòu)比較簡單,參考原理圖如下

可以看到電源做了5V處理,適用大部分開發(fā)板,無論是3.3V還是5V。

Adafruit也為擴(kuò)展板提供了軟件支持,主要包括兩個圖形庫,Adafruit GFX及ST7735庫,不過這兩個庫主要面向的是Arduino平臺,如果要在ST上使用圖形顯示功能的話,可以在ST的HAL庫里找到對應(yīng)的代碼,NUCLEO-H743ZI默認(rèn)的DEMO支持該擴(kuò)展板。

準(zhǔn)備上電,看看會是怎樣一種體驗(yàn)。

將擴(kuò)展板與NUCLEO-H743ZI連接,注意引腳的對齊。下面是上電后的效果

默認(rèn)DEMO程序先檢查SD卡的情況,如果連接了SD卡而且卡上包含演示用的BMP圖像的話,就可以使用搖桿來控制圖片的播放。按上圖中給出的提示,使用搖桿來進(jìn)入下一屏

這里提示是使用自動播放還是手動播放模式,向下拔動搖桿實(shí)現(xiàn)自動播放,向上拔動搖桿則使用手動播放,左右搖動搖桿可以實(shí)現(xiàn)顯示前一幅圖像還是后一幅圖像功能。

這是圖像顯示效果,實(shí)際顯示效果比照片上的效果要好,但總體感覺顯示效果發(fā)灰,不夠艷麗、通透!

不過還好,總算讓NUCLEO不再那么單調(diào),可玩性大大提高了。

上電體驗(yàn)完畢,想自己來寫個簡單的GUI界面,難么?

DEMO永遠(yuǎn)是最好的老師,讓我們在NUCLEO板上寫個自己的簡單界面,打開HAL庫的Demonstrations示例工程,main()函數(shù)里面的主要內(nèi)容如下

HAL_Init();

/* Configure the system clock to 400 MHz */

SystemClock_Config();

/* Check the availability of adafruit 1.8" TFT shield on top of STM32NUCLEO

board. This is done by reading the state of IO PF.03 pin (mapped to JoyStick

available on adafruit 1.8" TFT shield). If the state of PF.03 is high then

the adafruit 1.8" TFT shield is available. */

if(TFT_ShieldDetect() == SHIELD_DETECTED)

{

/* Initialize the LCD */

BSP_LCD_Init();

/* Configure SD card */

SDCard_Config();

/* Display on TFT Images existing on SD card */

TFT_DisplayImages();

}

else /* Shield not mounted */

{

LED2_Blink();

}

BSP函數(shù)極大簡化了底層的細(xì)節(jié),上面的代碼先初始化LCD,然后初始后SD,接下來就是顯示SD上的圖像文件。如果用戶想要畫一些簡單的圖形或顯示一些文字,也可以使用BSP函數(shù)來快速實(shí)現(xiàn),主要的BSP繪圖函數(shù)如下

不過如果要顯示中文字符的話,還需要自己修改代碼,另外還要提供漢字點(diǎn)陣數(shù)據(jù)。下面使用這些函數(shù)來顯示一個簡單的GUI界面,修改代碼如下

void drawGUI(void)

{

BSP_LCD_SetFont(&Font12);

BSP_LCD_DisplayStringAtLine(1, " Hello, STM32H7");

star(64, 80, 40);

}

其中star函數(shù)就是畫五角星的代碼,這里就不列出來了,里面主要用到了BSP提供的一些畫點(diǎn)及畫線的函數(shù),最后的結(jié)果如下

BSP函數(shù)隱藏了太多的細(xì)節(jié),不過對于剛開始體驗(yàn)的用戶來說,還是很方便的。真要了解內(nèi)部的細(xì)節(jié),可以去深挖這些代碼的實(shí)現(xiàn)細(xì)節(jié),相信對于廣大工程師來說,并不是什么難事。

除了可以用在NUCLEO上面,擴(kuò)展板也可以用在Arduino上,為Arduino提供更多的功能。

要在Arduino上使用這個擴(kuò)展板,先要安裝兩個支持庫,一個是GFX庫,另一個是ST7735庫。這兩個庫都在Adafruit的官方github上。下載好兩個庫的zip包文件后,添加到Arduino的本地庫中,目錄結(jié)構(gòu)如下

ST7735用到了GFX庫中的一些函數(shù),另外ST7735里面也包含了一些測試?yán),可以直接打開以進(jìn)行測試。包含的示例如下

這里選擇兩個例程進(jìn)行測試,一個是graphicstest,另一個是spitftbitmap。前者演示了基本的圖形繪制功能,后者讀取SD卡上的圖像并解碼,然后顯示到LCD上。

查看原理圖我們知道LCD和SD都是通過SPI接口與外部的MCU連接并通信,二者共享相同的SPI硬件接口。graphicstest只用到了LCD接口,通過計算的方式繪制圖形。graphicstest中的部分代碼如下

// line draw test

testlines(ST7735_YELLOW);

delay(500);

// optimized lines

testfastlines(ST7735_RED, ST7735_BLUE);

delay(500);

testdrawrects(ST7735_GREEN);

delay(500);

testfillrects(ST7735_YELLOW, ST7735_MAGENTA);

delay(500);

其中繪制矩形部分的屏幕輸出如下

另一個示例spitftbitmap從SD卡中讀取BMP圖像,顯示到LCD上,測試用的原圖如下

顯示效果如下

由于LCD的尺寸太小,只顯示了圖像的部分內(nèi)容。

在顯示圖像文件時,代碼使用了一個大小為20像素(3*20字節(jié))的緩沖區(qū),以加速圖像的繪制,畢竟逐像素繪制的效率太低了。

具體的代碼就不貼了,詳情請參考spitftbitmap.ino文件。

實(shí)際測試過程中發(fā)現(xiàn),圖像顯示的速度比較慢,如果從SD卡讀取并顯示圖像的時候,這個過程就更慢了。另外在讀取SD卡的過程中,偶爾會發(fā)現(xiàn)不能正確識別SD卡,需要按一下開發(fā)板上的復(fù)位后才能正確識別。還有一個問題,部分BMP格式文件不能正確識別,使用ST HAL庫中的BMP文件,都不能正確識別,下面是ST HAL庫中提供的一些測試樣本,

估計是BMP頭文件的兼容性問題吧,得空的時候好好比較一下二者頭部的區(qū)別,也許會有收獲。

總體來說,Adafruit 1.8 TFT Shield是一款值得一試的擴(kuò)展板。雖然擴(kuò)展板提供的功能有限,只有三個:LCD、SD及搖桿,但是卻能給NUCLEO及Arduino增色不少,重要的是即插即用,不用再翻箱倒柜去找三方模塊了,就算找到了模塊,有時為了幾個電阻或電容,搞得滿地都是元件盒!

除了基本的顯示應(yīng)用,還可以玩玩更高級的玩法,比如計算機(jī)圖形學(xué)中的直線生成算法、抗鋸齒應(yīng)用也可以一試身手;SD卡中可以存儲漢字字庫、大量的圖像或數(shù)據(jù),消除了存儲瓶頸;至于5向搖桿,用來代替按鍵應(yīng)用,也是一種不錯的體驗(yàn)。

至于視頻應(yīng)用,估計體驗(yàn)不會很好,再加上可憐的分辨率,想一想就好!

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

網(wǎng)友評論

  • 聯(lián)系人:巧克力娃娃
  • 郵箱:board@21ic.com
  • 我要投稿
  • 歡迎入駐,開放投稿

熱門標(biāo)簽
項目外包 more+