参考资料:
嵌入式单片机STM32原理及应用(机械工业出版社)
江科大STM32入门教程: 【STM32入门教程-2023持续更新中】 https://www.bilibili.com/video/BV1th411z7sn/?p=10&share_source=copy_web&vd_source=ee06a25b3dfb2900ab707b01fdff6667
STM32调试
调试方法
STM32调试方法一般有以下三种:
串口调试: 通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息
显示屏调试: 直接将显示屏连接到单片机,将调试信息打印在显示屏上
Keil调试模式: 借助Keil软件的调试模式,可使用单步运行、设置断电、查看寄存器及变量等功能
本文将对显示屏调试做简单的讲解(具体参考江科大STM32教程),重点对Keil调试模式 进行讲解和演示
OLED显示屏调试
OLED简介
OLED(Organic Light Emitting Diode): 有机发光二级管
OLED显示屏: 性能优异的新型显示屏, 具有功耗低、响应速度快、宽视角、轻薄柔韧等特点
0.96寸OLED模块: 小巧玲珑、占用接口少、简单易用,是电子设计中非常常见的显示屏模块
供电: 3~5.5V, 通信协议: I2C/SPI, 分辨率: 128*64
![](https://img-blog.csdnimg.cn/img_convert/9bea282645ff4e890a145a12d6af6d24.png)
![](https://img-blog.csdnimg.cn/img_convert/3206171d7d235dfa64c6d76aacf46f3b.png)
注意: 4脚的通信协议为I2C,7脚的通信协议为SPI
OLED驱动函数
函数 | 作用 |
OLED_Init(); | 初始化 |
OLED_Clear(); | 清屏 |
OLED_ShowChar(1, 1, 'A'); | 显示一个字符 |
OLED_ShowString(1, 3, "HelloWord!"); | 显示字符串 |
OLED_ShowNum(2, 1, 12345, 5); | 显示十进制数字 |
OLED_ShowSignedNum(2, 7, -66, 2); | 显示有符号十进制数字 |
OLED_ShowHexNum(3, 1, 0xAA55, 4); | 显示十六进制数字 |
OLED_ShowBinNum(4, 1, 0xAA55, 16); | 显示二进制数字 |
注意:
SCL、SDA 默认接到B8、B9引脚
如不按默认接法, 则俺需要更改OLED.c文件中以下四条代码
/*引脚配置*/
#define OLED_W_SCL(x) GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(x)) // 按需要更改
#define OLED_W_SDA(x) GPIO_WriteBit(GPIOB, GPIO_Pin_9, (BitAction)(x)) // 按需要更改
/*引脚初始化*/
void OLED_I2C_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; // 按需要更改
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // 按需要更改
GPIO_Init(GPIOB, &GPIO_InitStructure);
OLED_W_SCL(1);
OLED_W_SDA(1);
}
Keil调试模式
硬件在线仿真
步骤:
步骤一: 点击魔术棒,选择Debug选项,选择右边的Use
![](https://img-blog.csdnimg.cn/img_convert/f1f614b99d2a6186fd4e0fd4a7024711.png)
步骤二: 确保ST-Link与STM32单片机连接正确
步骤三: 点击放大镜按钮进入调试界面
![](https://img-blog.csdnimg.cn/img_convert/049c793a2a88f56ecee09fd1b2dc3cf5.png)
调试界面介绍
![](https://img-blog.csdnimg.cn/img_convert/6a7325117085d53d33457d5479d3ba20.png)
程序运行控制按键
![](https://img-blog.csdnimg.cn/img_convert/9de5b919a7b09a265e65c4536f906720.png)
Reset 复位功能键 点击后程序复位
![](https://img-blog.csdnimg.cn/img_convert/52ea4fa9cc8bec0162f3d0ab2fffbb0e.png)
![](https://img-blog.csdnimg.cn/img_convert/46bb6fb674cc7ae2423b2fca7d80e3ec.png)
可以看到程序回到启动文件
持续运行
按下此按键后程序会一直运行(有断点则运行至断点停止)
![](https://img-blog.csdnimg.cn/img_convert/0553ae9a1cdc5964e16161514772d945.png)
其他运行方式
![](https://img-blog.csdnimg.cn/img_convert/4646f12ef77b487a6bef8a860650e13e.png)
工具栏
![](https://img-blog.csdnimg.cn/img_convert/9869175ccd366b0d91d3bdb04c6d4f96.png)
包括有: 控制窗口、汇编窗口、符号窗口、汇编窗口、调用栈窗口、Watch窗口、内存窗口、序列窗口、逻辑分析仪窗口和系统查看窗口等等。
下面将介绍几个重要的窗口
逻辑分析仪窗口
![](https://img-blog.csdnimg.cn/img_convert/a5e991c4f7c3cdb37a0fc8f783374b3e.png)
点击后出现逻辑分析仪,可以测输入输出信号的波形,根据波形可以判断程序是否正确
控制窗口
![](https://img-blog.csdnimg.cn/img_convert/dd220f94449aac73bd66a0fc5672c4c7.png)
可以在控制窗口中输入一些指令来完成某些操作
系统查看窗口
![](https://img-blog.csdnimg.cn/img_convert/6735959fcf134075b7847b3035f10064.png)
可以选择对应外设,查看其寄存器的状态
![](https://img-blog.csdnimg.cn/img_convert/15270bde3dc0aaa816c86150b9fa50c5.png)
这里查看的是GPIOC ODR寄存器的状态,可以看到ODR13是一个输出状态;值得一提的是,该状态是实时的动态状态,闪烁程序运行时ORD13的√每隔0.5s显示一次
电脑软件仿真
点击魔术棒,选择Debug选项,选择左边的Use
![](https://img-blog.csdnimg.cn/img_convert/608acf9a38885d09b63dcccf2af52bfc.png)
其余内容与硬件在线仿真类似,二者的区别是硬件在线仿真的方式需要仿真器和STM32开发板,优点是调试过程中硬件也会出现相应现象;而软件仿真的方式则不需要硬件支持,直接在电脑上即可运行,常用逻辑分析仪查看波形,现象没那么明显
逻辑分析仪的使用
步骤:
步骤一:
![](https://img-blog.csdnimg.cn/img_convert/68f1203d6890a6129999e3867b5e0d57.png)
步骤二:进入调试界面,再进入逻辑分析仪点击Setup,添加需要分析的端口或引脚,将Display Type改为Bit
![](https://img-blog.csdnimg.cn/img_convert/bc026c2040b8bda096e879686b204e4a.png)
![](https://img-blog.csdnimg.cn/img_convert/8b489b5d84dbc48666af9d71d9bb95d0.png)
![](https://img-blog.csdnimg.cn/img_convert/5c38cfcd81f8638c793b734d89e25a80.png)
步骤三: 点击全速运行
![](https://img-blog.csdnimg.cn/img_convert/f2dc7bc61e679a8e4d32fb15b0d577d9.png)
步骤四: 点击Auto即可出现波形
![](https://img-blog.csdnimg.cn/img_convert/b0779b07650407abd0e835032ba58e06.png)