stm32程序调试方式(OLED显示屏调试以及Keil调试模式)

文章目录


前言

提示:本文主要用作在学习江协科大STM32入门教程后做的归纳总结笔记,旨在学习记录,如有侵权请联系作者

本文主要介绍stm32程序的调试方法(OLED显示屏调试以及Keil调试模式)。


一、调试的方式

stm32程序常用的调试方式如下:

调试方式 描述
串口调试 通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息
显示屏调试 直接将显示屏连接到单片机,将调试信息打印在显示屏上
Keil调试模式 借助Keil软件的调试模式,可使用单步运行、设置断点、查看寄存器及变量等功能

二、OLED显示屏调试

2.1 OLED简介

  • OLED(Organic Light Emitting Diode):有机发光二极管
  • OLED显示屏:性能优异的新型显示屏,具有功耗低、相应速度快、宽视角、轻薄柔韧等特点
  • 0.96寸OLED模块:小巧玲珑、占用接口少、简单易用,是电子设计中非常常见的显示屏模块
  • 供电:3~5.5V,通信协议:I2C/SPI,分辨率:128*64

2.2 OLED硬件电路

1. 四针脚OLED显示屏:

其中SCL跟SDA是I2C的通信引脚,需要接在单片机I2C的通信引脚上。由于驱动函数模块用的是GPIO口模拟的I2C通信,所以这两个端口可以接到任意的GPIO口上。

2. 七针脚OLED显示屏:

其中除了VCC跟GND引脚,其他都是SPI的通信引脚。

2.3 OLED驱动函数介绍

函数 功能
OLED_Init(); 初始化
OLED_Clear(); 清屏
OLED_ShowChar(起始行, 起始列, '显示字符'); 显示一个字符
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); 显示二进制数字

2.4 OLED显示屏应用案例代码

主程序main.c文件:

c 复制代码
#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);
	
	while (1)
	{
		
	}
}

OLED显示屏工程:OLED显示屏驱动代码及应用案例

三、Keil调试模式

点击魔术棒按钮,找到Debug选项,这里可以对调试选项进行配置。这里默认是选择右边这项的,这个是在硬件上在线仿真,需要我们把STLINK跟stm32都连接好,如果你不想连接硬件,也可以选择左边这个选择仿真器这个选项,这样就是电脑模拟stm32的运行了。

在这里我们选择使用硬件的在线仿真作为演示。首先,在进行硬件在线仿真之前,先把stm32硬件电路接好并通上电运行,接着找到右上角带d字样的图标,点击进入调试模式。如果想要退出调试模式,再点一下该按钮就行了。

在这个界面里,主窗口就是我们的C程序,上面这个窗口就是C语言翻译成汇编程序,然后左边这个窗口是寄存器组和状态标志位等信息。

下面这一部分是用于程序运行控制的,从左边开始依次是复位、运行、停止运行、单步运行、跳过当前行单步运行、跳出当前函数单步运行、跳到光标指定行单步运行。

如果想要查看程序运行过程中某个变量的值,可以点击这个按钮。

点击按钮后右边就会出现一个弹窗,比如我们要查看LED_Init函数里GPIO_InitStructure变量的值,就可以在右边找到对应的LED.c。

然后再找到GPIO_InitStructure变量右键单击选择watch1,然后就能在下面的窗口实时观察到该变量数值的变化了。

另外,我们还可以点击这个外设菜单栏 -> 系统资源查看 ,这里可以看到所以的外设寄存器。


总结

总之,调试程序的基本思想就是缩小范围、控制变量、对比测试等,调试的方法是多样的,大家可以根据实际情况选择一种适合自己的调试方式。

相关推荐
优信电子1 小时前
STM32F103C8T6连接ESP-01S实现WiFi通信:TCP客户端开发实战(二)
stm32·嵌入式硬件·物联网·tcp/ip·esp8266·stm32f103c8t6·esp01/01s
小僧景贤1 小时前
嵌入式之队列解析(裸机/RTOS通用原理+实战场景+源码解析)
数据结构·嵌入式·队列·裸机开发·rtos开发·固件架构
智闲电子设计2 小时前
STM32 外扩 QSPI Flash 实战:字库和开机图存不下,就把 W25Q64 映射成内存直接读
网络·stm32·嵌入式硬件
嵌入式阿蔡2 小时前
逻辑分析仪实战:从波形一眼看出 UART/SPI/I2C 通信错在哪
网络·stm32·单片机·嵌入式硬件·嵌入式实时数据库
LCG元2 小时前
STM32H743串口DMA空闲中断不定长接收与D-Cache一致性踩坑实录
stm32·单片机·嵌入式硬件
LCG元2 小时前
STM32内部温度传感器供电漂移8℃的根因定位与VREFINT比例校准实测
stm32·单片机·嵌入式硬件
我是一棵无人问荆的小草18 小时前
stm32f103单片机的NVIC分组2介绍
stm32·单片机·嵌入式硬件
紫幽19 小时前
从 0 用 Vue 做屏并生成 LVGL 单片机代码(完整源码备忘)
前端·单片机
Be for thing20 小时前
【嵌入式成长3】STC89C51外部中断|中断原理、寄存器、中断服务函数
单片机·嵌入式硬件·学习
科芯创展1 天前
1A,5.5VIN,同步升降压恒流芯片,XZ3442
单片机