STM32程序调试技巧

Table of Contents

前言

调试原理

软件调试

​硬件调试


前言

这一篇博客主要讲解STM32F1开发板如何进行调试,分别是硬件调试(STLINK)调试和软件调试。

调试原理

STM32的调试原理核心是比较复杂的,但是我们了解的东西可以简单一些。首先STM32支持JTAG和SWJ调试,其中JTAG需要五个接口,SWJ仅需要两个接口,所以在之后的大部分调试我们优先选择SWJ进行调试,如下图是STM32中文参考手册的M3调试框图。蓝框为JTAG调试,红框为SWJ调试端口。

在这里插入图片描述

如下图所示,SWJ调试只需要PA13和PA14两个引脚即可实现调试功能。

在这里插入图片描述

所以在一般情况下使JTAG-DP接口禁止,SW-DP接口允许

在这里插入图片描述

而如何实现使JTAG-DP接口禁止,SW-DP接口允许,需要用上一个GPIO的函数

void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);

FunctionalState NewState设置为ENABLE,由下面代码可知GPIO_Remap设置为 GPIO_Remap_SWJ_JTAGDisable。

#define GPIO_Remap_SWJ_JTAGDisable  ((uint32_t)0x00300200)  /*!< JTAG-DP Disabled and SW-DP Enabled */

软件调试

首先按如图设置Debug选项卡。

在这里插入图片描述

接下来,我们点击开始/停止仿真按钮,开始仿真,出现如图所示的界面。

在这里插入图片描述

对于Debug工具条无论网上还是书上都有很很详细的讲解,这个地方我就只贴一张图。比较重要的是逻辑分析窗口(电平高低),观察窗口(观察变量的值和C语言的观察窗口一样)和串口打印窗口。

在这里插入图片描述

调试的功能键和C语言调试基本相同。如果要查看某个变量的值只需选中加入到watch窗口即可

在这里插入图片描述

串口逻辑同理,串口输出信息如下图所示:

在这里插入图片描述
对跑马灯可以进行逻辑分析,逻辑分析是只有软件调试才有的功能,首先打开逻辑分析仪,打开之后如下图所示。

在这里插入图片描述

在这里插入图片描述
接下来添加要分析的端口,比如我们要分析PE5和PB5,只需在右上角点击添加输入PORTB.5和PORTE.5即可,Type调整为Bit,颜色自定。

在这里插入图片描述
然后设置一个断点,即可开始分析,Zoom用来设置坐标轴的单位,将鼠标移至图中还可以得到分析的相应信息。

在这里插入图片描述
除此之外,在工具栏中的Peripherals中还可以看到更多的关于寄存器的信息,比如ODR寄存器用来设置高低电平的,就可以看到ODR寄存器每一位的状态。

在这里插入图片描述

在这里插入图片描述
硬件调试

首先是要进行设置,我这里可能说的不全面,详细的设置方法参考《STM32F1开发指南-库函数版本》3.4小节和6.4小节。
首先在Debug板块中进行如下设置,然后再进入Utilities将红框勾选。

在这里插入图片描述

在这里插入图片描述
之后回到Debug,再ST-LINK旁边点击Setting,进入Flash Download,注意蓝框中的芯片要对应是连接的芯片,红框如图设置。

在这里插入图片描述
之后要用ST-LINK连接开发板和电脑进行下一步设置。PORK选择SW,其他的根据需要修改,然后开始连接开发板开始调试即可,点击。

在这里插入图片描述
先编译下载,再调试。

在这里插入图片描述

之后可以打开串口调试助手,一直让程序run下去,然后串口调试助手就可以看到一直在打印t的值,调试程序见后文。

值得注意的是,串口的选择不要选错COM口了,否则会看不到结果,还要要记得点开启串口。

在这里插入图片描述
调试程序

main.c
#include "sys.h"
#include "delay.h"
#include "usart.h"
int main(void)
 {        
     u8 t=0;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
    delay_init();             //延时函数初始化      
    uart_init(115200);     //串口初始化为115200
  while(1)
    {
        printf("t:%d\r\n",t);
        delay_ms(500);
        t++;
    }     
} 


参考资料
《STM32F1开发指南-库函数版本》3.4小节和6.4小节
《STM32中文参考手册V10》29章

发布了415 篇原创文章 · 获赞 151 · 访问量 39万+

猜你喜欢

转载自blog.csdn.net/ds1130071727/article/details/105209657
今日推荐