当前位置: 首页 > news >正文

HAL STM32 HW I2C DMA + SSD1306/SH1106驱动示例

HAL STM32 HW I2C DMA + SSD1306/SH1106驱动示例


  • 📍硬件I2C DMA驱动参考:https://blog.csdn.net/weixin_45065888/article/details/118225993

  • 🔖本工程基于STM32F103VCT6,驱动程序独立,可以移植到任意STM32型号上使用。

在这里插入图片描述

📑字体大小说明

  • 🌿该驱动程序ASCII字符集类型大小包含:6X8、6X12、8X16,三种。其中6X8和8X16共用一个API函数调用,形参不同。
//针对F6x8、F8X16字体
void OLED_show_char2(uint8_t row, uint8_t col, uint8_t chr, uint8_t size)
{uint8_t x ;uint8_t y;if(size == 8){x = col * 6;y = row * 8;}else {x = col * 8;y = row * 16;		}uint8_t temp, t, t1;uint8_t y0 = y;chr = chr - ' ';if(size == 16) {for(t = 0; t < 8; t++) {temp = F8X16[chr*16+t];for(t1 = 0; t1 < 8; t1++) {if(temp & 0x01)OLED_draw_point(x, y, PEN_WRITE);elseOLED_draw_point(x, y, PEN_CLEAR);temp >>= 1;y++;if((y - y0) == 8) {y = y0;x++;break;}}}for(t = 0; t < 8; t++) {temp = F8X16[chr*16+t+8];for(t1 = 0; t1 < 8; t1++) {if(temp & 0x01)OLED_draw_point(x-8, y+8, PEN_WRITE);elseOLED_draw_point(x-8, y+8, PEN_CLEAR);temp >>= 1;y++;if((y - y0) == 8) {y = y0;x++;break;}}} } else {for(t = 0; t < 6; t++) {temp = F6x8[chr][t];for(t1 = 0; t1 < 8; t1++) {if(temp & 0x01)OLED_draw_point(x, y, PEN_WRITE);elseOLED_draw_point(x, y, PEN_CLEAR);temp >>= 1;y++;if((y - y0) == 8) {y = y0;x++;break;}}}}
}
//6X12字体
void OLED_show_char(uint8_t row, uint8_t col, uint8_t chr)
{uint8_t x = col * 6;uint8_t y = row * 12;uint8_t temp, t, t1;uint8_t y0 = y;chr = chr - ' ';for(t = 0; t < 12; t++) {temp = asc2_1206[chr][t];for(t1 = 0; t1 < 8; t1++) {if(temp & 0x80)OLED_draw_point(x, y, PEN_WRITE);elseOLED_draw_point(x, y, PEN_CLEAR);temp <<= 1;y++;if((y - y0) == 12) {y = y0;x++;break;}}}
}

🛠 0.96" SSD1306和1.3" SH1106切换,代码调整

void OLED_set_pos(uint8_t x, uint8_t y)
{OLED_CMDbuf[y][0] = 0x00;OLED_CMDbuf[y][1] = 0xb0 + y;OLED_CMDbuf[y][2] = 0x10;OLED_CMDbuf[y][3] = 0x00; //ssd1306:0x00;sh1106:0x02}

🔨STM32CubeMX配置

  • 🌿开启硬件硬件I2C:
    在这里插入图片描述

  • 🌿勾选I2C DMA 发送数据(TX):

在这里插入图片描述

  • 🌿中断(NVIC)列表勾选I2C1 event interrupt,优先级配置,根据个人使用环境配置。
    在这里插入图片描述

📝测试代码

int main(void)
{/* USER CODE BEGIN 1 */
//    float num = 3.14;/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_DMA_Init();MX_I2C1_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */OLED_init(); //OLED初始化OLED_operate_gram(PEN_CLEAR);//清缓存/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while(1) {/* USER CODE END WHILE *//* USER CODE BEGIN 3 */OLED_operate_gram(PEN_CLEAR);//清缓存OLED_showString(0, 2, (uint8_t*)"China Loong",16);OLED_show_string(2, 3, (uint8_t*)"perseverance");OLED_refresh_gram();//全局刷新HAL_Delay(1500);OLED_operate_gram(PEN_CLEAR);//清缓存OLED_show_string(3, 3, (uint8_t*)"Hello World");OLED_show_string(4, 3, (uint8_t*)"DISPLAY China");OLED_refresh_gram();//全局刷新HAL_Delay(1500);}/* USER CODE END 3 */
}

📚测试例程

链接:https://pan.baidu.com/s/1jkwfS7BmxVZHrDrhvrBWJw?pwd=h6s3 
提取码:h6s3

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

相关文章:

HAL STM32 HW I2C DMA + SSD1306/SH1106驱动示例

HAL STM32 HW I2C DMA SSD1306/SH1106驱动示例 &#x1f4cd;硬件I2C DMA驱动参考&#xff1a;https://blog.csdn.net/weixin_45065888/article/details/118225993 &#x1f516;本工程基于STM32F103VCT6&#xff0c;驱动程序独立&#xff0c;可以移植到任意STM32型号上使用。…...

grafana配置钉钉告警模版(一)

1、配置钉钉告警模版 创建钉钉告警模版&#xff0c;然后在创建钉钉告警时调用模版。 定义发送内容具体代码 my_text_alert_list 是模版名称后面再配置钉钉告警时需要调用。 {{/* 定义消息体片段 */}} {{ define "my_text_alert_list" }}{{ range . }}告警名称&…...

佳能2580的下载手册

凡是和电子产品有关的产品其内部都开始不断地进行内卷&#xff0c;在不断地内卷背后&#xff0c;意味着科技更新和换代&#xff0c;自己也入手了一台佳能2580的打印机&#xff0c;一台相对比较老式的打印机&#xff0c;以此不断地自己想要进行打印的需要。 下载的基础步骤&…...

YOLO-World:实时开放词汇目标检测

paper&#xff1a;https://arxiv.org/pdf/2401.17270.pdf Github&#xff1a;GitHub - AILab-CVC/YOLO-World: Real-Time Open-Vocabulary Object Detection online demo&#xff1a;https://huggingface.co/spaces/stevengrove/YOLO-World 目录 0. 摘要 1. 引言 2. 相关工…...

Unity中关于群组的一些组件

前言 在游戏开发环境中&#xff0c;UI组件是构建玩家交互界面的基础。以下是一些常见UI组件的详细解释和它们适用的场景&#xff0c;方便我们更好地理解和使用这些工具。 1. Graphic Raycaster Graphic Raycaster组件是游戏UI交互的核心。在Unity等游戏引擎中&#xff0c;当玩…...

面向对象详解,面向对象的三大特征:封装、继承、多态

文章目录 一、面向对象与面向过程1、什么是面向过程&#xff1f;2、什么是面向对象&#xff1f; 二、类与对象1. 初识对象2. 类的成员方法2.1 类的定义和使用2.2 成员方法 3. 类和对象4. 魔法方法1. _ _ inint _ _ 构造方法2. _ _ str _ _ 字符串方法3. _ _ lt _ _ 小于符号比较…...

【阿里云服务器的一些使用坑】都是无知的泪水呀

发生了什么&#xff1f; 我想学习一下关于Java的MySQL、Nginx 相关的知识。然后就用首次优惠注册的阿里云&#xff0c;都没有搞清楚实例&#xff0c;镜像&#xff0c;带宽&#xff0c;磁盘。然后。因为一不小心——我想去换一个Ubuntu的镜像而不是CentOS。就把实例给释放啊。之…...

Docker的常用命令||Docker是个流行的容器化平台,它允许你打包、分发和运行应用程序。

Docker是一个流行的容器化平台&#xff0c;它允许你打包、分发和运行应用程序。以下是一些常用的Docker命令及其示例用法&#xff1a; 1. **docker run**: 用于运行一个新的容器实例。 docker run <image_name> 例如&#xff0c;运行一个Nginx容器&#xff1a; docker ru…...

汽车电子论文学习--电动汽车电机驱动系统动力学特性分析

关键重点&#xff1a; 1. 汽车的低速转矩存在最大限制&#xff0c;受附着力限制&#xff0c;因路面不同而变化。 2. 起步加速至规定转速的时间可以计算得到&#xff1a; 3. 电机额定功率的计算方式&#xff1a; 可以采取最高设计车速90%或120km/h匀速行驶的功率作为电机额定功…...

c++的一些陌生用法记录

c的一些陌生用法记录 1. 完美转发std::forward<decltype(PH1)>(PH1)static的用法 1. 完美转发std::forward<decltype(PH1)>(PH1) static的用法 static函数与普通函数的区别&#xff1a; 用static修饰的函数&#xff0c;本限定在本源码文件中&#xff0c;不能被本源…...

Vue | (三)使用Vue脚手架(中)| 尚硅谷Vue2.0+Vue3.0全套教程

文章目录 &#x1f4da;Todo-list 案例&#x1f407;组件化编码流程&#xff08;通用&#xff09;&#x1f407;实现静态组件&#x1f407;展示动态数据&#x1f407;交互⭐️添加一个todo⭐️todo勾选实现⭐️删除功能实现⭐️底部统计功能实现⭐️底部全选功能实现⭐️底部一…...

TenorFlow多层感知机识别手写体

文章目录 数据准备建立模型建立输入层 x建立隐藏层h1建立隐藏层h2建立输出层 定义训练方式建立训练数据label真实值 placeholder定义loss function选择optimizer 定义评估模型的准确率计算每一项数据是否正确预测将计算预测正确结果&#xff0c;加总平均 开始训练画出误差执行结…...

Java基础(二十六):Java8 Stream流及Optional类

Java基础系列文章 Java基础(一)&#xff1a;语言概述 Java基础(二)&#xff1a;原码、反码、补码及进制之间的运算 Java基础(三)&#xff1a;数据类型与进制 Java基础(四)&#xff1a;逻辑运算符和位运算符 Java基础(五)&#xff1a;流程控制语句 Java基础(六)&#xff1…...

qt - 19种精美软件样式

qt - 19种精美软件样式 一、效果演示二、核心程序三、下载链接 一、效果演示 二、核心程序 #include "mainwindow.h"#include <QtAdvancedStylesheet.h> #include <QmlStyleUrlInterceptor.h>#include "ui_mainwindow.h" #include <QDir&g…...

vue 使用docx库生成word表格文档

在Vue.js中生成Word表格文档&#xff0c;可以通过前端库来实现。这些库可以帮助我们轻松地将HTML表格转换为Word文档&#xff08;通常是.docx格式&#xff09;。以下是一些流行的前端库&#xff0c;它们可以用于在Vue项目中生成Word表格文档&#xff1a; docx…...

ElementUI table表格组件实现双击编辑单元格失去焦点还原,支持多单元格

在使用ElementUI table表格组件时有时需要双击单元格显示编辑状态&#xff0c;失去焦点时还原表格显示。 实现思路&#xff1a; 在数据中增加isFocus:false.控制是否显示在table中用cell-dblclick双击方法 先看效果&#xff1a; 上源码&#xff1a;在表格模板中用scope.row…...

Java基于SpringBoot+Vue的图书管理系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

【云安全】Hypervisor与虚拟机

Hypervisor 也被称为虚拟机监视器&#xff08;Virtual Machine Monitor&#xff0c;VMM&#xff09;&#xff0c;主要作用是让多个操作系统可以在同一台物理机上运行。 Type-1 Hypervisor 与 Typer-2 Hypervisor Type-1 Hypervisor 直接安装在物理服务器上&#xff0c;不依赖…...

JS文本加密方法探究

在前端开发中&#xff0c;有时候我们需要对敏感文本进行简单的加密&#xff0c;以提高安全性。本文将介绍一种基于 JavaScript 实现的文本加密方法&#xff0c;使用了 Base64、Unicode 和 ROT13 编码。 示例代码 function encodeText(text) {// Base64编码var base64Encoded …...

推荐彩虹知识付费商城免授权7.0源码

彩虹知识付费商城免授权7.0源码&#xff0c;最低配置环境 PHP7.2 1、上传源码到网站根目录&#xff0c;导入数据库文件&#xff1a;xydai.sql 2、修改数据库配置文件&#xff1a;/config.php 3、后台&#xff1a;/admin 账号&#xff1a;admin 密码&#xff1a;123456 4、前…...

有些路看起来很难走,其实是在带你慢慢变强

生活里&#xff0c;很多人都希望自己走的是一条轻松一点、顺利一点的路。最好努力了就能有结果&#xff0c;付出了就能被看见&#xff0c;遇到的问题也都能很快解决。可真正经历过一些事情后才会发现&#xff0c;人生并不会总按照理想的节奏前进。很多时候&#xff0c;那些让人…...

ssh远程登录的时候同一个秘钥可以用于多个不同服务器

可以看到&#xff1a;这2台服务器使用了同一个秘钥&#xff0c;现在都可以正常登录&#xff1a;可以看出来第二个云服务器有安全更新没有激活赶快要更新了。...

STM32CubeMX实战:串口中断配置与数据收发全解析

1. 从零开始搭建STM32CubeMX工程 第一次接触STM32CubeMX时&#xff0c;我被它强大的可视化配置功能惊艳到了。这个由ST官方推出的工具&#xff0c;简直就是嵌入式开发者的福音。相比传统的手动编写初始化代码&#xff0c;CubeMX通过图形界面就能完成大部分硬件配置&#xff0c;…...

3个高效步骤掌握Godot PCK解析与资源提取技术

3个高效步骤掌握Godot PCK解析与资源提取技术 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker Godot引擎作为开源游戏开发框架的代表&#xff0c;其特有的PCK资源打包格式为游戏分发提供了便利&#…...

G-Helper终极指南:如何免费优化华硕笔记本性能,告别Armoury Crate臃肿体验

G-Helper终极指南&#xff1a;如何免费优化华硕笔记本性能&#xff0c;告别Armoury Crate臃肿体验 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across …...

从零到一:基于SkyWalking构建微服务可观测性实践

1. 为什么微服务需要可观测性&#xff1f; 记得去年我们团队把一个单体应用拆分成五个微服务后&#xff0c;突然发现线上问题排查变得异常困难。有一次用户反馈订单支付超时&#xff0c;我们花了整整两天时间才定位到是风控服务调用了第三方接口导致的性能瓶颈。这种经历让我深…...

EPSON机器人通信避坑指南:TCP/IP协议在LS3-401S上的常见问题与解决方案

EPSON机器人通信避坑指南&#xff1a;TCP/IP协议在LS3-401S上的常见问题与解决方案 在工业自动化领域&#xff0c;EPSON LS3-401S机器人凭借其高精度和可靠性广受青睐。然而&#xff0c;在实际部署过程中&#xff0c;TCP/IP通信问题往往成为工程师们的"拦路虎"。本文…...

CertMagic故障恢复终极指南:如何从证书失效中快速恢复的10个关键步骤

CertMagic故障恢复终极指南&#xff1a;如何从证书失效中快速恢复的10个关键步骤 【免费下载链接】certmagic Automatic HTTPS for any Go program: fully-managed TLS certificate issuance and renewal 项目地址: https://gitcode.com/gh_mirrors/ce/certmagic CertMa…...

从概念到工具:实战构建基于clawhub skill的个人技能管理体系

最近在整理自己的技能树时&#xff0c;发现需要一个能直观管理个人技术栈的工具。尝试用clawhub skill框架搭建了一套解决方案&#xff0c;配合InsCode(快马)平台的快速部署能力&#xff0c;三天就做出了可实际使用的技能看板。记录下关键实现思路&#xff0c;或许对同样想系统…...

PCL-CE深度指南:从基础配置到高级定制的全流程解析

PCL-CE深度指南&#xff1a;从基础配置到高级定制的全流程解析 PCL-CE作为社区驱动的Minecraft启动器增强版&#xff0c;集成了多版本管理、智能模组兼容和网络优化等核心功能&#xff0c;为玩家提供高效便捷的游戏环境配置工具。无论是新手玩家还是资深爱好者&#xff0c;都能…...