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
-🔖此文章仅作为个人学习探索知识的总结,不作为他人或引用者的理论依据,由于学识所限,难免会出现错误或纰漏,欢迎大家指正。
相关文章:
STM32 +合宙1.54“ 电子墨水屏(e-paper)驱动显示示例
STM32 合宙1.54“ 电子墨水屏(e-paper)驱动显示示例 📍相关篇《Arduino框架下ESP32/ESP8266合宙1.54“ 电子墨水屏(e-paper)驱动显示示例》🔖程序是从GooDisplay品牌和微雪电子下同型号规格墨水屏的示例程序…...
使用Postman和JMeter进行signature签名
一、前言 有些接口的请求会带上sign(签名)进行请求,各接口对sign的签名内容、方式可能不一样,但一般都是从接口的入参中选择部分内容组成一个字符串,然后再进行签名操作, 将结果赋值给sign; 完整规范的接口文档都会…...
uni-app nvue vue3 setup中实现加载webview,解决nvue中获取不到webview实例的问题
注意下面的方法只能在app端使用, let wv plus.webview.create("","custom-webview",{plusrequire:"none", uni-app: none, width: 300,height:400,top:uni.getSystemInfoSync().statusBarHeight44 }) wv.loadURL("https://ww…...
IPD(集成产品开发)—核心思想
企业发展到一定阶段就会遇到管理瓶颈,IPD流程是一种高度结构化的产品开发流程,它集成了业界很多优秀的产品开发方法论,像搭积木一样的组合成一种非常有效的流程。如果我们能根据企业的规模和行业特点,对全流程的IPD进行合适的裁剪…...
uniapp android 原生插件开发-测试流程
前言 最近公司要求研究一下 uniapp 的 android 原生插件的开发,为以后的工作做准备。这篇文章记录一下自己的学习过程,也帮助一下有同样需求的同学们 : ) 一、下载安装Hbuilder X , Android studio(相关的安装配置过程网上有很多,…...
MyCAT从入门到实战(配置文件介绍)
用户(user) 配置文件位置mycat/conf/user/root.user.json。这个配置文件主要是用来配置MyCAT的登录用户 的,也就是我们连接8066这个端口的用户信息。 [rootservice bin]# cat /usr/local/mycat/conf/users/root.user.json {"dialect&q…...
【LeetCode-300】最长递增子序列(动归)
目录 题目描述 解法1:动态规划 代码实现 题目链接 题目描述 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例…...
Mysterious-GIF-攻防世界-MISC
题目简介: 下载得到gif文件,十六进制编辑器查看,发现末尾有50 4B 03 04文件头。提取后保存为zip文件。 解压该zip文件,得到temp.zip。十六进制编辑器查看temp.zip,会发现有多个文件头和文件尾。 用binwalk分离temp.zi…...
【数据结构和算法初阶(C语言)】链表-单链表(手撕详讲单链表增删查改)
目录 1.前言:顺序表回顾: 1.1顺序表的优缺点 2.主角----链表 2.1链表的概念 2.2定义一个单链表的具体实现代码方式 3.单链表对数据的管理----增删查改 3.1单链表的创建 3.2单链表的遍历实现 3.2.1利用遍历实现一个打印我们链表内容的函数的函数…...
【Go语言】Go语言中的切片
Go语言中的切片 1.切片的定义 Go语言中,切片是一个新的数据类型数据类型,与数组最大的区别在于,切片的类型中只有数据元素的类型,而没有长度: var slice []string []string{"a", "b", "c…...
Qt程序设计-钟表自定义控件实例
本文讲解Qt钟表自定义控件实例。 效果如下: 创建钟表类 #ifndef TIMEPIECE_H #define TIMEPIECE_H#include <QWidget> #include <QPropertyAnimation> #include <QDebug> #include <QPainter> #include <QtMath>#include <QTimer>#incl…...
Redis的发布订阅功能教程,实现实时消息和key过期事件通知功能
Redis的发布订阅 Redis的发布/订阅(Pub/Sub)功能是一种消息传递模式,用于实现消息发布者(publisher)和订阅者(subscriber)之间的消息通信。在这种模式下,消息的发送者(发布者)将消息发送到特定的频道(channel),而订阅了该频道的接收者(订阅者)将会接收到这些消息…...
4核8g服务器能支持多少人访问?
腾讯云4核8G服务器支持多少人在线访问?支持25人同时访问。实际上程序效率不同支持人数在线人数不同,公网带宽也是影响4核8G服务器并发数的一大因素,假设公网带宽太小,流量直接卡在入口,4核8G配置的CPU内存也会造成计算…...
【Android】切换系统全局语言设置
前两种为应用内部处理,第三种为发送广播由系统服务进行处理 使用反射 这种会直接将安卓设置内的语言列表清空,然后将选择的语言设置为系统语言 该方法存在问题,在首次开机后设置会导致国外应用进不去(只对于here地图个别版本) /*** 设置语言…...
【递归】【回溯】Leetcode 112. 路径总和 113. 路径总和 II
【递归】【回溯】Leetcode 112. 路径总和 113. 路径总和 II 112. 路径总和解法:递归 有递归就有回溯 记得return正确的返回上去 113. 路径总和 II解法 递归 如果需要搜索整棵二叉树,那么递归函数就不要返回值 如果要搜索其中一条符合条件的路径ÿ…...
AxureCloud配置文件详细介绍
AxureCloud配置文件详细介绍 原文地址:https://docs.axure.com/axure-cloud/business/custom-settings-json/ 通过修改 customsettings.json 可以修改AxureCloud私有部署的域名、端口、HTTPS、存储目录、是否开启插件等, 默认安装的路径为: C:\Program Files\Axure…...
Centos开机网卡自启动失败
问题背景 每次都要手动启动在这里插入代码片 解决方案: 关闭 NetworkManager 服务 systemctl disable NetworkManager systemctl stop NetworkManager重启就会发现网卡已经可以自动启动了...
华为OD技术面试案例3-2024年
技术一面: 1.手撕代码,算法题: 【最小路径和】 手撕代码通过,面试官拍了照片 2.深挖项目,做过的自认为最好的一个项目,描述做过的项目的工作过程,使用到哪些技术? 技术二面&…...
全面升级!Apache HugeGraph 1.2.0版本发布
图数据库以独特的数据管理和分析能力,在企业数智化转型的过程中正在成为数据治理的核心,根据IDC调研显示,95%的企业认为图数据库是重要的数据管理工具,超过65%的厂商认为在业务上图数据库优于其他选择,尤其是在金融风控…...
WinCC如何与三菱Q系列PLC进行以太网通讯
本文主要描述人机界面WinCC如何与三菱Q系列PLC进行以太网通讯,主要介绍了CPU自带以太网口和扩展以太网模块两种情况以及分别使用TCP、UDP两种协议进行通讯组态步骤及其注意事项。 一、 说明 WinCC从V7.0 SP2版本开始增加了三菱以太网驱动程序,支持和三…...
基于java的叙事之眼系统自动化测试
1.公共类(Utils)这是一个叙事之眼写小说自动化测试的公共工具类,进行Selenium 自动化测试,所有测试用例都可以共用它,统一创建、管理 Chrome 浏览器驱动,打开测试页面,设置等待时间,…...
为什么AI读脸术部署总失败?OpenCV DNN轻量模型避坑指南
为什么AI读脸术部署总失败?OpenCV DNN轻量模型避坑指南 1. 项目背景与价值 AI读脸术(年龄与性别识别)是计算机视觉中最实用的技术之一,但很多开发者在部署过程中经常遇到各种问题。模型加载失败、推理速度慢、环境依赖复杂、镜像…...
安立Anritsu MS9740B台式光谱分析仪概述
安立Anritsu MS9740B台式光谱分析仪概述安立MS9740B是一款高性能台式光谱分析仪,广泛应用于光通信、激光器测试、光纤传感等领域。其设计兼顾高精度与操作便捷性,支持波长范围覆盖600至1750 nm,分辨率带宽可达0.05 nm。主要技术参数波长范围&…...
tinyalsa(0)
先给你一个完整配置 采样率(rate) 48000 声道数(channels) 2(左右声道) 采样格式 16bit(2字节) period_size 480 period_count 4一、先从“声音本…...
高效WebLogic安全检测工具:5步完成专业漏洞扫描实战
高效WebLogic安全检测工具:5步完成专业漏洞扫描实战 【免费下载链接】WeblogicScan Weblogic一键漏洞检测工具,V1.5,更新时间:20200730 项目地址: https://gitcode.com/gh_mirrors/we/WeblogicScan WeblogicScan是一款专注…...
Linux输入子系统实战:从struct input_event到鼠标、键盘、触屏事件解析与编程
1. Linux输入子系统入门:从设备文件到事件流 刚接触Linux输入子系统时,我花了整整三天才搞明白/dev/input/eventX这些神秘文件背后的门道。简单来说,Linux把所有的输入设备——键盘、鼠标、触摸屏、游戏手柄——都抽象成了文件。当你按下键盘…...
5G/4G流量卡技术原理与合规选购实战(2026最新)
随着移动互联网、物联网、远程办公的普及,流量卡(数据卡、上网卡)成为很多用户的刚需。但市面上产品鱼龙混杂,虚量、限速、封卡、售后失联等问题频发。本文从技术原理、合规标准、选购要点、平台选择四个维度,做一次完…...
从零到一:PrimeTime静态时序分析入门指南
从零到一:PrimeTime静态时序分析入门指南 在数字芯片设计的最后阶段,时序收敛往往是工程师们最头疼的问题之一。想象一下,当你精心设计的电路在仿真中表现完美,却因为时序问题无法通过物理实现,那种挫败感足以让任何工…...
ADS 2023 保姆级教程:从巴特沃斯到椭圆,手把手仿真你的第一个低通滤波器
ADS 2023 实战指南:三步完成低通滤波器设计与仿真 刚打开ADS软件时,那些密密麻麻的工具栏和陌生的术语确实容易让人望而生畏。但别担心,现代EDA工具早已将复杂的滤波器设计过程封装成了可视化操作。就像用智能手机拍照不需要理解图像传感器原…...
艾可瑞妥单抗EPKINLY真实世界经验:缓解率数据与中性粒细胞减少、发热等副作用的预防及处理
艾可瑞妥单抗(EPKINLY)作为一种创新型的双特异性T细胞衔接剂,在复发或难治性弥漫性大B细胞淋巴瘤(DLBCL)的治疗中展现出显著的疗效。缓解率数据多项真实世界研究数据支持了EPKINLY在治疗DLBCL中的显著疗效。例如&#…...
