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
  • 📌同类型的,微雪品牌的相关资料参考:https://www.waveshare.net/wiki/1.54inch_e-Paper_Module

🔖使用GooDisplay仅仅是实现刚刚点亮屏幕,点亮屏幕是迈出的重要的第一步,基于标准库,使用STM32f103芯片,软件SPI方式。

  • 🌾使用微雪电子同型号规格的墨水屏驱动示例代码成功驱动。内容显示正常,包含完整的对应显示接口函数,完全可以拿来直接使用。完全兼容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);  //SWRESETEpaper_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  0xA8EPD_W21_WriteCMD(0x3a);EPD_W21_WriteDATA(0x1A);                     // 4 dummy lines per gateEPD_W21_WriteCMD(0x3b);EPD_W21_WriteDATA(0x08);                     // 2us per lineEPD_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  SCLPA6     ------> 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_SCKPA7     ------> 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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/496925.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【亚马逊云新春特辑③】构生成式 AI 文生图工具之借助ControlNet进行AI绘画创作【使用OpenPose优化人物二维码】

文章目录 2.1 使用OpenPose优化人物二维码1&#xff09;数据及环境准备2&#xff09;导入骨架数据并启用OpenPose控制单元3&#xff09;导入二维码并生成美化后的二维码图片 2.1 使用OpenPose优化人物二维码 在上一节体验到了使用ControlNet并结合QR Code生成二维码&#xff0…

一键安装|卸载 mysql 8.2.0 shell脚本

场景&#xff1a;为了在无网、外网 mysql 安装方便&#xff0c;这里分享一个自己编写得 shell脚本 这里以当前最新版 mysql 8.2.0&#xff1b;centos-7 二进制包下载&#xff1a; 下载地址 mysql_install.sh #!/bin/bash # 解压安装包 tar -xf mysql-8.2.0-linux-glibc2.17-x8…

【机器人最短路径规划问题(栅格地图)】基于蚁群算法求解

基于蚁群算法求解机器人最短路径规划问题的仿真结果 仿真结果 收敛曲线变化趋势 蚁群算法求解最优解的机器人运动路径 各代蚂蚁求解机器人最短路径的运动轨迹

C语言:数据在内存中的存储

C语言&#xff1a;数据在内存中的存储 整数存储原码、反码、补码转换规则数据与内存的关系 大小端字节序浮点数存储IEEE 754标准存储过程取用过程 数据的存储范围 整数存储 原码、反码、补码 整数的2进制表示方法有三种&#xff0c;即原码、反码和补码 三种表示方法均有符号位…

Swagger接口文档管理工具

Swagger 1、Swagger1.1 swagger介绍1.2 项目集成swagger流程1.3 项目集成swagger 2、knife4j2.1 knife4j介绍2.2 项目集成knife4j 1、Swagger 1.1 swagger介绍 官网&#xff1a;https://swagger.io/ Swagger 是一个规范和完整的Web API框架&#xff0c;用于生成、描述、调用和…

捕获在野SMBGhost本地提权攻击样本

前言 从Windows10 v1903/Windows Server v1903开始&#xff0c;微软在协议SMB3.1.1中开启了对数据压缩传输的支持&#xff0c;但是由于SMB没有正确处理压缩的数据包&#xff0c;在客户端/服务端解压数据的时候&#xff0c;没有对COMPRESSIN_TRANSFORM_HEADE结构进行安全校验&a…

Unity中的UI系统之GUI

目录 概述工作原理和主要作用基础控件重要参数及文本和按钮多选框和单选框输入框和拖动条图片绘制和框 复合控件工具栏和选择网络滚动视图和分组窗口 自定义整体样式自定义皮肤样式 概述 什么是UI系统 UI是User Interface&#xff08;用户界面&#xff09;的简称&#xff0c;用…

Java特性之设计模式【命令模式】

一、命令模式 概述 ​ 命令模式&#xff08;Command Pattern&#xff09;是一种数据驱动的设计模式&#xff0c;它属于行为型模式。请求以命令的形式包裹在对象中&#xff0c;并传给调用对象。调用对象寻找可以处理该命令的合适的对象&#xff0c;并把该命令传给相应的对象&…

springcloud -服务注册治理之nacos

任务 查询&#xff1a; CPU密集型和IO密集型对 CPU内核之间的关系。—线程池 什么是Nacos **服务&#xff08;Service&#xff09;**是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理&#xff1a; Kubernetes Service gRPC & Dubbo RPC S…

打卡今天内存管理

首先我们的体系结构是这样的&#xff0c;根据小林coding 来写的笔记 寄存器&#xff0c;速度非常快&#xff0c; 32位的可以存4个字节&#xff0c;64位的可以存8个字节 多少位只是在32位以上 地址空间 分为两种地址空间 &#xff1a; 物理&#xff0c;逻辑 地址空间 地址空间…

【文献管理】zotero插件4——获取知网pdf、中文文献识别与目录生成

文章目录 zotero获取知网PDFzotero——中文文献识别&#xff08;茉莉花插件&#xff09;学位论文目录生成 zotero获取知网PDF zotero——中文文献识别&#xff08;茉莉花插件&#xff09; 为下载的学位论文添加目录中文文献识别&#xff1a;jasminum 下载pdflabs下载茉莉花插…

百度翻译相关介绍

官网地址&#xff1a;百度翻译(baidu.com) 通用文本翻译API 通用翻译API是百度翻译依托领先的自然语言处理技术推出的在线文本翻译服务&#xff0c;可支持中、英、日、韩等200语言互译&#xff0c;100语种自动检测。 传入待翻译内容&#xff0c;并指定要翻译的源语言&#xf…