STM32 +合宙1.54“ 电子墨水屏(e-paper)驱动显示示例

STM32 +合宙1.54“ 电子墨水屏(e-paper)驱动显示示例


  • 📍相关篇《Arduino框架下ESP32/ESP8266+合宙1.54“ 电子墨水屏(e-paper)驱动显示示例
  • 🔖程序是从GooDisplay品牌和微雪电子下同型号规格墨水屏的示例程序参考Arduino框架下的驱动显示代码修改得来的。
  • 📍移植参考程序(👎不推荐👎):(GooDisplay)https://www.good-display.cn/product/380.html
  • 📌同类型的,微雪品牌的相关资料参考(提供了包含约50种规格的电子墨水屏(e-paper)):https://www.waveshare.net/wiki/1.54inch_e-Paper_Module
🔖使用GooDisplay经过修改,仅仅是实现刚刚点亮屏幕,基于标准库,使用STM32f103芯片,软件SPI方式,微雪电子提供的同类型屏幕驱动程序完全兼容本人使用的合宙1.54“ 电子墨水屏。微雪电子提供的参考程序比较丰富,如果想移植使用到其他同类型不同规格的墨水屏上使用,也可以尝试通过上面的2个参考源作为驱动参考。不限于本人使用的合宙1.54“ 规格的电子墨水屏(e-paper)。
  • 🌾使用微雪电子同型号规格的墨水屏驱动示例代码成功驱动。内容显示正常,包含完整的对应显示接口函数,完全可以拿来直接使用。完全兼容EPD_1in54_test版本,其他版本点不亮。(✨推荐✨)
  • 🐛使用GooDisplay代码移植后,有bug。显示是:上下反置的效果,合宙1.54“ 电子墨水屏(e-paper)没有对应的手册可查询,只能参考Arduino驱动代码进行查找进行修复。测试使用局部刷新指令,来刷全局可以部分显示正常。问题可能还是在全局指令上。
    在这里插入图片描述
    在这里插入图片描述

📝GooDisplay参考代码修改位置

  • 🌿初始化函数:EPD_HW_Init()
const unsigned char lut_full_update[] =
{
    0x02, 0x02, 0x01, 0x11, 0x12, 0x12, 0x22, 0x22, 
    0x66, 0x69, 0x69, 0x59, 0x58, 0x99, 0x99, 0x88, 
    0x00, 0x00, 0x00, 0x00, 0xF8, 0xB4, 0x13, 0x51, 
    0x35, 0x51, 0x51, 0x19, 0x01, 0x00
};
//局部刷新指令
const unsigned char lut_partial_update[] =
{
    0x10, 0x18, 0x18, 0x08, 0x18, 0x18, 0x08, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x13, 0x14, 0x44, 0x12, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
//Full screen refresh initialization
void EPD_HW_Init(void)
{
	int i;
	EPD_W21_RST_0;  // Module reset   
	delay_xms(20);//At least 10ms delay 
	EPD_W21_RST_1;
	delay_xms(20); //At least 10ms delay 
	
	Epaper_READBUSY();   
	EPD_W21_WriteCMD(0x12);  //SWRESET
	Epaper_READBUSY();   
		
	EPD_W21_WriteCMD(0x01); //Driver output control      
//	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    
//	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256);
		EPD_W21_WriteDATA((EPD_HEIGHT-1)& 0xFF);    
	EPD_W21_WriteDATA(((EPD_HEIGHT - 1) >> 8) & 0xFF);
//	EPD_W21_WriteDATA(0x00);

//	EPD_W21_WriteCMD(0x11); //data entry mode       
//	EPD_W21_WriteDATA(0x01);

//	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
//	EPD_W21_WriteDATA(0x00);
//	EPD_W21_WriteDATA(EPD_WIDTH/8-1);    

//	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
//	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    
//	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256);
//	EPD_W21_WriteDATA(0x00);
//	EPD_W21_WriteDATA(0x00); 

//	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
//	EPD_W21_WriteDATA(0x05);	
//	  	
//  EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
//	EPD_W21_WriteDATA(0x80);	

//	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
//	EPD_W21_WriteDATA(0x00);
//	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
//	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    
//	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256);
//  Epaper_READBUSY();
	     EPD_W21_WriteCMD(0x0c);
     EPD_W21_WriteDATA(0xD7);
     EPD_W21_WriteDATA(0xD6);
     EPD_W21_WriteDATA(0x9D);

    EPD_W21_WriteCMD(0x2c);
     EPD_W21_WriteDATA(0xA8);                     // VCOM 7C  0xA8

     EPD_W21_WriteCMD(0x3a);
     EPD_W21_WriteDATA(0x1A);                     // 4 dummy lines per gate

     EPD_W21_WriteCMD(0x3b);
     EPD_W21_WriteDATA(0x08);                     // 2us per line

     EPD_W21_WriteCMD(0x11);
     EPD_W21_WriteDATA(0x03);                     // X increment; Y increment 

     EPD_W21_WriteCMD(0x32);
        /* the length of look-up table is 30 bytes */
     for ( i = 0; i < 30; i++) {
         EPD_W21_WriteDATA(lut_full_update[i]);
     }
}
  • 🌿刷新显示函数:EPD_Update()
//Full screen refresh update function
void EPD_Update(void)
{   
  EPD_W21_WriteCMD(0x22); //Display Update Control
	 
//  EPD_W21_WriteDATA(0xF7);//注释掉该指令
EPD_W21_WriteDATA(0xc4);	//新增
  EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
//	EPD_W21_WriteDATA(0xFF);//  新增 TERMINATE_FRAME_READ_WRITE 不启用,没有发现其他异常
  Epaper_READBUSY();   

}
  • 合宙1.54“ 电子墨水屏(e-paper)屏幕不兼容GooDisplay的快速刷屏指令,
📄GooDisplay示例程序引脚定义
  • Display_EPD_W21_spi.h中:
#define EPD_W21_MOSI_0	GPIO_ResetBits(GPIOD, GPIO_Pin_10)
#define EPD_W21_MOSI_1	GPIO_SetBits(GPIOD, GPIO_Pin_10)

#define EPD_W21_CLK_0	GPIO_ResetBits(GPIOD, GPIO_Pin_9)
#define EPD_W21_CLK_1	GPIO_SetBits(GPIOD, GPIO_Pin_9)

#define EPD_W21_CS_0	GPIO_ResetBits(GPIOD, GPIO_Pin_8)
#define EPD_W21_CS_1	GPIO_SetBits(GPIOD, GPIO_Pin_8)

#define EPD_W21_DC_0	GPIO_ResetBits(GPIOE, GPIO_Pin_15)
#define EPD_W21_DC_1	GPIO_SetBits(GPIOE, GPIO_Pin_15)

#define EPD_W21_RST_0	GPIO_ResetBits(GPIOE, GPIO_Pin_14)
#define EPD_W21_RST_1	GPIO_SetBits(GPIOE, GPIO_Pin_14)

#define isEPD_W21_BUSY GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_13) // for solomen solutions
📚合宙1.54墨水屏适配程序
  • 🔖后续如果修复bug,将更新。
链接:https://pan.baidu.com/s/1_elRESwoOvCxe2ataPG4ug?pwd=em1y 
提取码:em1y

📗微雪对应型号驱动程序

  • 🔖经测试,完全兼容微雪同型号的V1版本(EPD_1in54_test)的程序。
  • 📑微雪对应的驱动程序有2套.
    • 针对带驱动板的程序(标准库):https://www.waveshare.net/wiki/E-Paper_Shield
资源地址:https://www.waveshare.net/w/upload/6/69/E-Paper_Shield_Code.7z

在这里插入图片描述

    /**SPI1 GPIO Configuration    
    PA5     ------> SPI1_SCK  SCL
    PA6     ------> SPI1_MISO不需要接
    PA7     ------> SPI1_MOSI DIN(SDA)
    */
#define SD_CS_Pin GPIO_PIN_10
#define SD_CS_GPIO_Port GPIOB

#define EPD_DC_Pin GPIO_PIN_7
#define EPD_DC_GPIO_Port GPIOC

#define EPD_BUSY_Pin GPIO_PIN_8
#define EPD_BUSY_GPIO_Port GPIOA

#define EPD_RST_Pin GPIO_PIN_9
#define EPD_RST_GPIO_Port GPIOA

#define SPIRAM_CS_Pin GPIO_PIN_4
#define SPIRAM_CS_GPIO_Port GPIOB

#define EPD_CS_Pin GPIO_PIN_6
#define EPD_CS_GPIO_Port GPIOB
    • 仅针对屏幕的驱动程序EPD_1in54_test版本(HAL库):https://www.waveshare.net/wiki/1.54inch_e-Paper_Module_Manual#STM32
资源地址:https://www.waveshare.net/w/upload/3/39/E-Paper_code.7z

在这里插入图片描述

    PA5     ------> SPI1_SCK
    PA7     ------> SPI1_MOSI
#define RST_Pin GPIO_PIN_1
#define RST_GPIO_Port GPIOA
#define DC_Pin GPIO_PIN_2
#define DC_GPIO_Port GPIOA
#define BUSY_Pin GPIO_PIN_3
#define BUSY_GPIO_Port GPIOA
#define SPI_CS_Pin GPIO_PIN_4
#define SPI_CS_GPIO_Port GPIOA
  • 🪓图片取模教程和工具介绍:https://www.waveshare.net/wiki/Image2Lcd%E5%9B%BE%E7%89%87%E5%8F%96%E6%A8%A1%E6%AD%A5%E9%AA%A4
  • 📍墨水屏相关驱动代码已上传到个人github上,供有需要的人方便获取:https://github.com/perseverance51/E-Paper_code

-🔖此文章仅作为个人学习探索知识的总结,不作为他人或引用者的理论依据,由于学识所限,难免会出现错误或纰漏,欢迎大家指正。

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、主要的显示屏IC IC(1)74HC04的作用:是一个6位反相器。 第7脚GND,电源地。 第14脚VCC,电源正极。 信号由A端输入Y端反相输出, A1与Y1为一组,其它类推。例:A1=“1”则Y1=“0”、A1=“0”则Y1=“1”,其它组功能一样。IC(2)74HC138的作用:八位二进制译十进制译码器。 第8脚GND,电源地。 第15脚VCC,电源正极 第1~3脚A、B、C,二进制输入脚。 第4~6脚片选信号控制,只有在4、5脚为“0”6脚为“1”时,才会被选通,输出受A、B、C信号控制。其它任何组合方式将不被选通,且Y0~Y7输出全“1”。通过控制选通脚来级联,使之扩展到十六位。例:G2A=0,G2B=0,G1=1,A=1,B=0,C=0,则Y0为“0”Y1~Y7为“1”。 IC(3)4HC595的作用:LED驱动芯片,8位移位锁存器。 第8脚GND,电源地。 第16脚VCC,电源正极 第14脚DATA,串行数据输入口,显示数据由此进入,必须有时钟信号的配合才能移入。第13脚EN,使能口,当该引脚上为“1”时QA~QH口全部为“1”,为“0”时QA~QH的输出由输入的数据控制。 第12脚STB,锁存口,当输入的数据在传入寄存器后,只有供给一个锁存信号才能将移入的数据送QA~QH口输出。 第11脚CLK,时钟口,每一个时钟信号将移入一位数据到寄存器。 第10脚RESET,复位口,只要有复位信号,寄存器内移入的数据将清空,显示屏不用该脚,一般接VCC。 第9脚DOUT,串行数据输出端,将数据传到下一个。 第15、1~7脚,并行输出口也就是驱动输出口,驱动LED。 IC(4)953的作用:行驱动管,功率管。其内部是两个CMOS管,1、3脚VCC,2、4脚控制脚,2脚控制7、8脚的输出,4脚控制5、6脚的输出,只有当2、4脚为“0”时,7、8、5、6才会输出,否则输出为高阻状态。 IC(5)TB62726的作用:LED驱动芯片,16位移位锁存器。 第1脚GND,电源地。 第24脚VCC,电源正极 第2脚DATA,串行数据输入 第3脚CLK,时钟输入. 第4脚STB,锁存输入. 第23脚输出电流调整端,接电阻调整 第22脚DOUT,串行数据输出 第21脚EN,使能输入其它功能与74HC595相似,只是TB62726是16位移位锁存器,并带输出电流调整功能,但在并行输出口上不会出现高电平,只有高阻状态和低电平状态。74HC595并行输出口有高电平和低电平输出.。TB62726与5026的引脚功能一样,结构相似。 二、LED显示屏常见信号的了解 1、CLK时钟信号:提供给移位寄存器的移位脉冲,每一个脉冲将引起数据移入或移出一位。数据口上的数据必须与时钟信号协调才能正常传送数据,数据信号的频率必须是时钟信号的频率的1/2倍。在任何情况下,当时钟信号有异常时,会使整板显示杂乱无章。 2、STB锁存信号:将移位寄存器内的数据送到锁存器,并将其数据内容通过驱动电路点亮LED显示出来。但由于驱动电路受EN使能信号控制,其点亮的前提必须是使能为开启状态。锁存信号也须要与时钟信号协调才能显示出完整的图象。在任何情况下,当锁存信号有异常时,会使整板显示杂乱无章。 3、EN使能信号:整屏亮度控制信号,也用于显示屏消隐。只要调整它的占空比就可以控制亮度的变化。当使能信号出现异常时,整屏将会出现不亮、暗亮或拖尾等现象。数据信号:提供显示图象所需要的数据。必须与时钟信号协调才能将数据传送到任何一个显示点。一般在显示屏中红绿蓝的数据信号分离开来,若某数据信号短路到正极或负极时,则对应的该颜色将会出现全亮或不亮,当数据信号被悬空时对应的颜色显示情况不定。 4、ABCD行信号:只有在动态扫描显示时才存在,ABCD其实是二进制数,A是最低位,如果用二进制表示ABCD信号控制最大范围是16行(1111),1/4扫描中只要AB信号就可以了,因为AB信号的表示范围是4行(11)。当行控制信号出现异常时,将会出现显示错位、高亮或图像重叠等现象。 三、常见故障处理手段(工具:万用表、电烙铁、刀片、螺丝刀、镊子……等。) 四、LED电子显示屏的维修方法判断问题必须先主后次方式的处理,将明显的、严重的先处理,小问题后处理。短路应为最高优先级。 1、电阻检测法,将万用表调到电阻档,检测一块正常的电路板的某点的到地电阻值,再检测另一块相同的电路板的同一个点测试与正常的电阻值是否有不同,若不同则就确定了问题的范围。 2、电压检测法,将万用表调到电压档,检测怀疑有问题的电路的某个点的到地电压,比较是否与正常值相似,否则确定了问题的范围。 3、短路检测法,将万用表调到短路检测挡(有的是二极管压降档或是电阻档,一般具有报警功能),检测是否有短路的现象出现,发现短路后应优先解决,使之

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值