STM32-OLED显示屏(六)

目录:

1.OLED调试工具

2.OLED显示屏

1.OLED调试工具

本节课我们来学习 OLED 调试工具。本节课比较简单,我会给大家提供一个 OLED 显示屏的驱动函数模块,大家先学会如何使用我提供的模块就可以了。至于 OLED 屏幕的原理和代码编写,我之后会再讲的。现在我们就是用 OLED 当一个调试的显示屏,方便我们调试程序。在以后的教程中我们会经常用到这个显示屏啊,所以在这一节先提前介绍一下。

这个屏幕还支持显示中文、图像等内容,提供的驱动函数没有涉及,暂时用不到

当然串口调试和显示屏调试也是各有利弊的啊。

串口的优势是可以借助强大的电脑来调试。电脑端的软件不仅可以显示单独的参数啊,而且可以显示曲线啊、图形图像等,还可以自己做一个软件啊,来实现一个强大的用户交互界面。那串口调试的弊端就是调试的时候需要拖着电脑啊,而且通常的串口助手只能以信息流的方式呈现数据,就是只能一行一行的打印啊,如果有很多不断变化的数据要显示,那就只能在电脑上刷屏显示。这样用起来就不太方便。

接着显示屏调试的优势是对于不断变化的数据可以覆盖刷新显示,而且显示屏可以始终接在单片机上,显示方式很直接啊。还有一般我们做一些稍微复杂的东西,都会需要有一个人机交互的界面,这样就可以直接把显示屏当做产品的一部分啊还是比较好用的。那显示屏的弊端就是屏幕太小,显示内容有限,没有电脑软件那么强大的功能是吧?所以这,那本套课程中基本上都是一些参数变量的显示啊,所以我觉得用 OLED 显示会更加方便。最后我这里还列举了一种调试方式啊,就是 Keil 调试模式。它是借助 Keil 软件的调试模式,可使用单步运行,设置断点,查看寄存器及变量等高级功能。 Keil 调试模式的功能还是非常强大的哈。

当然除了这 3 种方法之外,还有很多种程序调试的方法哈。比如点灯调试法,如果你不清楚程序是不是执行到了某个位置,就可以在那个位置放一个点灯的代码。如果运行到了,灯就亮,没运行到,灯就不亮。

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

另外还有对照法,这就是你找到一个没问题的程序,它的执行逻辑没问题,你感觉你自己写的逻辑也没问题,但是它的可以运行你的却不能运行,这时就可以对照一下哈,在它的程序逻辑上逐步替换成你的程序逻辑,这样就比较容易发现错误在什么地方啊。

总之,测试程序的基本思想就是缩小范围,控制变量,对比测试等。测试的方法是多样的

左边这个是四针脚版本的 OLED 电路,这里 GND 接 GND, VCC 接 3.3 伏给 OLED 供电。然后剩下的 SCL 和 SDA 是 I2C 的通信引脚,需要接在单片机 I2C 通信的引脚上 。当然我给的驱动函数模块用的是GPIO 口模拟的 I2C 通信,所以这两个端口就可以接在任意的 GPIO 口上啊。

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

2.OLED显示屏

这里我把 OLED 插在了面包板的右下角,以后我们就一直把这个屏幕插在这里啊。需要用的时候随时可以使用,而且放在右下角也不是很占地方。

那在这里我们使用的是四针脚的 OLED 屏幕, GND 和 VCC 需要接电源的负极和正极啊。我们可以在 OLED 的下面啊,像这样先插上两根线,把 OLED 的 GND 引到负极供电孔, OLED 的 VCC 引到正极供电孔。另外这个供电孔也会同时接到 STM32 的 PB6 和 PB7 两个引脚。不过这个也是没关系的啊,我们直接不初始化这两个引脚就行了。 STM32 的引脚上电后,如果不初始化,默认是浮空输入的模式啊。在这个模式下,引脚不会输出电平,所以不会有什么影响啊。

当然你也可以不接这两根跳线,直接给 PB6 口输入低电平, PB7 口输出高电平,用 GPIO 口直接给 OLED 供电,这个也是没问题的哈,因为这个 OLED 功率很小,所以也是可以驱动的。

不过这种用 GPIO 口供电不是很规范啊,自己玩玩的时候用就行了,要做实际项目的话最好还是用电源供电。好,那插好这两个供电跳线之后,再把 OLED 插到 PB6 到 PB9 这四个口,这样 OLED 就接好了。此时 OLED 的 SCL 接到 PB8, SDA 接到 PB9。那我们在面包板上插下电路哈,先用跳线引

mian函数删掉原来的代码:

复制到目录中来:

引进项目:

这三个文件都是什么东西啊?首先, OLED . C 里面就是函数的主体代码了。里面包括了引脚配置、引脚初始化、 I2C 通信的基本时序和 OLED 用户调用的代码等。这些函数我都已经写好了啊,绝大部分都不需要更改

我们需要更改的就只有上面的这两部分代码。第一部分是引脚配置,这里选择的是你硬件电路上把 SCL 和 SDA 这两个引脚接在了哪两个端口上,比如我这里 SCL 接在了 PB8,那这个地方就是 GPIOB GPIO 8。如果你换个端口,比如接在 PA6 上,那这个地方就要改成 GPIOA GPIO 6。下面这个 SDA 的引脚配置也是一样啊, SDA 接在了哪个位置就改成 GPIO 啥 GPIO 啥。

然后下面这个 OLED I2C Init函数里也得更改啊,这里面就是把 SCL 和 SDA 的两个引脚都初始化为开漏输出的模式。

这部分代码大家学了上一节 GPIO 之后应该就已经非常熟悉了吧。具体更改就是使用到的 GPIO 外设都先用 RCC 开启一下时钟,然后下面初始化 GPIO B 的 8,再初始化 GPIO 这样就完成了。

所以对于这个模块来说,我这里默认用的是 SCL 接 PB8,SDA 接 PB9。如果你想修改,那先把上面这两行引脚配置改一下,再把下面这里的端口初始化改一下。剩下的都不需要修改哈,就可以直接使用我这个 OLED 驱动函数模块了。这就是 OLED 点 C 里面的东西。

接下来 OLED . H 里面,这里就是外部可调用函数的声明啊,其他的也没啥。

最后是 OLED font .H 文件,这里存的是 OLED 的字库数据,因为这个 OLED 显示屏是不带字库的哈,想要显示字符图形,还得先定义字符的点阵数据,那这里就是这些字符的点阵数据啊,也就是字库, OLED 点 C 文件的显示函数会用到这些数据啊。我们需要把这个文件复制过来放到工程里。当然字库也是不用我们修改的。

Keil的调试模式:

时间我给大家演示一下 Keil 的调试模式啊。这个调试模式我教程里可能用的比较少啊,但是它确实是一个非常强大的工具。在这里给大家介绍一下啊,大家之后遇到一些复杂的问题,可以考虑一下这个调试模式,说不定就能很方便的解决你的问题了。那我们换一个 LED 闪烁的工程作为例子啊。

然后工程选项, Debug 这里,可以对调试选项进行配置。这里默认是选择右边的这一项啊,这个是在硬件上在线仿真,需要我们把 STLink 和 STM32 都连接好。

如果你不想连接硬件,也可以选择左边的使用仿真器这个选项,这样就是电脑模拟 STM32 的运行了。

那我们就使用硬件的在线仿真吧。首先在进入调试模式之前需要先连接好 STM32,之后编译一下,确保工程没有问题。

现在这里编译是没有问题的哈,然后点击这里的放大镜,里面带一个 D 的图标。进入调试模式啊。

在这个界面里,主窗口就是我们的 C 语言程序。上面这个窗口就是 C 语言翻译成的汇编程序。这个你感兴趣的话,可以对照这里看一下每句 C 语言实际上都执行了哪些操作啊。然后左边的这个窗口是寄存器组和状态标志位等信息。这个是单片机硬件底层很重要的东西啊,如果你用汇编编程的话,这些东西都是必须要非常清楚的。但如果你用的是 C 语言,那这些东西就不用管它。

之后上面这一部分是程序运行控制的,第一个是复位啊,第二个是全速运行,第三个是停止全速运行。然后接着这四个是单步运行,跳过当前行单步运行,跳出当前函数单步运行啊,跳到光标指定行单步运行。那我们可以试一下啊,这个红色箭头指示的就是下一句将要执行的代码啊。

我们当前的程序就是从 main 函数开始的,我们可以点一下单步运行,那它就执行到了下一行,然后再单步

它就进到了 RCC 这个函数里面来了。点击这个跳出函数,它就可以跳到函数外面来了。

指定这一行,然后点击运行到光标指定行,那程序就运行到这个位置了。

我们可以点击程序左边这里深灰色的区域啊,设置断点。然后点击全速运行,程序就会一直运行,直到断点停下。

如果没有断点的话,再全速运行,程序就不会自动停下来了。那我们就需要点击这里的停止按钮,这样程序就会停下来了。

可以看到目前程序停在了 main 函数里面。

然后我们点击 RST 复位,程序就会回到最开始的地方。

这里我们可以看到现在程序是在启动文件的复位中断函数里,说明复位后程序是从这里开始执行的,我们单步运行。可以看到,首先程序会跳到 System 以内的函数里,

继续运行,然后跳出函数,继续运行,应该就会执行 main 函数啊,不过它突然停不下来了,那没关系啊,我们停止一下,复位,然后指定到 main 函数,直接运行到当前行,现在可以看到程序就执行到了这一行,然后停下来了。

好了,这就是调试模式下控制程序运行的方法,这个方法可以精确追踪我们的程序是如何运行的,如果你不清楚程序是如何一步步运行的,那在这个调试模式你单步运行探索一下,相信你对程序的运行逻辑就会有更深的理解啊。当然这只是调试模式下的一小部分功能,调试模式还有更强大的功能啊。

接着我们来看一下上面的这一堆功能啊。第一个是命令窗口,我们点击它可以打开和关闭命令窗口。第二个是反汇编窗口,也是可以打开和关闭的啊。第三个是符号窗口,在这里我们可以实时查看程序中所有变量的值啊。

我们试一下,比如我想看一下这个 GPIO_ InitStructure结构体的值,那就可以在这个窗口里找一下啊, main c 里面,然后 main 函数,这里就可以看到这个变量了,里面可以看到结构体的三个成员。如果想看一下结构体值的变化,可以在这里右键啊,添加到 Watch 一窗口。

在这里就能看到结构体的值了。比如我们在这里单步运行,这里就能看到这个变量值的变化了,还是非常方便的。

然后剩下的这里还有串口显示,逻辑分析仪等等,这些工具的功能也都是非常强大的啊,大家可以自行了解一下,我就不再演示了。

另外我们还可以点击这个外设菜单栏啊,系统资源查看,这里就可以看到所有的外设寄存器。比如我们选择 GPIOA, 右边的这里就会显示 GPIOA 外设的所有寄存器。

那我们这个程序是翻转 PA0 端口对吧我们就可以看一下 ODR 寄存器,选择 ODR0,这个就是 PA0 的输出数据寄存器啊。

接下来我们运行可以看到这个 ODR0 竟然是实时显示输出寄存器的变化的。我们再在面包板上的 PA0 插上一个 LED 啊,可以看到 STM32 也是在实时执行程序的。

我们点停止, STM32 的程序也停止运行啊。再点运行, STM32 程序也继续执行。

虽然说这个实时变化会有一些延迟啊,但不得不说这个在线调试的功能还是非常强大的。 STM32 实时执行程序, Keil 软件实时显示外设寄存器状态,还能随时控制程序的开始、停止、单步运行。所以当你以后遇到一个比较难调的程序,比如不清楚程序是如何执行的,或者想要看一大堆变量却不方便显示的,或者想看一下寄存器是不是配置正确啊,都可以考虑一下使用这个 Keil 自带的调试模式啊。

最后再说明一下,如果你想修改程序的话,是不能直接在这个调试模式下修改的。修改程序得先退出调试模式,重新编译,再进入调试模式啊,这个注意一下。那以上这些就是对 Keil 调试模式的简单介绍,这个软件更多的功能还得需要大家自己慢慢探索了。

相关推荐
jllllyuz1 小时前
STM32F10x MQ-2烟雾传感器驱动程序
stm32·单片机·嵌入式硬件
bubiyoushang8883 小时前
STM32F030 多路ADC采样实现
stm32·单片机·嵌入式硬件
三佛科技-187366133974 小时前
LP8841SC+LP35118N (72W SiC双电源方案),全电压认证,体积直降 20%
单片机·嵌入式硬件
metaRTC5 小时前
metaRTC8 成功适配 RTOS:开启 MCU/嵌入式实时音视频新时代
单片机·嵌入式硬件·webrtc·实时音视频·rtos
d111111111d5 小时前
UAER问题+修复小bug
前端·javascript·笔记·stm32·单片机·嵌入式硬件·学习
嵌入式的飞鱼6 小时前
SD NAND vs eMMC:嵌入式存储方案怎么选?
嵌入式硬件·mcu·sd nand
进击的小头6 小时前
第19篇:嵌入式定点与浮点运算科普:核心差异、精度控制与开发技巧
单片机·嵌入式硬件
M158227690557 小时前
老 PLC 秒接工业以太网|三格电子串口转网口模块,让设备改造零门槛、一步上云
单片机·嵌入式硬件
zhmc7 小时前
电解电容的ESR定义与测量
嵌入式硬件