第03章 OLED
3.1 OLED调试工具
3.1.1 调试方式
(1)串口调试:通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息.。
相当于把电脑的屏幕挂载到单片机上,方便单片机显示调试信息。
(2)显示屏调试:直接将显示屏连接到单片机,将调试信息打印在显示屏上
(3)Keil调试模式:借助Keil软件的调试模式,可使用单步运行、设置断点、查看寄存器及变量等功能。
3.1.2 OLED简介
OLED(Organic Light Emitting Diode):有机发光二极管
OLED显示屏:性能优异的新型显示屏,具有功耗低、相应速度快、宽视角、轻薄柔韧等特点
0.96寸OLED模块:小巧玲珑、占用接口少、简单易用,是电子设计中非常常见的显示屏模块
供电:3~5.5V,通信协议:I2C/SPI,分辨率:128*64
3.1.3 OLED硬件电路
SCL和SDA是I2C的通信引脚,需要接在单片机I2C通信引脚上,本教程提供的函数模块是用GPIO口模拟的I2C通信,所以这两个端口可以接在任意的GPIO口上。
除VCC和GND外,剩下的引脚是SPI通信的引脚, 如果是GPIO口模拟的通信协议,那也是接在任意的GPIO口上就行了。
3.1.4 本教程OLED驱动函数
函数 | 作用 |
OLED_Init(); | 初始化 |
OLED_Clear(); | 清屏 |
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); | 显示二进制数字 |
3.2 OLED显示屏驱动模块使用
3.2.1 硬件电路
VCC和GND需要接电源的正极和 负极,所以在屏幕背面接了两根线为OLED提供电源,当然也接上了STM32的PB6和PB7引脚,不过没关系,不初始化这两个引脚就可以了。STM32的引脚上电后,如果不初始化,默认是浮空输入的模式,在这个模式下,引脚不会输出电平,所以不会有什么影响。当然也可以不接这两根条线,直接用程序给PB6输出低电平,PB7输出高电平,用GPIO口直接给OLED供电也没问题,因为这个OLED功率很小,所以也是可以驱动的,不过用GPIO口供电不是很规范,做实际项目最好还是用电源供电。
3.2.2 软件部分
复制《按键控制LED》工程文件夹,改名为《OLED显示屏》。
(1)将OLED显示屏驱动函数添加到工程中。
(2)main.c
#include "stm32f10x.h" // Device header
#include "Delay.h" // 调用延时头文件
#include "OLED.h"
uint8_t KeyNum;
int main(void)
{
OLED_Init(); // 初始化OLED屏幕
OLED_ShowChar(1,1,'A'); // 在1行1列显示字符A
OLED_ShowString(1,3,"HelloWOrld!"); // 在1行3列显示字符串
OLED_ShowNum(2,1,12345,5); // 在2行1列显示12345这个数字,长度为5,如果最后一个参数比数字长度长,会在前面补0,比数字长度小,会把高位数字切掉
OLED_ShowSignedNum(2,7,12345,5); // 显示有符号十进制数字
// OLED_ShowSignedNum(2,7,-66,2); // 显示有符号十进制数字
OLED_ShowHexNum(3,1,0xAA55,4); // 显示16进制数
OLED_ShowBinNum(4,1,0xAA55,16); // 显示二进制数,C语言不支持直接写二进制数
Delay_s(2);
OLED_Clear(); // 清屏
while(1)
{
}
}
3.3 Keil的调试模式
以《LED闪烁》为例。
默认使用右边这一项,在硬件上在线仿真, 需要把STLINK和STM32都连接好。如果不想连接硬件,也可以选择左边的使用仿真器这个选项,这样就是电脑模拟STM32的运行了。使用在硬件上在线仿真测试。
首先编译一下确保代码没有问题。
如果想看结构体值得变化:
查看外设寄存器
如果要修改程序,是不能直接在调试模式下修改的,需要先退出调试模式,重新编译,再进入调试模式。