STM32入门教程-2023版【4-1】OLED调试工具

news2024/11/24 11:52:03

关注 + 点赞   不错过精彩内容

大家好,我是硬核王同学,最近在做免费的嵌入式知识分享,帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作! 

一、概述

在这一节先提前介绍一下,在以后的教程中我们会经常用到这个显示屏,现在我们用OLED当一个调试的显示屏,方便我们调试程序。

运行OLED示例程序,可以看到OLED显示一些字符和数字,当然这个屏幕也能显示中文或者图像,但是暂时还没有加进来。

第一个是显示一个字符A,第三个是显示字符串HelloWorld!,下面左边是显示一个数字12345,然后右边是显示有符号的数字-66,再下面是显示十六进制数字AA55,最后是显示二进制数字1010101001010101,这个就是十六进制AA55的二进制数,这些就是提供的OLED驱动函数模块能显示的内容

二、STM32的常用调试方式

对于我们的单片机编程而言,经常会遇到一个很大的问题,就是程序调试。

因为单片机不像电脑,电脑有一个很大的屏幕,想看什么变量、参数,直接打印到屏幕就可以了,但是单片机就不一样了,很多时候由于成本和电路结构的限制,它并不会有一个像电脑屏幕那样强大的显示屏,这就对我们的调试造成了困难。

比如如果让你学习C语言,但是不允许使用printf这个打印函数,那C语言是不是就根本没法学,同样,给你一个单片机,但没有任何可以显示参数的东西,那你也没法学单片机,所以本节我们先来学习一下常见的程序调试方法

下面是常见的调试方式:

  • 串口调试:通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息

  • 显示屏调试:直接将显示屏连接到单片机,将调试信息打印在显示屏上

  • Keil调试模式:借助Keil软件的调试模式,可使用单步运行、设置断点、查看寄存器及变量等功能

  • 点灯调试法:不清楚程序执行到了某个位置,加一个点灯程序,如果运行到了,灯就亮,没运行到,灯就不亮

  • 注释调试法:原来程序是好的,但加了某段就不行,这时可以把新加入的程序全部注释掉,恢复到正常运行的状态,然后一行一行解除注释,直到错误出现,或者注释一部分,来测试另一部分,减少程序运行的部分,来定位出问题的程序在哪里

  • 对照法:找了一个没问题的程序,对方的执行逻辑没问题,自己感觉自己的执行逻辑也没问题,但自己的无法运行,就可以对照一下,在对方的程序逻辑上,逐步替换成自己的程序逻辑,这就容易发现错误在什么地方

总之测试程序的基本思想就是缩小范围、控制变量、对比测试等,测试的方法是多样的,这个还得大家在实践中多想想了

三、OLED简介

OLED ( Organic Light Emitting Diode )

就是有机发光二极管。

OLED 显示屏:

性能优异的新型显示屏,具有功耗低、相应速度快、宽视角、轻薄柔韧等特点。

优点如下:

  • 功耗低:OLED每一个像素都是一个单独的发光二极管,每一个像素都是可以自发光的,不同LCD那样需要有背光,所以OLED屏幕会比较省电

  • 响应速度快,这个特性可以使OLED有更高的刷新率

  • 总线时序快,也可以避免我们的程序阻塞

  • 宽视角,因为OLED屏幕上自发光的,所以在任何角度看,显示内容都是清晰的,对比LCD:比如电脑屏幕,从下或者上斜看屏幕,那么屏幕会变黑,很难看清上面的内容,手机屏幕作为OLED屏幕基本各个视角都可以看清屏幕,这就是可视视角的差别

  • 轻薄柔韧:比如现在手机上的折叠屏、柔性屏等,用的就是OLED显示屏

0.96 寸 OLED 模块

OLED 显示屏中有这种0.96 寸 OLED 模块,小巧玲珑、占用接口少、简单易用,是电子设计中非常常见的显示屏模块。供电:3~5.5V ,通信协议:I2C/SPI ,分辨率:128*64

注意

  1. 3.3V和5V单片机都是兼容的,I2C一般是四阵脚屏幕的通信协议,SPI一般是七针脚的通信协议

  2. OLED一般只有一个颜色,分辨率也比较低,驱动OLED只需要几根线和通信协议,占用资源比较小

硬件电路

左边这个是4针脚版本的OLED电路,这里GND接GND,VCC接3.3V,给OLED供电,然后剩下的SCL和SDA是I2C的通信引脚,需要接在单片机I2C通信的引脚上,当然可以使用GPIO口模拟的I2C通信,那么这两个端口就可以接在任意的GPIO口上

右边这个是7针脚版本的OLED电路,也是一样,GND,VCC接电源,剩下的引脚是SPI通信协议的引脚,如果是GPIO口模拟的通信协议,那也是接在任意的GPIO口上就行了

OLED驱动函数

这个表里可以看到,这些就是源代码中提供的驱动函数,上面这两个图是OLED的实物图和屏幕坐标图,我把这个OLED分割成了4行16列的小区块

最后是源代码中提供的驱动函数

  • 第一个是OLED_Init,这个是OLED初始化函数。在使用OLED之前,需要调用一下这个函数,对OLED进行初始化,然后就可以常使用了

  • 第二个是OLED_Clear,这个是清屏函数。调用这个函数,屏幕就会清空

下面的这些函数,都是OLED的显示函数

  • 第三个是OLED_ShowChar,显示一个字符。第一个参数指定起始行,第二个参数指定起始列,第三个参数是要显示的字符,比如,1行1列,显示字符A,那在屏幕上1行1列的位置,就会像这样显示一个A,右边OLED的实物图中就是它的实际效果

  • 第四个是OLED_showString,显示字符串。比如在1行3列显示字符串HelloWorld!那就会从第1行第3列这里开始,显示HelloWorld!

  • 第五个是OLED_ShowNum,显示无符号十进制数字。前两个参数指定起始坐标,第3个参数是要显示的数字,第4个参数是数字的长度,比如2行1列,显示数字12345,长度为5,就会在屏幕的这个位置显示12345

  • 第六个是OLED_ShowSignedNum就是显示有符号十进制数字。在显示的时候会带一个正负号

  • 第七个是OLED_ShowHexNum,显示十六进制数

  • 第八个是OLED ShowBinNum,显示二进制数

  • 其实这个屏幕还可以显示中文、图像等内容,暂时源代码的驱动函数并没有涉及这些东西,这些东西我们调试的时候也暂时用不到,如果大家需要的话,我们之后单独学习OLED的时候再来演示这些功能

作 者 :硬核王同学

------- END-------

关注公众号回复“加群”按规则加入技术交流群  回复“1024”查看更多内容

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

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

相关文章

javaScript设计模式-工厂

它的好处是消除对象间的耦合度,在派生子类时提供了更大的灵活性。但盲目的把普通的构造函数扔在一边,并不值得提倡。如果要采一不可能另外换用一个类,或都不需要在运行期间在一系列可互换的类中进行选择,就不应该使用。这样在后期…

中仕公考:国考进面后资格复审需要准备什么?

参加国考面试的考生在资格审核阶段需要准备以下材料: 1、本人身份证、学生证或工作证复印件。 2、公共科目笔试准考证复印件。 3、考试报名登记表。 4、本(专)科、研究生各阶段学历、学位证书(应届毕业生没有可以暂时不提供)。 5、报名资料上填写的各类证书材料…

页面数据类型为json,后端接受json数据

项目结构 依赖pom.xml <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.8.RELEASE</version></dependency><dependency><groupId>org.springframework…

一些面试会问到的奇怪问题与面试总结

1.v-for、v-if先后顺序。 官方不建议一起使用&#xff0c;但是有时候面试的时候会问到。 在vue2中是v-for先与v-if的。 源码js编译结果&#xff1a; _c()就是vm.$createElement()&#xff0c;意思是创建一个虚拟的element&#xff0c;就是返回值是VNode。 _l就是renderlist…

C#,入门教程(18)——分支语句(switch-case)的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(17)——条件语句&#xff08;if-else&#xff09;的基础知识https://blog.csdn.net/beijinghorn/article/details/124033376 1、switch概述 switch-case分支语句 可以理解为 大号 的 if-else。 switch语句以switch关键字开头&…

redis7部署集群:包含主从模式、哨兵模式、Cluster集群模式等三种模式

前言&#xff1a; redis部署集群常见的一般有三种模式&#xff1a;主从模式&#xff0c;Sentinel&#xff08;哨兵模式&#xff09;&#xff0c;Redis Cluster&#xff08;高可用Cluster集群&#xff09;&#xff0c;根据不同的需求可自定义选择部署方式。 Redis 主从模式&…

2.【Linux】(进程的状态||深入理解fork||底层剖析||task_struct||进程优先级||并行和并发||详解环境变量)

一.进程 1.进程调度 Linux把所有进程通过双向链表的方式连接起来组成任务队列&#xff0c;操作系统和cpu通过选择一个task_struct执行其代码来调度进程。 2.进程的状态 1.运行态&#xff1a;pcb结构体在运行或在运行队列中排队。 2.阻塞态&#xff1a;等待非cpu资源就绪&am…

工厂企业消防安全AI可视化视频智能监管解决方案

一、方案背景 2023年11月20日下午6时30分许&#xff0c;位于江苏省无锡市惠山区前洲街道的某公司突发严重火灾&#xff0c;共造成7人死亡。这次火灾提醒我们工业安全至关重要&#xff0c;企业都应该时刻保持警惕&#xff0c;加强安全意识和培训&#xff0c;提高应对突发事件的…

RK3568驱动指南|驱动基础进阶篇-进阶8 内核运行ko文件总结

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

DrGraph原理示教 - OpenCV 4 功能 - 形态操作

形态类型 从OpenCV图像处理基本知识来看&#xff0c;膨胀腐蚀操作后&#xff0c;还有形态操作&#xff0c;如开运算、闭运算、梯度、礼帽与黑帽&#xff0c;感觉很多&#xff0c;其实&#xff0c;本质上就是批处理操作&#xff0c;如 开运算&#xff1a;先腐蚀&#xff0c;再膨…

【不用找素材】ECS 游戏Demo制作教程(3) 1.17

一、生成墓碑 新建脚本如下&#xff1a; using Unity.Entities; using Unity.Mathematics;namespace ECSdemo {public struct GraveyardRandom : IComponentData{public Random Value;}}扩充GraveyardMono如下&#xff1a; using Unity.Entities; using Unity.Mathematics; …

AVL树 -- C++实现

AVL树 – C实现 1. AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1…

MySQL表的基本插入查询操作详解

博学而笃志&#xff0c;切问而近思 文章目录 插入插入更新 替换查询全列查询指定列查询查询字段为表达式查询结果指定别名查询结果去重 WHERE 条件基本比较逻辑运算符使用LIKE进行模糊匹配使用IN进行多个值匹配 排序筛选分页结果更新数据删除数据截断表聚合函数COUNTSUMAVGMAXM…

黑马Java——字符串

1.API 1.1API概述 什么是API API (Application Programming Interface) &#xff1a;应用程序编程接口 简单理解&#xff1a;API就是别人已经写好的东西&#xff0c;我们不需要自己编写&#xff0c;直接使用即可 JavaAPI: 指的就是 JDK 中提供的各种功能的 Java类&#xff…

网络编程【1】

【 1 】什么是网络编程 网络编程是指通过计算机网络进行数据交换和通信的编程过程。它涉及到使用网络协议和通信接口&#xff0c;使不同计算机之间能够进行数据传输和通信。 总结&#xff1a; 网络编程的研究前提就是基于互联网 网络编程就是基于互联网写代码 【 2 】为什么…

数字孪生时代,一起探索云端建模的无限潜能

在当今数字孪生时代&#xff0c;云端建模作为一项创新技术正迅速崭露头角。它基于云计算和大数据处理的优势&#xff0c;以及先进的三维建模技术&#xff0c;开启了建筑设计、城市规划和工程领域的全新时代。云端建模不仅实现了高效的数据处理和计算能力&#xff0c;还提供了无…

如何在苹果手机上进行文件管理

摘要 苹果手机没有像安卓系统那样内置文件管理器&#xff0c;但是可以通过使用克魔开发助手来实现强大的文件管理功能。本文介绍了如何使用克魔开发助手在电脑上管理和传输苹果手机的文件。 引言 很多朋友都在使用苹果手机&#xff0c;但是当需要查看手机中的文件时&#xf…

2024美赛数学建模思路 - 案例:ID3-决策树分类算法

文章目录 0 赛题思路1 算法介绍2 FP树表示法3 构建FP树4 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模…

学习JavaEE的日子 day14 继承,super(),this(),重写

Day14 1.继承的使用 理解&#xff1a;子类继承父类所有的属性和方法 使用场景&#xff1a;多个类似的类&#xff0c;有相同的属性和方法&#xff0c;就可以把相同属性和方法抽取到父类 优点&#xff1a;减少代码的冗余&#xff1b; 使类与类之间产生了关系(多态的前提) 缺点&a…

使用CSS+PS制作圆角Button按钮并且可以自适应文字! 【附完整代码】

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起学习和进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&a…