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()
c 复制代码
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()
c 复制代码
//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中:
c 复制代码
#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,将更新。
c 复制代码
链接:https://pan.baidu.com/s/1_elRESwoOvCxe2ataPG4ug?pwd=em1y 
提取码:em1y

📗微雪对应型号驱动程序

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

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

相关推荐
D.....l13 小时前
STM32学习(MCU控制)(NVIC)
stm32
三佛科技-1873661339713 小时前
FT8370A/B/C/CD/CP高性能次边同步整流芯片典型电路及管脚定义
stm32·单片机·嵌入式硬件
D.....l13 小时前
STM32学习(MCU控制)(WiFi and MQTT)
stm32·单片机·学习
Net_Walke18 小时前
【STM32】CLion STM32开发环境搭建
stm32·单片机
laocooon52385788621 小时前
运行当前位置,显示文件全名,检查是否扩展名多次重叠
stm32·单片机·嵌入式硬件
沉醉不知归路121 小时前
cursor导入keil工程详细步骤
stm32
D.....l1 天前
STM32学习(MCU控制)(I2C 模拟)
stm32·单片机·学习
A9better1 天前
嵌入式开发学习日志42——stm32之SPI工作方式
stm32·单片机·嵌入式硬件·学习
D.....l1 天前
STM32学习(MCU控制)(SysTick and TIM)
stm32·单片机·学习
python百炼成钢1 天前
10.串口
linux·stm32·单片机·嵌入式硬件