[10]STM32程序调试方法-STLINK调试和软件调试

前言

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

调试原理

STM32的调试原理核心是比较复杂的,但是我们了解的东西可以简单一些。首先STM32支持JTAG和SWJ调试,其中JTAG需要五个接口,SWJ仅需要两个接口,所以在之后的大部分调试我们优先选择SWJ进行调试,如下图是STM32中文参考手册的M3调试框图。蓝框为JTAG调试,红框为SWJ调试端口。
[10]STM32程序调试方法-STLINK调试和软件调试_第1张图片
如下图所示,SWJ调试只需要PA13和PA14两个引脚即可实现调试功能。
[10]STM32程序调试方法-STLINK调试和软件调试_第2张图片
所以在一般情况下使JTAG-DP接口禁止,SW-DP接口允许
[10]STM32程序调试方法-STLINK调试和软件调试_第3张图片
而如何实现使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选项卡。
[10]STM32程序调试方法-STLINK调试和软件调试_第4张图片
接下来,我们点击开始/停止仿真按钮,开始仿真,出现如图所示的界面。
[10]STM32程序调试方法-STLINK调试和软件调试_第5张图片
对于Debug工具条无论网上还是书上都有很很详细的讲解,这个地方我就只贴一张图。比较重要的是逻辑分析窗口(电平高低),观察窗口(观察变量的值和C语言的观察窗口一样)和串口打印窗口。
[10]STM32程序调试方法-STLINK调试和软件调试_第6张图片
调试的功能键和C语言调试基本相同。如果要查看某个变量的值只需选中加入到watch窗口即可,串口,逻辑同理。
[10]STM32程序调试方法-STLINK调试和软件调试_第7张图片
串口输出信息如下图所示:
[10]STM32程序调试方法-STLINK调试和软件调试_第8张图片

对跑马灯可以进行逻辑分析,逻辑分析是只有软件调试才有的功能,首先打开逻辑分析仪,打开之后如下图所示。
[10]STM32程序调试方法-STLINK调试和软件调试_第9张图片
[10]STM32程序调试方法-STLINK调试和软件调试_第10张图片
接下来添加要分析的端口,比如我们要分析PE5和PB5,只需在右上角点击添加输入PORTB.5和PORTE.5即可,Type调整为Bit,颜色自定。[10]STM32程序调试方法-STLINK调试和软件调试_第11张图片
然后设置一个断点,即可开始分析,Zoom用来设置坐标轴的单位,将鼠标移至图中还可以得到分析的相应信息。
[10]STM32程序调试方法-STLINK调试和软件调试_第12张图片
[10]STM32程序调试方法-STLINK调试和软件调试_第13张图片
除此之外,在工具栏中的Peripherals中还可以看到更多的关于寄存器的信息,比如ODR寄存器用来设置高低电平的,就可以看到ODR寄存器每一位的状态。[10]STM32程序调试方法-STLINK调试和软件调试_第14张图片
[10]STM32程序调试方法-STLINK调试和软件调试_第15张图片

硬件调试

首先是要进行设置,我这里可能说的不全面,详细的设置方法参考《STM32F1开发指南-库函数版本》3.4小节和6.4小节。
首先在Debug板块中进行如下设置,然后再进入Utilities将红框勾选。
[10]STM32程序调试方法-STLINK调试和软件调试_第16张图片
[10]STM32程序调试方法-STLINK调试和软件调试_第17张图片
之后回到Debug,再ST-LINK旁边点击Setting,进入Flash Download,注意蓝框中的芯片要对应是连接的芯片,红框如图设置。[10]STM32程序调试方法-STLINK调试和软件调试_第18张图片
之后要用ST-LINK连接开发板和电脑进行下一步设置。PORK选择SW,其他的根据需要修改,然后开始连接开发板开始调试即可,点击。[10]STM32程序调试方法-STLINK调试和软件调试_第19张图片
先编译下载,再调试。
在这里插入图片描述
之后可以打开串口调试助手,一直让程序run下去,然后串口调试助手就可以看到一直在打印t的值,调试程序见后文。

值得注意的是,串口的选择不要选错COM口了,否则会看不到结果,还要要记得点开启串口。
[10]STM32程序调试方法-STLINK调试和软件调试_第20张图片

调试程序

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章

你可能感兴趣的:(STM32)