目录
一、调试方式
1)串口调试
通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息
非常常见,就是用串口将单片机连接到电脑,相当于把电脑的屏幕挂在单片机上,方便单片机显示调试信息,但要学会串口通信
优势
可借助强大的电脑来调试,电脑的软件不仅可以显示单独的参数,还可以显示曲线、图形、图像等,更甚还可以自行做软件来实现强大的用户交互界面
弊端
调试时需要拖着电脑,且通常的串口助手只能以信息流的方式呈现数据,即只能一行一行地打印,如若有很多变化的数据要显示,就只能在电脑上刷屏显示,用起来不太方便
2)显示屏调试
直接将显示屏连接到单片机,将调试信息打印在显示屏上
方法比较直接
优势
对于不断变化的数据,可以覆盖刷新显示,且显示屏可以始终接在单片机上,显示方式很直接;做复杂东西,需要有人机交互的界面时,可以直接把显示屏当做产品一部分
弊端
屏幕太小,显示内容有限,没有电脑软件那么强大功能
3)Keil调试模式
借助Keil软件的调试模式,可使用单步运行、设置断点、查看寄存器及变量等功能
|----------------------------------------------------------------------------|
| |
进入调试模式
|-----------------------------------------------------------------------------|
| |
还有很多调试法,如
4)点灯调试法
(当不清楚程序是不是执行到了某个位置,那就可以在该位置放一个点灯的代码,运行到了灯就亮,没运行到,灯就不亮)
5)注释调试法
(源程序是好的,但加了某段程序就死了,可以把新加入的程序全部注释掉,恢复到正常运行的状态,再依次一行一行地解除注释,直到错误出现 或 注释掉一部分来测试另一部分,减少程序运行的部分来定位出问题的程序在哪里)
6)对照法
(找到一个没问题的程序,其执行逻辑没问题,且觉得自身写的逻辑也没问题的话,就可以对照一下,在他的程序逻辑上,逐步替换转换成你的程序逻辑,这样比较容易发现错误在什么地方)
测试程序的基本思想:缩小范围、控制变量、对比测试等
二、OLED简介
OLED,有机发光二极管
OLED组件
OLED显示屏
性能优异的新型显示屏,具有功耗低(OLED每个像素都为单独的发光二极管,每个像素都可以自发光,不像LCD需要有背光,所以OLED屏幕比较省电),响应速度快(使OLED有更高的刷新率,总线时序快,也可以避免阻塞程序)、宽视角(因为自发光,所以在任何角度看,显示的内容都为清晰的,OLED屏幕基本各个视角都可以看清屏幕;而LCD从上或下面斜着看屏幕,屏幕会变黑,难以看清上面内容,二者为可视视角的差别)、轻薄柔韧等特点
0.96寸OLED模块
小巧玲珑、占用接口少、简单易用,是电子设计中非常非常常见的显示屏模块
该OLED只有一种颜色,分辨率也比较低,只需几根线和简单的通信协议即可驱动,占用资源比较小
OLED外观和种类
|----------------------------------------------------------------------------|
| |
1)四针脚 像素白色
2)七针脚 像素白色 需要占用的IO口多一些
3)蓝色像素
4)黄蓝双色像素(上 1/4像素固定为黄色,下 3/4像素固定为蓝色,适合做需要显示标题行的界面)
各项参数
**供电:**3~5.5V (3.3V和5V单片机都兼容)
**通信协议:**I2C/SPI (4针脚屏幕,一般用的是I2C通信协议;7针脚屏幕,一般用的是SPI通信协议)
**分辨率:**128*64
三、硬件电路
|----------------------------------------------------------------------------|
| |
1)四针脚
GND接GND
VCC接3.3V,给OLED供电
SCL & SDA 为I2C的通信引脚,需要接在单片机I2C通信的引脚上
(若给的驱动函数模块为GPIO口模拟的I2C通信,则两个端口就可以接在任意的GPIO口上)
2)七针脚
GND
VCC接电源
剩下的引脚为SPI通信协议的引脚
(若给的驱动函数模块为GPIO口模拟的协议,则两个端口就可以接在任意的GPIO口上)
四、OLED驱动函数
|----------------------------------------------------------------------------|
| |
解析:
ShowChar(指定起始行,指定起始列,'要显示的字符');
ShowString(指定行,指定列,"要显示的字符串");
ShowNum(指定行,指定列,显示数字,要显示的数字长度);
ShowNum长度参数比数字长度长,则会在前面补0;比数字长度小,就会把高位的数据切掉(前面的位);ShowNum只显示无符号数
ShowSignedNum显示有符号数,正数前自带加号
对于进制转换 ShowHexNum (转十六进制),ShowBinNum(转二进制)而言
因为C语言不能直接写二进制的数,所以这里的显示数字用十六进制来代替(格式内容同ShowNum一样,但长度为转化后进制的长度)
tips:
STM32引脚上电后,如果不初始化,默认是浮空输入的模式(在该模式下,引脚不会输出电平,所以不会有什么影响)
SCL &SDA 两个引脚初始化为开漏输出模式
**文件OLED_Font.h:**存放OLED的字库数据
要想显示字符图形,还得先定义字符的点阵数据,即字库