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

STM32移植u8g2玩转oled 用软件iic实现驱动oled

移植u8g2到stm

int fputc(int ch,FILE *f)
{ITM_SendChar(ch);return (ch);
}void delay_us(uint32_t time)
{uint32_t i=8*time;while(i--);
}uint8_t STM32_gpio_and_delay(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
{//printf("%s:msg = %d,arg_int = %d\r\n",__FUNCTION__,msg,arg_int);switch(msg){case U8X8_MSG_DELAY_100NANO:		// delay arg_int * 100 nano seconds__NOP();break;case U8X8_MSG_DELAY_10MICRO:		// delay arg_int * 10 micro secondsfor (uint16_t n = 0; n < 320; n++){__NOP();}     break;case U8X8_MSG_DELAY_MILLI:			// delay arg_int * 1 milli secondHAL_Delay(1);break;case U8X8_MSG_DELAY_I2C:		    // arg_int is the I2C speed in 100KHz, e.g. 4 = 400 KHz//delay 5usdelay_us(5);						// arg_int=1: delay by 5us, arg_int = 4: delay by 1.25uscase U8X8_MSG_GPIO_I2C_CLOCK:		// arg_int=0: Output low at I2C clock pinif(arg_int == 1) {HAL_GPIO_WritePin(GPIOB, SCL2_Pin, GPIO_PIN_SET);}else if(arg_int == 0){HAL_GPIO_WritePin(GPIOB, SCL2_Pin, GPIO_PIN_RESET);  }          break;							// arg_int=1: Input dir with pullup high for I2C clock pincase U8X8_MSG_GPIO_I2C_DATA:		// arg_int=0: Output low at I2C data pin//  printf("U8X8_MSG_GPIO_I2C_DATA:%d\r\n",arg_int);if(arg_int == 1) {HAL_GPIO_WritePin(GPIOB, SDA2_Pin, GPIO_PIN_SET);}else if(arg_int == 0){HAL_GPIO_WritePin(GPIOB, SDA2_Pin, GPIO_PIN_RESET);  }         break;							// arg_int=1: Input dir with pullup high for I2C data pindefault:u8x8_SetGPIOResult(u8x8, 1);		// default return valuebreak;}return 1;
}

这里是驱动iic

	u8g2_t u8g2; // a structure which will contain all the data for one displayu8g2_Setup_ssd1306_i2c_128x64_noname_f(&u8g2, U8G2_R0, u8x8_byte_sw_i2c, STM32_gpio_and_delay);  // init u8g2 structureu8g2_InitDisplay(&u8g2); // send init sequence to the display, display is in sleep mode after this,u8g2_SetPowerSave(&u8g2, 0); // wake up displayint t;

这里可以驱动u8g2 具体作用后续学习

下面就基本上可以驱动成功 最主要是修改后的u8g2的图

相关文章:

STM32移植u8g2玩转oled 用软件iic实现驱动oled

移植u8g2到stm int fputc(int ch,FILE *f) {ITM_SendChar(ch);return (ch); }void delay_us(uint32_t time) {uint32_t i8*time;while(i--); }uint8_t STM32_gpio_and_delay(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) {//printf("%s:msg %d,arg_int …...

C++ 学习系列 -- string 实现

string是C标准库的重要部分&#xff0c;主要用于字符串处理。这里我们自己实现一个简单版本的 string. 一 思路 string 类中应该包含如下&#xff1a; 1. 类成员变量&#xff1a;char* m_data&#xff0c;利用 char* 指针存放字符串 2. 成员函数&#xff1a; 2.1 size(…...

C语言小练习(三)

&#x1f31e; “也许你感觉自己与周遭格格不入&#xff0c;但正是那些你一人度过的时光&#xff0c;让你变得越来越有意思&#xff0c;等有天别人终于注意到你的时候&#xff0c;他们就会发现一个比他们想象中更酷的人。”-《生活大爆炸》 Day03 &#x1f4dd; 一.选择题&…...

2023 js逆向爬虫 有道翻译 代码

前置条件&#xff1a;nodejs环境、安装 crypto 和 python3环境 js.js文件&#xff1a; const crypto require("crypto")function decode(resp_data) {g_o ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHlg_n ydsecre…...

【物联网无线通信技术】NFC从理论到实践(FM17XX)

NFC&#xff0c;全称是Near Field Communication&#xff0c;即“近场通信”&#xff0c;也叫“近距离无线通信”。NFC诞生于2004年&#xff0c;是基于RFID非接触式射频识别技术演变而来&#xff0c;由当时的龙头企业NXP(原飞利浦半导体)、诺基亚以及索尼联合发起。NFC采用13.5…...

Python爬虫猿人学逆向系列——第六题

题目&#xff1a;采集全部5页的彩票数据&#xff0c;计算全部中奖的总金额&#xff08;包含一、二、三等奖&#xff09; 地址&#xff1a;https://match.yuanrenxue.cn/match/6 本题比较简单&#xff0c;只是容易踩坑。话不多说请看分析。 两个参数&#xff0c;一个m一个f&…...

idea使用tomcat

1. 建立javaweb项目 2. /WEB-INF/web.xml项目配置文件 如果javaweb项目 先建立项目&#xff0c;然后在项目上添加框架支持&#xff0c;选择javaee 3. 项目结构 4.执行测试&#xff1a;...

搭建Tomcat HTTP服务:在Windows上实现外网远程访问的详细配置与设置教程

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 前言 Tomcat作为一个轻量级的服务器&#xff0c;不仅名字很有趣&#xff0…...

Java学习笔记——继承(包括this,super的使用总结)

继承&#xff1a; 使用情景&#xff1a;当类与类之间&#xff0c;存在相同&#xff08;共性&#xff09;的内容&#xff0c;并满足子类是父类的一种&#xff0c;就可以考虑使用继承&#xff0c;来优化代码 Java中提供一个关键字extends&#xff0c;用这个关键字&#xff0c;我…...

Android 获取应用sha1和sha256

在 Android 应用开发中&#xff0c;SHA-1&#xff08;Secure Hash Algorithm 1&#xff09;值是一种哈希算法&#xff0c;常用于生成应用的数字签名。这个数字签名用于验证应用的身份&#xff0c;并确保应用在发布到设备上时没有被篡改。 以下是生成 Android 应用的 SHA-1 值的…...

c# 方法参数修饰符(out、ref、in)的区别

在C#中&#xff0c;ref、out和in是三种方法参数修饰符&#xff0c;它们在传递参数的方式和作用上有所不同。 ref修饰符&#xff1a; 传递方式&#xff1a;使用ref修饰符的参数可以是输入输出参数&#xff0c;即在方法调用前后都可以对其进行修改。 作用&#xff1a;通过ref修…...

shell 编写一个带有进度条的程序安装脚本

需求 使用 shell 写一个 软件安装脚本&#xff0c;带有进度条 示例 #!/bin/bash# 模拟软件安装的步骤列表 steps("解压文件" "安装依赖" "配置设置" "复制文件" "")# 计算总步骤数 total_steps${#steps[]}# 安装进度的初…...

服务器数据恢复-AIX PV完整镜像方法以及误删LV的数据恢复方案

AIX中的PV相当于物理磁盘&#xff08;针对于存储来说&#xff0c;PV相当于存储映射过来的卷&#xff1b;针对操作系统来说&#xff0c;PV相当于物理硬盘&#xff09;&#xff0c;若干个PV组成一个VG&#xff0c;AIX可以将容量不同的存储空间组合起来统一分配。AIX把同一个VG的所…...

首席执行官Adam Selipsky解读“亚马逊云科技的技术产品差异化”

迄今为止&#xff0c;亚马逊云科技已经参与了21世纪几乎所有的大型计算变革&#xff0c;亚马逊云科技是一个很传奇的故事&#xff0c;它始于大约20年前的一项实验&#xff0c;当时亚马逊试图出售其过剩的服务器。人们确实对此表示怀疑。为什么在线书店试图销售云服务&#xff1…...

C++ Day3

目录 一、类 【1】类 【2】应用实例 练习&#xff1a; 【3】封装 二、this指针 【1】this指针的格式 【2】必须使用this指针的场合 三、类中的特殊成员函数 【1】构造函数 i&#xff09;功能 ii&#xff09;格式 iii&#xff09;构造函数的调用时机 iv&#xff09;…...

OpenEuler 安装mysql

下载安装包 建议直接使用在openEuler官方编译移植过的mysql-5.7.21系列软件包 参考&#xff1a;操作系统迁移实战之在openEuler上部署MySQL数据库 | 数据库迁移方案 | openEuler社区官网 MySQL 5.7.21 移植指南&#xff08;openEuler 20.03 LTS SP1&#xff09; | 数据库移植…...

[Docker] Windows 下基于WSL2 安装

Docker 必须部署在 Linux 内核的系统上。如果其他系统想部署 Docker 就必须安装一个虚拟 Linux 环境。 1. 开启虚拟化 进入系统BIOS&#xff08;AMD 为 SVM&#xff1b;Intel 为 Intel-vt&#xff09;改为启用(enable) 2. 开启WSL 系统设置->应用->程序和功能->…...

(未完成)【Spring专题】SringAOP底层原理解析——阶段三(AOP)

目录 前言前置知识代理范式SpringAOP的理解Spring动态代理的实现 课程内容一、动态代理的实现1.1 Cglib动态代理1.2 JDK动态代理1.3 ProxyFactory&#xff1a;Spring对两种代理的封装 二、AOP基础知识AOP基础概念回顾通知Advice的分类Advisor的理解 三、创建代理对象的方式3.1 …...

使用Nodejs创建简单的HTTP服务器,借助内网穿透工具实现公网访问的方法分享

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…...

使用 OpenTelemetry 构建可观测性 03 - 导出

上一个博文中&#xff0c;我提到如何使用 OpenTelemery 的特定语言 API 来收集遥测数据&#xff0c;包含手动和自动的埋点技术&#xff0c;这很重要&#xff01;但是&#xff0c;收集遥测数据只是解决方案的第一步。 你需要把遥测数据路由转发到其他地方&#xff0c;同时添加额…...

[技术解析]图卷积网络在半监督节点分类中的实战与优化

1. 图卷积网络入门&#xff1a;从传统CNN到GCN的思维跃迁 第一次接触图卷积网络(GCN)时&#xff0c;我习惯性地用传统CNN的思维去理解它&#xff0c;结果踩了不少坑。传统卷积在规整的网格数据上滑动滤波器的操作&#xff0c;在图数据中完全行不通——因为图的拓扑结构是不规则…...

基于OpenCV与MediaPipe的手势与头部姿态控制鼠标实现

1. 项目概述&#xff1a;解放双手的鼠标控制新范式最近在GitHub上看到一个挺有意思的项目&#xff0c;叫ShafwanAbd/handsfree-mouse。顾名思义&#xff0c;这是一个“免提鼠标”项目&#xff0c;核心目标是通过摄像头捕捉你的手势或头部动作&#xff0c;来替代传统的物理鼠标&…...

终极免费开源项目管理指南:如何用GanttProject高效规划复杂项目?

终极免费开源项目管理指南&#xff1a;如何用GanttProject高效规划复杂项目&#xff1f; 【免费下载链接】ganttproject Official GanttProject repository. 项目地址: https://gitcode.com/gh_mirrors/ga/ganttproject 想要免费、开源且功能强大的项目管理工具吗&#…...

TCA白皮书解读:腾讯内部CodeDog系统的演进历程

TCA白皮书解读&#xff1a;腾讯内部CodeDog系统的演进历程 【免费下载链接】CodeAnalysis Static Code Analysis - 静态代码分析 项目地址: https://gitcode.com/gh_mirrors/co/CodeAnalysis 腾讯云代码分析&#xff08;TCA&#xff09;作为一款强大的静态代码分析工具&…...

基于Agent Deck构建多智能体系统:从原理到工程实践

1. 项目概述&#xff1a;从“Agent Deck”看智能体协作平台的构建最近在GitHub上看到一个挺有意思的项目&#xff0c;叫asheshgoplani/agent-deck。光看这个名字&#xff0c;你可能会联想到一副“牌”&#xff0c;或者一个“控制台”。没错&#xff0c;这个项目的核心思想&…...

基于RT-Thread的AB32VG1开发板ADC采集与OLED显示实战

1. 项目概述与核心思路最近在折腾中科蓝讯的AB32VG1开发板&#xff0c;这块板子资源挺有意思&#xff0c;RISC-V内核加上丰富的外设&#xff0c;拿来练手嵌入式实时系统再合适不过。之前已经搞定了I2C接口的OLED屏幕显示&#xff0c;能让它乖乖地显示预设的字符串。但光显示静态…...

Python技能安装器设计:从虚拟环境到CLI的自动化部署实践

1. 项目概述&#xff1a;一个技能安装器的诞生在开源社区里&#xff0c;我们经常遇到一些“小而美”的工具或脚本&#xff0c;它们能解决特定场景下的痛点&#xff0c;但往往缺乏一个统一的、便捷的安装和管理入口。用户需要手动克隆仓库、检查依赖、配置环境变量&#xff0c;甚…...

一颗“语音前端 DSP”到底能解决多少现实问题?

在做音频产品开发这些年里&#xff0c;我接触过不少“语音处理模组”。但很多产品都有一个共同问题&#xff1a; 参数看起来很漂亮&#xff0c;真正落地时却很难调。尤其是下面这些场景&#xff1a;麦克风和喇叭距离太近&#xff0c;疯狂啸叫回音消除效果差&#xff0c;一开大音…...

Gerbv:你的免费PCB设计“翻译官“,让Gerber文件开口说话

Gerbv&#xff1a;你的免费PCB设计"翻译官"&#xff0c;让Gerber文件开口说话 【免费下载链接】gerbv Maintained fork of gerbv, carrying mostly bugfixes 项目地址: https://gitcode.com/gh_mirrors/ge/gerbv 想象一下&#xff0c;当你拿到一份PCB设计文件…...

无线门铃、车库遥控与物联网:聊聊OOK(2ASK)调制那些老技术的新应用

无线门铃、车库遥控与物联网&#xff1a;聊聊OOK&#xff08;2ASK&#xff09;调制那些老技术的新应用 在智能家居和物联网设备大行其道的今天&#xff0c;一种诞生于上世纪中期的通信技术——OOK&#xff08;On-Off Keying&#xff09;调制&#xff0c;依然活跃在无线门铃、车…...