接线图
我们需要在OLED显示屏下面先接好这几根线,把OLED的GND引到负极供电孔 ,OLED的VCC引到正极供电孔
我们不要接这两个跳线,直接给PB6口输出低电平、PB7口输出高电平,用GPIO口直接给OLED供电是ok的,只是不够规范。实际项目最好用电源供电

我们再根据教程把OLED工程新建起来。
OLED.c
函数的主体代码。里面包括了引脚配置 、引脚初始化 、I2C通信的基本时序 和OLED用户调用的代码等
引脚配置 和引脚初始化部分可以根据需要更改。
OLED.h
关于外部可调用函数的声明
OLED_Font.h
这里存的是OLED的字库数据。因为OLED显示屏本身不带字库,想要显示字符图形,还得先定义字符的点阵数据。OLED.c文件的显示函数会用到这些数据
根据教程展示显示屏
中间补充一些字幕,比如说STM32其实支持写二进制,写法为0b+数据
展示结果

接下来我们演示一下Keil的调试模式
Keil的调试模式
以LED闪烁的工程为例
在工程选项,也就是这个魔术棒,Debug这里可以对调试选项进行配置

这里默认是选择右边的这一项,这个是在硬件上在线仿真,需要我们把STLINK和STM32都连接好。

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

我们选择硬件的在线仿真。
点击这个放大镜之后

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

上面这一部分是程序运行控制的,
第一个是复位,第二个是全速运行,第三个是停止全速运行
第四个是单步运行 、跳过当前行单步运行 、跳出当前函数单步运行 、调到光标指定行单步运行

这个黄色箭头指的就是下一句将要执行的代码,我们当前函数就是从main开始的

我们可以点一下单步运行,那他就执行到了下一行

然后再单步就进到RCC这个函数里来了
点击这个跳出函数
它就可以跳到函数外面来了

我们再点击"运行到光标指定行",黄色光标就跟上来了

我们可以点击程序左边这里深灰色的区域,设置断点(就是红圆点)

然后点击全速运行,程序就会一直运行,直到断点停下

如果没有断点,再全速运行,程序就不会自动停下来,我们需要点击"停止"按钮才会停下
最后点击RST复位,程序就会回到最开始的地方
这里我们可以看到,现在程序是在启动文件的复位中断函数里,说明复位后,程序是从这里开始执行的

我们单步运行,首先会跳到SystemInit函数里

再运行一下,跳出函数,就会回到main函数
以上就是调试模式下控制程序运行的方法
调试模式还有很多强大的功能

-
第一个是命令窗口,我们点击它可以打开和关闭命令窗口
-
第二个是反汇编窗口,同上
-
第三个是符号窗口,在这里我们可以实时查看程序中所有变量的值
-
- 比如我们想看这个GPIO_InitStructure结构体的值,那就可以在这个窗口找一下。里面可以看到结构体的三个成员

如果想看一下结构体值的变化,可以在 GPIO_InitStructure 右键,添加到Watch 1 窗口

在这里就可以看到结构体的值了
我们单步运行,可以看到这个变量值的变化
剩下的还有串口显示、逻辑分析仪等等
另外,我们还可以点击这个外设菜单栏--系统资源查看,这里可以看到所有的外设寄存器

比如我们选择GPIOA,右边这里就会显示GPIOA外设的所有寄存器
我们这个程序是翻转PA0端口,那我们就可以看一下ODR寄存器,选择ODR0,这个就是PA0的输出数据寄存器
接下来我们运行,可以看到这个ODR0竟然是实时显示输出寄存器 的变化的,这说明在线调试是允许的

STM32实时执行程序、Keil软件实时显示外设寄存器状态,还能随时控制程序的开始、停止、单步运行
最后,不能在调试模式下修改程序
下节预告:EXTI外部中断+对射式红外传感器计次&旋转编码器计次