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方式。

  • 🌾使用微雪电子同型号规格的墨水屏驱动示例代码成功驱动。内容显示正常,包含完整的对应显示接口函数,完全可以拿来直接使用。(✨推荐✨)
  • 🐛使用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的快速刷屏指令,

📄引脚定义

  • 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版本: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

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

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

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

相关文章

【C#】忽略大小的替换字符串

结果 代码 string a"aAAAAAAaBBaaCC"; string b Strings.Replace(a, "a", "D", 1, -1, CompareMethod.Text);

php基础学习之错误处理(其一)

一&#xff0c;错误处理的概念 错误处理指的是系统(或者用户)在执行某些代码的时候&#xff0c;发现有错误&#xff0c;就会通过错误处理的形式告知程序员&#xff0c;俗称报错 二&#xff0c;错误分类 语法错误&#xff1a;书写的代码不符合 PHP 的语法规范&#xff0c;语法错…

力扣刷题:383.赎金信

题目&#xff1a; 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1&…

mac电脑监控软件哪个好

在Mac电脑使用日益普及的今天&#xff0c;企业对于Mac终端的安全管理需求也日益增长。Mac电脑监控软件作为一种有效的管理工具&#xff0c;能够帮助企业提高数据安全性和员工工作效率。 在众多Mac电脑监控软件中&#xff0c;域智盾软件以其卓越的功能和性能脱颖而出&#xff0c…

3D工业相机及品牌集合

3D相机可以获取物理世界的空间信息&#xff0c;即立体三维的物理信息&#xff0c;不仅可以拍摄到场景的二维图像&#xff0c;而且能获取物体之间的位置关系&#xff0c;再经过进一步深化处理&#xff0c;还能完成三维建模等应用。 3D相机三种方案 1、结构光 通常采用特定波长…

R语言数学建模(一)—— 基础知识

R语言数学建模&#xff08;一&#xff09;—— 基础知识 文章目录 R语言数学建模&#xff08;一&#xff09;—— 基础知识前言一、建模软件1.1 软件建模的基础1.2 模型的分类1.3 不同类型模型间的联系1.4 一些术语1.5 建模如何适应数据分析过程 二、Tidyverse基础2.1 tidyvers…

面试数据库篇(mysql)- 02定位慢查询和分析

定位慢查询 聚合查询多表查询表数据量过大查询深度分页查询表象:页面加载过慢、接口压测响应时间过长(超过1s) 方案一:开源工具 调试工具:Arthas 运维工具:Prometheus 、Skywalking 方案二:MySQL自带慢日志 慢查询日志记录了所有执行时间超过指定参数(long_query_tim…

网络安全之安全事件监测

随着人们对技术和智能互联网设备依赖程度的提高&#xff0c;网络安全的重要性也在不断提升。因此&#xff0c;我们需要不断加强网络安全意识和措施&#xff0c;确保网络环境的安全和稳定。 网络安全的重要性包含以下几点&#xff1a; 1、保护数据安全&#xff1a;数据是组织和…

【Web安全靶场】sqli-labs-master 1-20 BASIC-Injection

sqli-labs-master 1-20 BASIC-Injection 文章目录 sqli-labs-master 1-20 BASIC-Injection第一关-报错注入第二关-报错注入第三关-报错注入第四关-报错注入第五关-报错注入-双查询注入第六关-报错注入-双查询注入第七关-outfile写入webshell第八关-布尔盲注第九关-时间盲注第十…

【UE 材质】水晶材质

效果 步骤 1. 先在Quixel Bridge上下载冰纹理 2. 新建一个材质&#xff0c;这里命名为“M_Ice”并打开&#xff0c;添加如下纹理采样节点 继续添加如下节点 此时效果如下&#xff1a; 可以看到此时的材质颜色比较浅&#xff0c;如果希望颜色深一点可以继续添加如下节点 此时效…

lv21 QT对话框3

1 内置对话框 标准对话框样式 内置对话框基类 QColorDialog, QErrorMessage QFileDialog QFontDialog QInputDialog QMessageBox QProgressDialogQDialog Class帮助文档 示例&#xff1a;各按钮激发对话框实现基类提供的各效果 第一步&#xff1a;实现组件布局&…

HarmonyOS—使用数据模型和连接器

Serverless低代码开发平台是一个可视化的平台&#xff0c; 打通了HarmonyOS云侧与端侧能力&#xff0c;能够轻松实现HMS Core、AGC Serverless能力调用。其中&#xff0c;数据模型和连接器是两大主要元素。开发者在使用DevEco Studio的低代码功能进行开发时&#xff0c;可以使用…

express+mysql+vue,从零搭建一个商城管理系统5--用户注册

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、新建user表二、安装bcryptjs、MD5、body-parser三、修改config/db.js四、新建config/bcrypt.js五、新建models文件夹和models/user.js五、index.js引入使用body-parser六、修改routes/user.js七、启动项…

书生·浦语大模型全链路开源体系介绍

背景介绍 随着人工智能技术的迅猛发展&#xff0c;大模型技术已成为当今人工智能领域的热门话题。2022 年 11 月 30 日&#xff0c;美国 OpenAI 公司发布了 ChatGPT 通用型对话系统 并引发了全球 的极大关注&#xff0c;上线仅 60 天月活用户数便超过 1 亿&#xff0c;成为历史…

【实践总结】文件上传可能导致的DoS

通过CVE-2023-24998了解上传的可能隐患 Apache Commons FileUpload场景 条件1&#xff1a; &#xff08;影响版本&#xff09; <!-- Apache Commons FileUpload --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-file…

【小沐学QT】QT学习之OpenGL开发笔记

文章目录 1、简介2、Qt QOpenGLWidget gl函数3、Qt QOpenGLWidget qt函数4、Qt QOpenGLWindow5、Qt glut6、Qt glfw结语 1、简介 Qt提供了与OpenGL实现集成的支持&#xff0c;使开发人员有机会在更传统的用户界面的同时显示硬件加速的3D图形。 Qt有两种主要的UI开发方…

【Azure 架构师学习笔记】-Azure Synapse -- Link for SQL 实时数据加载

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Synapse】系列。 前言 Azure Synapse Link for SQL 可以提供从SQL Server或者Azure SQL中接近实时的数据加载。通过这个技术&#xff0c;使用SQL Server/Azure SQL中的新数据能够几乎实时地传送到Synapse&#xff08;…

前端路由与后端路由的区别

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

SQL注入漏洞解析--less-7

我们先看一下第七关 页面显示use outfile意思是利用文件上传来做 outfile是将检索到的数据&#xff0c;保存到服务器的文件内&#xff1a; 格式&#xff1a;select * into outfile "文件地址" 示例&#xff1a; mysql> select * into outfile f:/mysql/test/one f…

Vue源码系列讲解——实例方法篇【一】(数据相关方法)

目录 0. 前言 1. vm.$watch 1.1 用法回顾 1.2 内部原理 2. vm.$set 2.1 用法回顾 2.2 内部原理 3. vm.$delete 3.1 用法回顾 3.2 内部原理 0. 前言 与数据相关的实例方法有3个&#xff0c;分别是vm.$set、vm.$delete和vm.$watch。它们是在stateMixin函数中挂载到Vue原…