搭配 STM32 使用
驱动接口选择
- 采用SPI方式驱动(推荐),优势是占用引脚少,驱动方式简单,通信速度可以满足大部分场景使用。
- 采用180方式驱动(在SPI接口通信速度不满足应用要求的情况下才考虑I80接口),优势是驱动方式相对简单,通信速度非常快,但是占用引脚多。
- 采用I2C驱动(不推荐,通信速度非常慢)。
驱动板选择
由于IT8951需要占用比较大的RAM空间,一般STM32单片机都无法直接满足,需要外加SDRAM之类的芯片进行RAM扩展。这里测试,我们使用Open429I作为测试板,其板载的IS42S16400J (64-MBIT) SDRAM,已经完全可以满足驱动10.3inch e-paper HAT了。
采用SPI接口驱动
- Step1 按照下表进行硬件连接
| IT8951引脚 | STM32引脚 | 描述 |
|---|---|---|
| 5V | 5V | 电源正(5V电源输入) |
| GND | GND | 电源地 |
| MISO | PE13 | SPI通信MISO引脚 |
| MOSI | PE14 | SPI通信MOSI引脚 |
| SCK | PE12 | SPI通信SCK引脚 |
| CS | PE11 | SPI片选引脚(低电平有效) |
| RST | PC5 | 外部复位引脚(低电平复位) |
| HRDY | PA7 | 忙状态输出引脚(低电平表示忙) |
- Step2 确定拨码开关选择到SPI模式。

- Step3 使用DEMO程序刷新图片
我们提供了测试的DEMO程序(点此下载)
下载后,解压,使用keil打开工程,目录地址:Open429I-IT8951-Demo\Project\IT8951\MDK-ARM\Project.uvproj。
点击编译,之后打开IT8951.h,确定定义了IT8951_Interface_SPI,点击重新编译,下载。几秒后正常可以看到e-paper开始循环显示图片。

- Step4 查看串口打印信息其中串口打印信息如下(波特率115200):

采用I80接口驱动
- Step1 按照下表进行硬件连接
| IT8951引脚 | STM32引脚 | 描述 |
|---|---|---|
| DBUS0~DBUS15 | PB0~PB15 | 数据接口 |
| HWE | PC1 | 写使能(低电平有效) |
| D/C | PC7 | 数据/命令(低电平表示命令) |
| CSEL | PC6 | 片选使能(低电平有效) |
| HRD | PC3 | 读使能(低电平有效) |
| RST | PC0 | 外部复位引脚(低电平复位) |
| BUSY | PA7 | 忙状态输出引脚(低电平表示忙) |
| GND | GND | 电源地 |
| VCC | 5V | 电源正(5V电源输入) |
- Step2 确定拨码开关选择到I80模式。

- Step3 使用DEMO程序刷新图片
我们提供了测试的DEMO程序(点此下载)
下载后,解压,使用keil打开工程,目录地址:Open429I-IT8951-Demo\Project\IT8951\MDK-ARM\Project.uvproj。
点击编译,之后打开IT8951.h,确定定义了IT8951_Interface_I80,点击重新编译,下载。几秒后正常可以看到e-paper开始循环显示图片。

- Step4 查看串口打印信息,其中串口打印信息如下(波特率115200):

显示图片
为了使DEMO程序尽可能简单和方便移植,我们并没有在DEMO程序中加入文件系统,所以DEMO程序中是直接使用显示矩阵的方式进行显示图片的。
也就是我们需要添加新图片时需要先将图片转为数据矩阵(数组),在通过程序进行显示。以下简单的介绍如何将图片转化为数据矩阵并进行显示。

- Step3 点击Image->Convert to ->Gray256 (8 BPP),如下图:

-
Step4 点击File->Save As...->选择保存类型“C” bitmap file (*.c) ->输入文件名,点击保存。
-
Step5 选择8 bit per pixel,如下图,点击OK,可以得到一个C文件。
-
Step6 将C文件增加到Keil工程,将以下无用信息删除:
/********************************************************************** SEGGER Microcontroller GmbH & Co. KG ** Solutions for real time microcontroller applications ** www.segger.com ************************************************************************ ** C-file generated by ** ** Bitmap Converter for emWin V5.22. ** Compiled Jul 4 2013, 12:18:24 ** (c) 1998 - 2013 Segger Microcontroller GmbH && Co. KG ** ************************************************************************ ** Source file: zoo_800_600 ** Dimensions: 800 * 600 ** NumColors: 256 ** ************************************************************************/#include <stdlib.h>#include "GUI.h"#ifndef GUI_CONST_STORAGE#define GUI_CONST_STORAGE const#endifextern GUI_CONST_STORAGE GUI_BITMAP bmzoo_800_600;/*********************************************************************** Palette** Description* The following are the entries of the palette table.* The entries are stored as a 32-bit values of which 24 bits are* actually used according to the following bit mask: 0xBBGGRR** The lower 8 bits represent the Red component.* The middle 8 bits represent the Green component.* The highest 8 bits represent the Blue component.*/static GUI_CONST_STORAGE GUI_COLOR _Colorszoo_800_600[] = {0x000000, 0x010101, 0x020202, 0x030303,0x040404, 0x050505, 0x060606, 0x070707,0x080808, 0x090909, 0x0A0A0A, 0x0B0B0B,0x0C0C0C, 0x0D0D0D, 0x0E0E0E, 0x0F0F0F,0x101010, 0x111111, 0x121212, 0x131313,0x141414, 0x151515, 0x161616, 0x171717,0x181818, 0x191919, 0x1A1A1A, 0x1B1B1B,0x1C1C1C, 0x1D1D1D, 0x1E1E1E, 0x1F1F1F,0x202020, 0x212121, 0x222222, 0x232323,0x242424, 0x252525, 0x262626, 0x272727,0x282828, 0x292929, 0x2A2A2A, 0x2B2B2B,0x2C2C2C, 0x2D2D2D, 0x2E2E2E, 0x2F2F2F,0x303030, 0x313131, 0x323232, 0x333333,0x343434, 0x353535, 0x363636, 0x373737,0x383838, 0x393939, 0x3A3A3A, 0x3B3B3B,0x3C3C3C, 0x3D3D3D, 0x3E3E3E, 0x3F3F3F,0x404040, 0x414141, 0x424242, 0x434343,0x444444, 0x454545, 0x464646, 0x474747,0x484848, 0x494949, 0x4A4A4A, 0x4B4B4B,0x4C4C4C, 0x4D4D4D, 0x4E4E4E, 0x4F4F4F,0x505050, 0x515151, 0x525252, 0x535353,0x545454, 0x555555, 0x565656, 0x575757,0x585858, 0x595959, 0x5A5A5A, 0x5B5B5B,0x5C5C5C, 0x5D5D5D, 0x5E5E5E, 0x5F5F5F,0x606060, 0x616161, 0x626262, 0x636363,0x646464, 0x656565, 0x666666, 0x676767,0x686868, 0x696969, 0x6A6A6A, 0x6B6B6B,0x6C6C6C, 0x6D6D6D, 0x6E6E6E, 0x6F6F6F,0x707070, 0x717171, 0x727272, 0x737373,0x747474, 0x757575, 0x767676, 0x777777,0x787878, 0x797979, 0x7A7A7A, 0x7B7B7B,0x7C7C7C, 0x7D7D7D, 0x7E7E7E, 0x7F7F7F,0x808080, 0x818181, 0x828282, 0x838383,0x848484, 0x858585, 0x868686, 0x878787,0x888888, 0x898989, 0x8A8A8A, 0x8B8B8B,0x8C8C8C, 0x8D8D8D, 0x8E8E8E, 0x8F8F8F,0x909090, 0x919191, 0x929292, 0x939393,0x949494, 0x959595, 0x969696, 0x979797,0x989898, 0x999999, 0x9A9A9A, 0x9B9B9B,0x9C9C9C, 0x9D9D9D, 0x9E9E9E, 0x9F9F9F,0xA0A0A0, 0xA1A1A1, 0xA2A2A2, 0xA3A3A3,0xA4A4A4, 0xA5A5A5, 0xA6A6A6, 0xA7A7A7,0xA8A8A8, 0xA9A9A9, 0xAAAAAA, 0xABABAB,0xACACAC, 0xADADAD, 0xAEAEAE, 0xAFAFAF,0xB0B0B0, 0xB1B1B1, 0xB2B2B2, 0xB3B3B3,0xB4B4B4, 0xB5B5B5, 0xB6B6B6, 0xB7B7B7,0xB8B8B8, 0xB9B9B9, 0xBABABA, 0xBBBBBB,0xBCBCBC, 0xBDBDBD, 0xBEBEBE, 0xBFBFBF,0xC0C0C0, 0xC1C1C1, 0xC2C2C2, 0xC3C3C3,0xC4C4C4, 0xC5C5C5, 0xC6C6C6, 0xC7C7C7,0xC8C8C8, 0xC9C9C9, 0xCACACA, 0xCBCBCB,0xCCCCCC, 0xCDCDCD, 0xCECECE, 0xCFCFCF,0xD0D0D0, 0xD1D1D1, 0xD2D2D2, 0xD3D3D3,0xD4D4D4, 0xD5D5D5, 0xD6D6D6, 0xD7D7D7,0xD8D8D8, 0xD9D9D9, 0xDADADA, 0xDBDBDB,0xDCDCDC, 0xDDDDDD, 0xDEDEDE, 0xDFDFDF,0xE0E0E0, 0xE1E1E1, 0xE2E2E2, 0xE3E3E3,0xE4E4E4, 0xE5E5E5, 0xE6E6E6, 0xE7E7E7,0xE8E8E8, 0xE9E9E9, 0xEAEAEA, 0xEBEBEB,0xECECEC, 0xEDEDED, 0xEEEEEE, 0xEFEFEF,0xF0F0F0, 0xF1F1F1, 0xF2F2F2, 0xF3F3F3,0xF4F4F4, 0xF5F5F5, 0xF6F6F6, 0xF7F7F7,0xF8F8F8, 0xF9F9F9, 0xFAFAFA, 0xFBFBFB,0xFCFCFC, 0xFDFDFD, 0xFEFEFE, 0xFFFFFF};static GUI_CONST_STORAGE GUI_LOGPALETTE _Palzoo_800_600 = {256, // Number of entries0, // No transparency&_Colorszoo_800_600[0]};GUI_CONST_STORAGE GUI_BITMAP bmzoo_800_600 = {800, // xSize600, // ySize800, // BytesPerLine8, // BitsPerPixel_aczoo_800_600, // Pointer to picture data (indices)&_Palzoo_800_600 // Pointer to palette}; -
Step7
static GUI_CONST_STORAGE unsigned char _aczoo_800_600[] = {
将以上代码修改为如下(数组名可自定义):
const unsigned char zoo_800_600[] = {
-
Step8 在IT8951.c中修改相应代码即可,如下:
extern const unsigned char zoo_800_600[];void IT8951DisplayExample3(){IT8951LdImgInfo stLdImgInfo;IT8951AreaImgInfo stAreaImgInfo;TWord width = gstI80DevInfo.usPanelW;TWord high = gstI80DevInfo.usPanelH;TDWord i;for (i = 0;i < width*high;i++){gpFrameBuf[i] = zoo_800_600[i];}IT8951WaitForDisplayReady();//Setting Load image informationstLdImgInfo.ulStartFBAddr = (TDWord)gpFrameBuf;stLdImgInfo.usEndianType = IT8951_LDIMG_L_ENDIAN;stLdImgInfo.usPixelFormat = IT8951_8BPP;stLdImgInfo.usRotate = IT8951_ROTATE_0;stLdImgInfo.ulImgBufBaseAddr = gulImgBufAddr;//Set Load AreastAreaImgInfo.usX = 0;stAreaImgInfo.usY = 0;stAreaImgInfo.usWidth = width;stAreaImgInfo.usHeight = high;IT8951HostAreaPackedPixelWrite(&stLdImgInfo, &stAreaImgInfo);//Display function 2IT8951DisplayArea(0,0, gstI80DevInfo.usPanelW, gstI80DevInfo.usPanelH, 2);}