STM32固件库(标准外设库)入门学习 第四章OLED屏幕使用
本学习教程,参考B站江科大自化协STM32视频,型号为STM32F103C8T6。
文章目录
前言
对于单片机而言,目前有个问题就是程序调试,单片机不像电脑,电脑有一个很大的屏幕,想看什么变量、参数,直接打印到屏幕上就可以了,但是单片机不一样,很多时候由于成本和电路结构的限制,其并不会有一个像电脑屏幕那样强大的显示屏,这就对的调试造成了困难。就像让你学习C语言,但是不让你用printf这个打印函数,C语言是不是根本就没法学。同样给你一个单片机,但是没有一个可以显示参数的东西,那也没法学单片机。所以先来学习程序调试方法。
一、程序调试方法
1.串口调试
通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息,这种非常常见,就是用串口将单片机连接到电脑,相当于把电脑的屏幕挂在单片机上,方便单片机显示调试信息,一般再设计PCB电路板的时候,都会PCB边上留一个串口通信的引脚,需要调试程序的时候,把单片机连在电脑上,然后就可以在电脑屏幕打印信息了,调试好后,断开串口,程序就能正常工作。串口调试的优势是不仅可以显示单独的参数,还可以显示曲线、图形、图像等,还可以自己制作软件,实现一个强大的用户交互界面。弊端就是调试的时候要拖着电脑,而且通常串口助手只能以信息流的方式呈现数据,只能一行一行的打印,若有很多变化的数据要显示,那么只能在电脑上刷屏显示,这样用起来就不太方便。
2.显示屏调试
直接将显示屏连接到单片机,将调试信息打印在显示屏上,这种方法比较直接,单片机没有参数的东西,那就直接接一个屏幕上去。优势:对于不断变化的数据,可以覆盖刷新显示,显示屏接在单片机上,显示方式很直接,做一些稍微复杂的东西,都需要有一个人机交互的界面,可以直接把显示屏当作产品的一部分,比较好用。弊端就是屏幕太小,显示内容有限,没有电脑软件那么强大的功能。
3.Keil调试模式
借助Keil软件的调试模式,可使用单步运行、设置断点、查看寄存器及变量等功能。这是一个强大的工具,在魔术棒,debug里,目前选择的是ST-LINK,这时需要把ST-LINK与STM32都连接好,不想连接硬件,也可以选择左侧使用仿真器(use simulator)。使用ST-LINK,进入调试前,连接好是stm32,之后编译一下,确保工程没有问题,找到放大镜带d的图标,进入调试模式。
进入调试模式后:
主窗口为C语言调试程序。
上面窗口就是C翻译成汇编程序。
左侧窗口是寄存器组和标志位等信息,这个是单片机硬件底层很重要的东西,汇编需要,c语言不用管。
上面一栏,第一个是复位,第一个是全速运行,第三个是停止运行,第四个是单步运行,第五个是跳过当前行单步运行,第六个跳出当前函数单步运行,第七个跳到光标指定行单步运行。这种方式可以精确追踪程序是如何运行的,如果不清楚程序是如何一步步运行的,在此调试模式里单步运行探索一下,可以对程序的运行逻辑就会有更深的理解。还有更强大的功能,包括命令窗口、反汇编窗口、符号窗口【这里可以实时查看程序中所有变量的值,右击添加到watch1窗口】、串口显示、逻辑分析仪等,自行探索。
在外设(peripherals)菜单栏,可以实时看到所有外设寄存器的状态。
4.点灯调试法
如果不知道程序是否执行到某个位置,就可以在这个位置放一个点灯代码,运行到灯就亮,没有运行到灯就不亮。
5.注释调试法
程序原来是好的,加了某段程序就死了,这时可以把新加入的程序全部注释掉,恢复到正常运行状态,然后依此一行一行解除注释,指导错误出现。或注释一部分测试一部分,减少程序运行的部分,来定位出问题的程序。
6.对照法
找一个没问题的程序,他的执行逻辑没问题,你感觉自己写的也没问题,但是他的可以运行,你的却不行。此时可以对照一下,在他的程序逻辑上,逐步替换成你的程序逻辑,这样比较容易发现错误的位置。
总之测试程序的基本思想就是缩小范围、控制变量、对比测试等。
二、显示屏调试——OLED
重点介绍利用OLED显示屏进行调试
1.OLED简介
左图SCL和SDA是I2C的通信引脚,本教程所给的驱动模块函数是GPIO口模拟的I2C通信,所以这两个端口可以接在任意的GPIO口上。
右图7针脚的电路,初电源外剩下的是SPI协议的引脚。若用GPIO口模拟的通信协议,接在任意GPIO口即可。
所给的OLED驱动函数入上所示,把OLED分割成4行16列。
2.如何使用OLED驱动函数
OLED的供电孔接下方电源,当然这也会接到PB6、PB7两个引脚,这也没关系,只要不初始化这两个引脚就可以。STM32上电后,如果不初始化,默认是浮空输入的模式,这个模式下,引脚不会输出电平,不会有什么影响。当然也可以不接电源线,直接用PB6、PB7直接给OLED供电也可以,因为OLED功率很小,可以直接驱动,但是这种方式不规范,做实际项目的话最好还是用电源供电。
使用OLED函数仅需要修改这些位置。OLED_Font.h是OLED的字库文件,.c会用到这些数据
总结
本文主要介绍利用OLED显示屏的调试方法,后面会常用到此方法