跳到主要内容

搭配 STM32 使用

驱动接口选择

  • 采用SPI方式驱动(推荐),优势是占用引脚少,驱动方式简单,通信速度可以满足大部分场景使用。
  • 采用180方式驱动(在SPI接口通信速度不满足应用要求的情况下才考虑I80接口),优势是驱动方式相对简单,通信速度非常快,但是占用引脚多。
  • 采用I2C驱动(不推荐,通信速度非常慢)。

驱动板选择
由于IT8951需要占用比较大的RAM空间,一般STM32单片机都无法直接满足,需要外加SDRAM之类的芯片进行RAM扩展。这里测试,我们使用Open429I作为测试板,其板载的IS42S16400J (64-MBIT) SDRAM,已经完全可以满足驱动9.7inch e-paper HAT了。

  • Step1 按照下表进行硬件连接
  1. 硬件连接
IT8951引脚STM32引脚描述
5V5V电源正(5V电源输入)
GNDGND电源地
MISOPE13SPI通信MISO引脚
MOSIPE14SPI通信MOSI引脚
SCKPE12SPI通信SCK引脚
CSPE11SPI片选引脚(低电平有效)
RSTPC5外部复位引脚(低电平复位)
HRDYPA7忙状态输出引脚(低电平表示忙)
  • Step2 确定拨码开关选择到SPI模式。

9

  • Step3 使用DEMO程序刷新图片

我们提供了测试的DEMO程序(点此下载)

下载后,解压,使用keil打开工程,目录地址:Open429I-C-IT8951-Demo\Project\9.7-IT8951\MDK-ARM\Project.uvproj。

点击编译,之后打开IT8951.h,确定定义了IT8951_Interface_SPI,点击重新编译,下载。几秒后正常可以看到e-paper开始循环显示图片。

9

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

9

采用I80接口驱动​

  • Step1 按照下表进行硬件连接
IT8951引脚STM32引脚描述
DBUS0~DBUS15PB0~PB15数据接口
HWEPC1写使能(低电平有效)
D/CPC7数据/命令(低电平表示命令)
CSELPC6片选使能(低电平有效)
HRDPC3读使能(低电平有效)
RSTPC0外部复位引脚(低电平复位)
BUSYPA7忙状态输出引脚(低电平表示忙)
GNDGND电源地
VCC5V电源正(5V电源输入)
  • Step2 确定拨码开关选择到I80模式。

9

  • Step3 使用DEMO程序刷新图片

我们提供了9.7inch e-Paper HAT的测试DEMO程序(点此下载)

下载后,解压,使用keil打开工程,目录地址:Open429I-C-IT8951-Demo\Project\9.7-IT8951\MDK-ARM\Project.uvproj。

点击编译,之后打开IT8951.h,确定定义了IT8951_Interface_I80,点击重新编译,下载。几秒后正常可以看到e-paper开始循环显示图片。

9

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

9

显示图片​

为了使DEMO程序尽可能简单和方便移植,我们并没有在DEMO程序中加入文件系统,所以DEMO程序中是直接使用显示矩阵的方式进行显示图片的。

也就是我们需要添加新图片时需要先将图片转为数据矩阵(数组),在通过程序进行显示。以下简单的介绍如何将图片转化为数据矩阵并进行显示。

  • Step1 先准备一张BMP的示例图片,由于9.7inch e-Paper的分辨率是1200*825,这里直接使用该图片作为例子。

  • Step2 打开图片取模软件,点击File-》Open..-》选择上面的图片,如下图:

9

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

9

  • Step4 点击File-》Save As...-》选择保存类型“C” bitmap file (*.c) -》输入文件名,点击保存。

  • Step5 选择8 bit per pixel,如下图,点击OK。可以得到一个C文件。

9

  • 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 *
    * Dimensions: 1200 * 825 *
    * NumColors: 256 *
    * *
    **********************************************************************
    */

    #include <stdlib.h>

    #include "GUI.h"

    #ifndef GUI_CONST_STORAGE
    #define GUI_CONST_STORAGE const
    #endif

    extern GUI_CONST_STORAGE GUI_BITMAP bmzoo;

    /*********************************************************************
    *
    * 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[] = {
    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 = {
    256, // Number of entries
    0, // No transparency
    &_Colorszoo[0]
    };

    GUI_CONST_STORAGE GUI_BITMAP bmzoo = {
    1200, // xSize
    825, // ySize
    1200, // BytesPerLine
    8, // BitsPerPixel
    _aczoo, // Pointer to picture data (indices)
    &_Palzoo // Pointer to palette
    };
  • Step7

    static GUI_CONST_STORAGE unsigned char _aczoo[] = {

将以上代码修改为如下(数组名可自定义):

const unsigned char zoo_1200_825[] = {
  • Step8 在IT8951.c中修改相应代码即可,如下:

    extern const unsigned char zoo_1200_825[];
    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_1200_825[i];
    }

    IT8951WaitForDisplayReady();

    //Setting Load image information
    stLdImgInfo.ulStartFBAddr = (TDWord)gpFrameBuf;
    stLdImgInfo.usEndianType = IT8951_LDIMG_L_ENDIAN;
    stLdImgInfo.usPixelFormat = IT8951_8BPP;
    stLdImgInfo.usRotate = IT8951_ROTATE_0;
    stLdImgInfo.ulImgBufBaseAddr = gulImgBufAddr;
    //Set Load Area
    stAreaImgInfo.usX = 0;
    stAreaImgInfo.usY = 0;
    stAreaImgInfo.usWidth = width;
    stAreaImgInfo.usHeight = high;

    IT8951HostAreaPackedPixelWrite(&stLdImgInfo, &stAreaImgInfo);//Display function 2
    IT8951DisplayArea(0,0, gstI80DevInfo.usPanelW, gstI80DevInfo.usPanelH, 2);
    }