OLED 调试工具-stm32入门

1. 单片机的程序调试方式

由于成本和电路结构的限制,没有像电脑屏幕那样强大的显示屏。

  • 串口调试:用串口将单片机连接到电脑,通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息。(相当于把电脑屏幕挂在单片机上,方便单片机显示调试信息)

一般我们设计 PCB 电路板的时候,都会在 PCB 边上,留一个串口通信的引脚,需要调试程序的时候,把单片机连在电脑上,就可以在电脑屏幕上打印信息了。调试好后,断开串口,程序就能正常工作了。

  • 显示屏调试:直接将显示屏连接到单片机,将调试信息打印在显示屏上
  • Keil调试模式:借助Keil软件的调试模式,可使用单步运行、设置断点、查看寄存器及变量等功能

串口调试

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

显示器调试

  • 优势是对于不断变化的数据,可以覆盖刷新显示,而且显示屏始终接在单片机上,显示方式很直接。还有我们做一些稍微复杂的东西,都会需要有一个人机交互的界面。这样就可以直接把显示屏当作产品的一部分,还是比较好用的。
  • 弊端就是屏幕太小,显示内容有限,没有电脑软件那么强大的功能。

还有点灯调试法(是否执行到某一逻辑),注释调试法(注释一部分,测试另一部分,减少程序运行的部分,定位出问题的程序在哪),对照法等。基本思维就是缩小范围,控制变量,对比测试等。

2. OLED 介绍

详见外设章节。

OLED 实物图与屏幕坐标图:
OLED 调试工具-stm32入门_第1张图片

3. OLED 驱动函数

函数 作用
OLED_Init(); 使用前对 OLED 进行初始化(初始化后可正常使用)
OLED_Clear(); 清屏
OLED_ShowChar(1, 1, ‘A’); 显示一个字符(行,列,字符)
OLED_ShowString(1, 3, “HelloWorld!”); 显示字符串
OLED_ShowNum(2, 1, 12345, 5); 显示无符号十进制数字(行,列,数字,长度),高位切掉,高位补 0
OLED_ShowSignedNum(2, 7, -66, 2); 显示有符号十进制数字(数字前面带 +/- 号)
OLED_ShowHexNum(3, 1, 0xAA55, 4); 显示十六进制数字(十六进制位数的长度)
OLED_ShowBinNum(4, 1, 0xAA55, 16); 显示二进制数字(二进制位数的长度)

4. OLED 显示屏

4.1 硬件电路搭建

硬件电路图:
OLED 调试工具-stm32入门_第2张图片

  1. 在 OLED 下面,先插入两根线,把 OLED 的 GND 引到负极供电孔,OLED 的 VCC 引到正极供电孔,另外这个供电孔会同时接到 stm32 的 PB6 和 PB7 两个引脚,我们直接不初始化这两个引脚就行了。(stm32 引脚上电后,如果不初始化,默认是浮空输入的模式,在这个模式下,引脚不会输出电平,不会有影响)

也可以不接跳线,直接给 PB6 口输出低电平,PB7 口输出高电平,用 GPIO 口直接给 OLED 供电。(OLED 功率很小,也是可以驱动的,不过用 GPIO 口供电不是很规范,最好还是用电源供电)

  1. 插好供电跳线后,再把 OLED 插到 PB6 ~ PB9 这四个口,此时 OLED 的 SCL 接到 PB8,SDA 接到 PB9,这样 OLED 就接好了。

4.2 示例代码

  1. 将 OLED 驱动函数模块加载到 Hareware 文件夹中。

    • .c 文件中包含主体代码(引脚配置,引脚初始化,I2C 通信的基本时序 和 OLED 用户调用代码等),只有引脚配置(硬件电路上 SCL 和 SDA 这两个引脚接在了哪两个端口上)和引脚初始化(配套更改,两个引脚都初始化为 开漏输出的模式)需要更改;
    • .h 文件里面是外部可调用函数的声明;
    • Font.h 文件存的是 OLED 的字库数据(OLED 显示屏不带字库,想要显示字符图形,就得先定义字符的点阵数据,这里存放的就是这些字符的点阵数据,也就是字库,.c 文件中的显示函数会用到这些数据)
  2. main 函数实现

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"

int main(void) {
	OLED_Init();
	OLED_ShowChar(1, 1, 'A');
	OLED_ShowString(1, 3, "HelloWorld!");
	OLED_ShowNum(2, 1, 12345, 5);
	OLED_ShowSignedNum(2, 7, -66, 2);
	OLED_ShowHexNum(3, 1, 0xAA55, 4);
	OLED_ShowBinNum(4, 1, 0xAA55, 16);//C语言不支持写二进制数字,用十六进制代替
	
	OLED_Clear();
	
	while(1){

	}
}

使用 OLED_ShowString 函数传参为 空格,清除部分字符。

5. Keil 调试模式

调试步骤:

  1. 工程选项(魔术棒)-> Debug 对调试选项进行配置。默认选择右边这一项,ST-Link Debugger 为在硬件上在线仿真,需要我们把 STLINK 和 stm32 都连接好,如果不想连接硬件,左边的仿真器选项可以电脑模拟 stm32 的运行。
  2. 使用硬件上在线仿真,在进入调试模式之前,需要先连接好 stm32,之后编译一下,确保工程没有问题。
  3. 点击 放大镜中带有 d 的图标(Start/Stop Debug Session/CTRL+F5)进入调试模式。
  4. 界面中主窗口为 C 语言程序,上面是 C 语言翻译成的汇编程序,左边是寄存器组和状态标志位等信息(单片机硬件底层很重要的东西,汇编必须清楚),工具栏中有程序运行控制:复位、全速运行、停止全速运行、单步运行、跳过当前行单步运行、跳出当前函数单步运行、跳到光标指定行单步运行。
  5. 黄色箭头指示下一句将要执行代码,程序从 main 函数开始。
  6. 点击深灰色一列设置断点,全速运行遇到断点停下。(停止按钮可手动停下)
  7. 点击 RST 复位,程序就会回到最开始的地方。(启动文件的复位中断函数中,复位后程序从这里开始执行,运行后首先会跳转到 SystemInit 函数里,继续运行到 main 函数中)。

功能介绍:

  1. 命令窗口,点击它可以打开和关闭命令窗口。
  2. 反汇编窗口
  3. 符号窗口,可以实时查看程序中所有变量的值。
  4. 串口显示
  5. 逻辑分析仪
  6. 外设菜单栏 -> 系统资源查看,可以看到所有的外设寄存器。

当你以后遇到一个比较难调的程序,比如不清楚程序是如何执行的,或者想要看一大堆变量却不方便显示的,或者想看一下寄存器是不是配置正确了,都可以考虑使用 keil 自带的调试模式。

注意:

  • 调试模式不可以修改程序。需退出->修改->编译->调试。
  • 退出调试模式要把断点先取消,不然会卡死

你可能感兴趣的:(stm32,stm32,mongodb,嵌入式硬件)