首页 > 评测 > NUCLEO伴侣之Adafruit 1.8 TFT Shield

NUCLEO伴侣之Adafruit 1.8 TFT Shield

NUCLEO   Asafruit   TFT   shield   拓展板   显示屏   
  • 作者:SATURN
  • 来源:21ic
  • [导读]
  • NUCLEO板的拥护者喜欢NUCLEO的一丝不挂,喜欢啥外设就挂接啥外设,非常灵活,加上低廉的价格,有人甚至称之为神板!但是也有人称NUCLEO为点灯板,因为除了LED,NUCLEO上啥也没有,只有点灯!今天给大家来评测一款TFT显示屏的拓展板,可以兼容NUCLEO。

ST的NUCLEO开发板让ST粉丝亦爱亦恨。

NUCLEO板的拥护者喜欢NUCLEO的一丝不挂,喜欢啥外设就挂接啥外设,非常灵活,加上低廉的价格,有人甚至称之为神板!但是也有人称NUCLEO为点灯板,因为除了LED,NUCLEO上啥也没有,只有点灯!

NUCLEO做为核心板,确实只提供了核心功能,除了MCU及引出的GPIO,基本上就没有其它的东西了。不过ST也考虑到了粉丝的感受。那就是虽然咱没有提供板载外设,但是提供的接口是标准化的,比如ST ZIO,就是兼容Arduino接口的,你想要外设,手头的Arduino扩展板就可以派上用场!除了硬件,ST也在软件生态上予以支持,在HAL固件库里也提供了一些主流外设的支持,以BSP的形式提供给用户。

不知大家有没有注意到,不知从何时起,NUCLEO系列特别是144系列开发板,都悄悄加入了对Adafruit 1.8 TFT的支持,如果发现该扩展板,则打开LCD显示方面的功能;如果没有检测到扩展板,则开始点灯。

Adafruit 1.8 TFT Shield(下文简称SHIELD)是Adafruit提供的一款兼容Arduino接口的扩展板,提供了LCD显示、SD卡存储及游戏摇杆支持功能,因为是Arduino接口兼容,所以应用面非常广。

老规矩,先看热闹。

熟悉Adafruit产品的用户会发现,Adafruit似乎对黑色情有独钟,大量的产品都是以黑色为基调的,像近期推出的Feather系列,差不多都是黑色的PCB设计。SHIELD的包装是黑色,在包装盒的标签上可以看到产品型号。

包装盒内含扩展板一块,就是Adafruit 1.8 TFT Shield,另外还提供了排针x1,默认没有焊接,正式体验之前还得先把它焊接好。由于扩展板上包含LCD,所以使用了厚厚的防震泡沫进行了包装。

扩展板主要包含三大部件:LCD、SD卡接口及游戏摇杆。另外GPIO均有丝印标注,这样的好处一是可以非常清楚的连接其它需要扩充的外设,另外在与ST ZIO等非标准接口连接时更容易对准,不会接错了。

扩展板背面就没有啥了。

扩展板特写图,可以清楚看到Adafruit的LOGO及SD接口及游戏摇杆。

这是扩展板与NUCLEO-H743ZI的合体照,安装时注意扩展板的D0接口与ST ZIO的D0接口对准就行,NUCLEO也不再孤单了!

怎么能少了与Arduino的合影呢!其实这款扩展板与Arduino连接在一起,更和谐。

如果说Adafruit 1.8 TFT Shield与NUCLEO 144的合照是小鸟依人的话,那么Adafruit 1.8 TFT Shield与Arduino的合照可以说是珠联璧合。

在上电之前,先看下扩展板的一些主要特性。扩展板提供的主要功能如下

• 1.8 TFT显示功能

• 物理尺寸为69x53.5mm

• 128x160分辨率,使用ST7735来驱动

• 四线SPI接口与MCU通信

• SD卡接口,使用SPI接口

• 兼容3.3/5V供电

• LCD最高消耗约100mA电流,SD卡工作电流在20-100mA之间,视读写情况而定

扩展板整体结构比较简单,参考原理图如下

可以看到电源做了5V处理,适用大部分开发板,无论是3.3V还是5V。

Adafruit也为扩展板提供了软件支持,主要包括两个图形库,Adafruit GFX及ST7735库,不过这两个库主要面向的是Arduino平台,如果要在ST上使用图形显示功能的话,可以在ST的HAL库里找到对应的代码,NUCLEO-H743ZI默认的DEMO支持该扩展板。

准备上电,看看会是怎样一种体验。

将扩展板与NUCLEO-H743ZI连接,注意引脚的对齐。下面是上电后的效果

默认DEMO程序先检查SD卡的情况,如果连接了SD卡而且卡上包含演示用的BMP图像的话,就可以使用摇杆来控制图片的播放。按上图中给出的提示,使用摇杆来进入下一屏

这里提示是使用自动播放还是手动播放模式,向下拔动摇杆实现自动播放,向上拔动摇杆则使用手动播放,左右摇动摇杆可以实现显示前一幅图像还是后一幅图像功能。

这是图像显示效果,实际显示效果比照片上的效果要好,但总体感觉显示效果发灰,不够艳丽、通透!

不过还好,总算让NUCLEO不再那么单调,可玩性大大提高了。

上电体验完毕,想自己来写个简单的GUI界面,难么?

DEMO永远是最好的老师,让我们在NUCLEO板上写个自己的简单界面,打开HAL库的Demonstrations示例工程,main()函数里面的主要内容如下

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函数极大简化了底层的细节,上面的代码先初始化LCD,然后初始后SD,接下来就是显示SD上的图像文件。如果用户想要画一些简单的图形或显示一些文字,也可以使用BSP函数来快速实现,主要的BSP绘图函数如下

不过如果要显示中文字符的话,还需要自己修改代码,另外还要提供汉字点阵数据。下面使用这些函数来显示一个简单的GUI界面,修改代码如下

void drawGUI(void)

{

BSP_LCD_SetFont(&Font12);

BSP_LCD_DisplayStringAtLine(1, " Hello, STM32H7");

star(64, 80, 40);

}

其中star函数就是画五角星的代码,这里就不列出来了,里面主要用到了BSP提供的一些画点及画线的函数,最后的结果如下

BSP函数隐藏了太多的细节,不过对于刚开始体验的用户来说,还是很方便的。真要了解内部的细节,可以去深挖这些代码的实现细节,相信对于广大工程师来说,并不是什么难事。

除了可以用在NUCLEO上面,扩展板也可以用在Arduino上,为Arduino提供更多的功能。

要在Arduino上使用这个扩展板,先要安装两个支持库,一个是GFX库,另一个是ST7735库。这两个库都在Adafruit的官方github上。下载好两个库的zip包文件后,添加到Arduino的本地库中,目录结构如下

ST7735用到了GFX库中的一些函数,另外ST7735里面也包含了一些测试例程,可以直接打开以进行测试。包含的示例如下

这里选择两个例程进行测试,一个是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的尺寸太小,只显示了图像的部分内容。

在显示图像文件时,代码使用了一个大小为20像素(3*20字节)的缓冲区,以加速图像的绘制,毕竟逐像素绘制的效率太低了。

具体的代码就不贴了,详情请参考spitftbitmap.ino文件。

实际测试过程中发现,图像显示的速度比较慢,如果从SD卡读取并显示图像的时候,这个过程就更慢了。另外在读取SD卡的过程中,偶尔会发现不能正确识别SD卡,需要按一下开发板上的复位后才能正确识别。还有一个问题,部分BMP格式文件不能正确识别,使用ST HAL库中的BMP文件,都不能正确识别,下面是ST HAL库中提供的一些测试样本,

估计是BMP头文件的兼容性问题吧,得空的时候好好比较一下二者头部的区别,也许会有收获。

总体来说,Adafruit 1.8 TFT Shield是一款值得一试的扩展板。虽然扩展板提供的功能有限,只有三个:LCD、SD及摇杆,但是却能给NUCLEO及Arduino增色不少,重要的是即插即用,不用再翻箱倒柜去找三方模块了,就算找到了模块,有时为了几个电阻或电容,搞得满地都是元件盒!

除了基本的显示应用,还可以玩玩更高级的玩法,比如计算机图形学中的直线生成算法、抗锯齿应用也可以一试身手;SD卡中可以存储汉字字库、大量的图像或数据,消除了存储瓶颈;至于5向摇杆,用来代替按键应用,也是一种不错的体验。

至于视频应用,估计体验不会很好,再加上可怜的分辨率,想一想就好!

  • 本文系21ic原创,未经许可禁止转载!

网友评论