04OLED简介和调试方法
OLED简介和调试方法
- 调试方式
- 串口调试
- 显示屏调试
- 其他调试方法
- 总结:
 
- OLED
- 简介
- 硬件电路
- OLED驱动函数
 
- keil调试模式
- 进入方法
- keil调试界面窗口
- 简单功能说明
- 更加强大的功能
 
调试方式

 电脑想看什么变量可以直接打印到屏幕,但是单片机很多时候由于成本和电路结构的限制,就不会有强大的评价。
 就像学习C语言,没有printf函数,就没法学。所以要有一个调试工具才行。
串口调试
串口调试非常常见,用串口将单片机连到电脑,相当于把电脑的屏幕挂在单片机上,方便单片机显示调试信息,设计PCB时会有一个串口通信的引脚,用来程序调试(优势是可以借助强大的电脑来调试,电脑端的软件不仅可以显示单独的参数,还可以已显示曲线,图形,图像等,还可以自己做一个软件,来实现强大的用户交互功能)(弊端就是调试的时候要拖着电脑,而且通常的串口助手只能以信息流的方式呈现数据,就是只能一行一行打印,如果有很多不断变化的数据需要显示,那在电脑上就只能刷屏显示)
显示屏调试
显示屏调试的优势是对于不断变化的数据,可以覆盖刷新显示,而且显示屏可以始终接在单片机上,显示方式很直接,做一些稍微复杂的东西时,就需要一个人机交互界面,这样可以把显示屏当做产品的一部分,比较好用(弊端就是屏幕太小,显示内容有限)
 屏幕可以用于调试,驱动函数后期再讲。先把OLED当成程序调试模块
其他调试方法
还有点灯调试法,如果不清楚程序执行到了哪个位置,就可以在那个位置放一个点灯的代码
 注释调试法,如果程序原来是好的,但是加了某段程序就死了,这时可以把新加入的注释全部去掉,恢复到正常运行的状态,然后一行一行地解除注释,直到错误出现,或者注释掉一部分来测试另一部分,减少程序运行的部分,来定位出问题的程序在哪里。
 对照法,找到一个没问题的程序,在它的程序逻辑上,逐步替换成你的程序逻辑
总结:
测试程序的基本思想:缩小范围,控制变量,对比测试等
OLED
简介

 OLED每一个像素点都是一个单独的发光二极管,而LCD需要有背光,所以相对而言比较省电。
 响应速度快可以使OLED有更高的刷新率
 总线时序快也可以避免阻塞程序
 宽视角:因为OLED是自发光的,所以在任何角度看,显示内容都是清晰的
驱动这种简单的OLED只需要几根线,占用资源比较少,
像素颜色中有:白色、蓝色、黄蓝双色(1/4是黄色,3/4是蓝色,并不是真正的双色,而是分区域固定,适合做一个需要显示标题行的界面)
硬件电路

 4脚一般用IIC协议,7脚一般用SPI协议。
OLED驱动函数

 STM32的引脚如果不进行初始化,默认就是浮空输入的模式
用这个OLED模块,只需要改引脚,还有用到引脚的外设和时钟就可以了,其余函数都封装好了
 
OLED_FONT.h文件,存的是OLED的字库数据,因为OLED显示屏是不带字库的,所以想要显示字符图形,还得先定义字符的点阵数据,所以这就存放的是字符的点阵数据(字库)
 C语言不能写二进制的数,只能用十六进制来代替,C语言作为一个底层计算机编程语言,不支持写二进制的数,而且C语言还要翻译成汇编语言,但是汇编却支持二进制写入。但这可能是规定吧。
keil调试模式
进入方法

 工程选项Debug可以对调试选项进行配置,默认选择的是右边的在硬件上进行在线仿真,需要把STLINK和单片机连接好
 左边的是使用仿真器,这样是电脑模拟单片机的运行了。
 仿真前要确保一下工程编译没有问题(如果有问题就要先解决问题)
点击“红d”进入调试模式,如果没有连接STLINK会报错
 
keil调试界面窗口

 寄存器组和状态标志位如果用汇编编程,需要了解的非常清楚才行。
 如果用的C语言,那么这些就不用管。

简单功能说明
这部分是程序运行控制
 1.复位 2.全速运行 3.停止全速运行 4.单步运行 5.跳过当前行单步运行 6.跳出当前函数单步运行 7.调到光标指定行单步运行

 黄色箭头指示的是下一句将要执行的代码,蓝色的是光标所在行
 
 点击左边深灰色的区域,可以设置断点,点击全速运行,程序就会一直运行,直到断点停下,如果没有断点,再全速运行,程序就不会自动停下来,就需要点击停止按钮,程序才会停下来,

 点击RST复位,程序就会回到最开始的地方,可以看到程序在复位中断函数里,说明复位后程序从此处开始执行。
首先程序会跳到SystemInit函数里面,然后函数执行到main函数里面。
这种方法可以精确跟踪我们的程序是如何运行的。可以在这个模式里面探索函数是一步一步如何执行的。这样对程序的逻辑理解会更深。
这是调试模式下简单的功能,调试模式下还有更强大的功能
更加强大的功能

 第一个是命令窗口,可以打开和关闭命令窗口
 
 第二个 反汇编窗口
 第三个 符号窗口 可以实时查看程序中所有变量的值
 
 
 如果想看结构体值的变化,可以点右键,添加到Watch1窗口。
 
 点击单步运行,就能看到变量值的变化,这是非常方便的。
还有串口显示
 
 逻辑分析仪
 
 等等,可以自行再花时间详细了解一下
还可以点击外设菜单,系统资源查看,可以看到所有的外设寄存器
 
 比如选择GPIOA,右边会显示GPIOA外设所有的寄存器
 
调试时,STM32也是在实时执行程序的,仿真点停止,stm32的程序也停止运行,再点运行,stm32也继续执行,虽然实时变化会有一些延迟,但在线调试功能还是很强大,stm32实时执行程序,keil软件实时显示外设寄存器状态。还能随时控制程序的开始、停止、单步运行。当遇到比较难调的程序,比如不清楚程序是如何执行的,或者想要看一大堆变量却不方便显示的,或者想看一下寄存器的值是不是配置正确了,都可以使用keil自带的调试模式。如果修改程序,不能直接在调试模式下修改,修改程序得先退出调试模式,重新编译后再进入调试模式。
keil更多功能等待更多探索。
 
 Help打开官方帮助文档,有最权威最细致的介绍,有更多关于keil如何使用的黑科技
相关文章:
 
04OLED简介和调试方法
OLED简介和调试方法 调试方式串口调试显示屏调试其他调试方法总结: OLED简介硬件电路OLED驱动函数 keil调试模式进入方法keil调试界面窗口简单功能说明更加强大的功能 调试方式 电脑想看什么变量可以直接打印到屏幕,但是单片机很多时候由于成本和电路结构…...
 
“LNMP环境搭建实战指南:从零开始配置CentOS 7下的Nginx、MySQL与PHP“
目录 1.前言 2.准备工作 2.1.环境信息 2.2.关闭SELinux和firewalld 3.安装Nginx 3.1.运行以下命令,安装Nginx 3.2.运行以下命令,查看Nginx版本 4.安装MySQL 4.1.更新秘钥 4.2.配置MySQL的YUM仓库 4.3.安装MySQL 4.4.查看MySQL版本 4.5.启动…...
 
院内导航:如何用科技破解就医找路难题
自2019年开始“院内导航”被纳入医院智慧服务评估体系以来,到2023年改善就医服务升级的部署,每一步都见证了我国医疗卫生体系向智能化、人性化迈进的坚实步伐。 面对庞大复杂的医院环境与日益增长的就诊需求,如何让患者在茫茫人海中迅速找到就…...
 
C++基础篇(1)
目录 前言 1.第一个C程序 2.命名空间 2.1概念理解 2.2namespace 的价值 2.3 namespace的定义 3.命名空间的使用 4.C的输入输出 结束语 前言 本节我们将正式进入C基础的学习,话不多说,直接上货!!! 1.第一个C程…...
 
云视频监控中的高效视频转码策略:视频汇聚EasyCVR平台H.265自动转码H.264能力解析
随着科技的快速发展,视频监控技术已经广泛应用于各个领域,如公共安全、商业管理、教育医疗等。与此同时,视频转码技术作为视频处理的关键环节,也在不断提高视频的质量和传输效率。 一、视频监控技术的演进 视频监控技术的发展历…...
 
xcode配置swift使用自定义主题颜色或者使用RGB或者HEX颜色
要想在xcode中使用自定义颜色或者配置主题色,需要在Assets中配置,打开Assets文件,然后点击添加Color Set: 输入颜色的名称,然后选中这个颜色,会出现两个颜色: Any Appearance表示亮色模式下使用…...
相同含义但不同类型字段作为join条件时注意事项
假设表A和表B中都有表示学号的stu_id字段,但该字段在表A和表B中类型分别为bigint和string。当直接通过该字段进行join时,一般情况下可以得到我们预期的结果。 select a.stu_id from a as r join b as l on r.stu_id l.stu_id 但是如果学号长度较长的…...
 
数据结构(3.8)——栈的应用
栈在括号匹配中的应用 流程图 代码 #include <stdio.h> #include <stdlib.h> #define MaxSize 10typedef struct {char data[MaxSize];int top; } SqStack;// 初始化栈 void InitStack(SqStack* S) {S->top -1; // 初始化栈顶指针 }// 判空 bool StackEmpty(…...
 
前端面试题35(在iOS和Android平台上,实现WebSocket协议有哪些常见的库或框架?)
在iOS和Android平台上,实现WebSocket协议有许多成熟且被广泛使用的库和框架。下面是一些推荐的选项: iOS 平台 SocketRocket 简介:这是由Facebook开源的库,专门为iOS和Mac OS X设计,提供WebSocket连接的功能。它基于S…...
 
Mysql如何高效ALTER TABL
ALTER TABLE 缺点 MySQL 的ALTER TABLE 操作的性能对大表来说是个大问题。 MySQL MySQL 执行大部分修改表结构操作的方法是用新结构的 创建一个,空表从旧表中查出所有数据插入,新表然后删除旧。表这样操作可能需要花费很长,时间 如内果存不…...
 
vue3+vite搭建第一个cesium项目详细步骤及环境配置(附源码)
文章目录 1.创建vuevite项目2.安装 Cesium2.1 安装cesium2.2 安装vite-plugin-cesium插件(非必选)2.3 新建组件页面map.vue2.4 加载地图 3.完成效果图 1.创建vuevite项目 打开cmd窗口执行以下命令:cesium-vue-app是你的项目名称 npm create…...
 
LiteOS增加执行自定义源码
开发过程注意事项: 源码工程路径不能太长 源码工程路径不能有中文 一定要关闭360等杀毒软件,否则编译的打包阶段会出错 增加自定义源码的步骤: 1.创建源码目录 2. 创建源文件 新建myhello目录后,再此目录下再新建源文件myhello_demo.c 3. 编…...
 
《Nature》文章:ChatGPT帮助我学术写作的三种方式
图片翻译 ** 文章内容** 忏悔时间:我使用生成式人工智能(AI)。尽管在学术界关于聊天机器人是积极力量还是消极力量的争论不休,但我几乎每天都使用这些工具来完善我所写论文中的措辞,并寻求对我被要求评估的工作进行替…...
 
防火墙安全策略与用户认证综合实验
一、实验拓扑 二、实验需求 1.DMZ区内的服务器,办公区仅能在办公时间内<9:00-18:00>可以访问,生产区的设备全天可以访问 2.办公区不允许访问互联网,办公区和游客区允许访问互联网 3.办公区设备10.0.2.10不充许访问DMZ区的FTP服务器和HT…...
 
vue学习day05-watch侦听器(监视器)、Vue生命周期和生命周期的四个阶段、、工程化开发和脚手架Vue cli
13、watch侦听器(监视器) (1)作用:监视数据变化,执行一些业务逻辑或异步操作 (2)语法: 1)简写语法——简单数据类型,直接监视 ① Watch:{ 数…...
 
数字人+展厅互动体验方案:多元化互动方式,拓宽文化文娱新体验
数字化创新已成为推动展厅可持续发展,创造全新消费体验,满足游客多元化需求的关键力量。 “数字人数字互动展厅”可以适应年轻一代的文化传播与多媒体互动新体验趋势,打造新生代潮玩聚集地,促进文化创意传播与互动体验场景创新&a…...
在Spring Boot项目中集成监控与报警
在Spring Boot项目中集成监控与报警 大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 1. 引言 在当今的软件开发中,监控和报警系统是保证系统稳定性和可靠性的重要组成部分。Spring Boot…...
 
opencv实现目标检测功能----20240704
早在 2017 年 8 月,OpenCV 3.3 正式发布,带来了高度改进的“深度神经网络”(dnn)模块。 该模块支持多种深度学习框架,包括 Caffe、TensorFlow 和 Torch/PyTorch。这次我们使用Opencv深度学习的功能实现目标检测的功能,模型选用MobileNetSSD_deploy.caffemodel。 模型加载…...
音视频解封装demo:使用libmp4v2解封装(demux)出mp4文件中的h264视频数据和aac语音数据
1、README 前言 本demo是使用的mp4v2来将mp4文件解封装得到h264、aac的,目前demo提供的.a静态库文件是在x86_64架构的Ubuntu16.04编译得到的,如果想在其他环境下测试demo,可以自行编译mp4v2并替换相应的库文件(libmp4v2.a&#…...
 
手撸俄罗斯方块(一)——简单介绍
手撸俄罗斯方块 简单介绍 《俄罗斯方块》(俄语:Тетрис,英语:Tetris),是1980年末期至1990年代初期风靡全世界的电脑游戏,是落下型益智游戏的始祖,电子游戏领域的代表作之一&a…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
 
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
 
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
 
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
 
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
 
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
