00. 目录

文章目录

  • 00. 目录
  • 01. 概述
  • 02. STLINK调试程序
  • 03. 附录
  • 04. 声明

01. 概述

在实际的开发过程中,如果程序比较简单就不需要调试程序,但是对于比较复杂的程序,往往需要通过调试来解决bug。串口只能下载代码,并不能实时跟踪调试,而利用调试工具,比如 JLINK、ULINK、STLINK等就可以实时跟踪程序,从而找到你程序中的 bug,使你的开发事半功倍。

STLINK 支持 JTAG 和 SWD,同时 STM32F4 也支持 JTAG 和 SWD。所以,我们有 2 种方式可以用来调试,JTAG 调试的时候,占用的 IO 线比较多,而 SWD 调试的时候占用的 IO 线很少,只需要两根即可。

02. STLINK调试程序

2.1 点击开始调试按钮

编译一下工程。然后点击:(开始/停止仿真按钮),开始仿真(如果开发板的代码没被更新过,则会先更新代码(即下载代码),再仿真,你也可以通过按下载按钮,只下载代码,而不进入仿真。特别注意:开发板上的 B0和 B1 都要设置到 GND,否则代码下载后不会自动运行的!)

2.2 跳转到主函数执行

2.3 Debug工具条介绍

因为我们之前勾选了 Run to main()选项,所以,程序直接就运行到了 main 函数的入口处。另外,此时 MDK 多出了一个工具条,这就是 Debug 工具条,这个工具条在我们仿真的时候是非常有用的,下面简单介绍一下 Debug 工具条相关按钮的功能。

复位:其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。按下该按钮之后,代码会重新从头开始执行。

执行到断点处:该按钮用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的,而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是你在查看的地方设置了断点。

停止运行:此按钮在程序一直执行的时候会变为有效,通过按该按钮,就可以使程序停止下来,进入到单步调试状态。

执行进去:该按钮用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的。

执行过去:在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行。

执行出去:该按钮是在进入了函数单步调试的时候,有时候你可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数,回到函数被调用的位置。

执行到光标处:该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功能,但是两者是有区别的,断点可以有多个,但是光标所在处只有一个。

汇编窗口:通过该按钮,就可以查看汇编代码,这对分析程序很有用。

堆栈局部变量窗口:通过该按钮,显示 Call Stack+Locals 窗口,显示当前函数的局部变量及其值,方便查看。

观察窗口:MDK5 提供 2 个观察窗口(下拉选择),该按钮按下,会弹出一个显示变量的窗口,输入你所想要观察的变量/表达式,即可查看其值,是很常用的一个调试窗口。

内存查看窗口:MDK5 提供 4 个内存查看窗口(下拉选择),该按钮按下,会弹出一个内存查看窗口,可以在里面输入你要查看的内存地址,然后观察这一片内存的变化情况。是很常用的一个调试窗口

串口打印窗口:MDK5 提供 4 个串口打印窗口(下拉选择),该按钮按下,会弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容。

逻辑分析窗口:该图标下面有 3 个选项(下拉选择),我们一般用第一个,也就是逻辑分析窗口(Logic Analyzer),点击即可调出该窗口,通过 SETUP 按钮新建一些 IO 口,就可以观察这些 IO 口的电平变化情况,以多种形式显示出来,比较直观。

系统查看窗口:该按钮可以提供各种外设寄存器的查看窗口(通过下拉选择),选择对应外设,即可调出该外设的相关寄存器表,并显示这些寄存器的值,方便查看设置的是否正确。

Debug 工具条上的其他几个按钮用的比较少,我们这里就不介绍了。以上介绍的是比较常用的,当然也不是每次都用得着这么多,具体看你程序调试的时候有没有必要观看这些东西,来决定要不要看。

特别注意:串口打印窗口和逻辑分析窗口仅在软件仿真的时候可用,而 MDK5 对 STM32F4的软件仿真,基本上不支持(故本教程直接没有对软件仿真进行介绍了),所以,基本上这两个窗口用不着。但是对 STM32F1 的软件仿真,MDK5 是支持的,在 F1 开发的时候,可以用到。

2.4 设置和取消断点

我们把光标放到 test.c 的第22行左侧的灰色区域,然后按下鼠标左键,即可放置一个断点(红色的实心点,也可以通过鼠标右键弹出菜单来加入),再次单击则取消。

2.5 点击run执行到断点处

2.6 查看外设信息

点击菜单栏的 Peripherals→System Viewer→GPIO→GPIOF。可以看到,有很多外设可以查看,这里我们查看的是GPIOF 的情况。

单击 GPIOF后会在 IDE 右侧出现一个如图

2.7 执行完初始化

我们可以查看GPIOF 的各个寄存器设置状态,从而判断我们写的代码是否有问题,只有这里的设置正确了之后,才有可能在硬件上正确的执行。同样这样的方法也可以适用于很多其他外设,这个读者慢慢体会吧!这一方法不论是在排错还是在编写代码的时候,都是非常有用的。

2.8 查看栈信息

03. 附录

6.1 【STM32】STM32系列教程汇总

网址:【STM32】STM32系列教程汇总

04. 声明

该教程参考了正点原子的《STM32 F4 开发指南》

【STM32】STLINK调试程序教程相关推荐

  1. 使用STM32 ST-LINK Utility下载程序教程

    打开STM32 ST-LINK Utility软件 点击[File]–[Open file-]双击选择要下载的程序,后缀为.hex或.bin文件,这里以.hex文件为例. 点[Program veri ...

  2. STM32 基础系列教程 50 – MbedTls

    前言 mbed TLS(以前称为PolarSSL)是TLS和SSL协议的实现,并且需要相应的加密算法和支持代码.这是双重许可与Apache许可证 2.0版(与GPLv2许可也可).网站上指出,mbed ...

  3. STM32 基础系列教程 49 – Jansson

    前言 JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全 ...

  4. STM32 基础系列教程 48 – CJSON

    前言 JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全 ...

  5. STM32 基础系列教程 47 - MD5

    前言 MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信 ...

  6. STM32 基础系列教程 46 – RNG

    前言 随机数发生器(RNG)是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 32 位的随机数.STM32F407自带RNG ,本节将给大演示STM32F4系列MCU中的RNG的使用.用 ...

  7. STM32 基础系列教程 27 - USB_HID

    前言 学习stm32 USB接口使用,学会用CUBE工具快速创建USB设备工程及调试,关于usb的相关知道请读者提前准备并学习,当然如果不想深究其中原理的话,跟着本文来操作就可以实现基于USB的设备开 ...

  8. STM32 基础系列教程 17 – CRC

    前言 学习stm32 循环冗余校验(CRC)计算单元接口使用,学会stm32f103 CRC应用与编程,关于CRC的基础知识请各位自行百度,STM32有些芯片的CRC多项式可自由设定,有些则是固定值0 ...

  9. STM32 ST-LINK Utility介绍、下载、安装、使用方法

    推荐 分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/strongerhuang 该文章相关教 ...

最新文章

  1. js时间戳转换成日期格式
  2. Vue 组件库 HeyUI@1.17.0 发布,新增 Skeleton 组件
  3. Android系统移植与驱动开发--第四章
  4. 夺命雷公狗---linux NO:22 linux下的yum安装的高级配置
  5. 资源权限操作-添加资源权限
  6. 6 道 BATJ 必考的 Java 面试题
  7. 动态规划——基本思想
  8. Scrapy读取设置文件(settings.py)
  9. 昔日光伏巨头赛维LDK迎“接盘侠” 平煤系深度整合产业链
  10. 爱上一个人的七个预兆
  11. 用计算机视频,如何用计算机做视频
  12. 怎么创建c语言数组的格式,c – 如何创建类类型数组?
  13. Oracle_linux_lesson_p2
  14. 第五章 国内著名网络数据库系统
  15. nginx: [warn] conflicting server name locahost on 0.0.0.0:80, ignored
  16. win10触屏输入法_Win10触摸键盘怎么使用手写板功能输入?
  17. smartbi问题_SAP BO的五大尴尬,Smartbi就是HANA用户的“菜”
  18. STM32 CAN通信之二:正常模式
  19. 干货 | 关于离岸银行开户(境外开户),看这一篇就够了
  20. 关于巴伦——Marchand巴伦

热门文章

  1. 告别.NET生成报表统计图的烦恼 (转)
  2. WPF 重要新概念读书笔记(转)
  3. 绍兴市一男子醉酒驾车还冲上公交车暴打司机
  4. Linux 下安装 Oracle9i
  5. PHP stripos strpos,strpos()和stripos()函数的区别
  6. java nio与io_Java NIO和IO的区别(转)
  7. 算法与数据结构_数据结构与算法专题--算法基本概念
  8. 几款流行的HTML5 UI 框架比较
  9. 函数式编程filter函数,list()表示列表显示值
  10. js 原型prototype继承模式