完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980

第5章   STM32H7下载和调试方法(MDK5)

本章教程为大家介绍如何通过MDK5下载程序到芯片里面以及MDK5的调试和配置方法。

5.1 初学者重要提示

5.2 使用MDK调试和下载程序设置(JLINK)

5.3 使用MDK调试和下载程序设置(STLINK)

5.4 MDK调试容易崩溃的解决办法

5.5 MDK程序调试

5.6 总结

 

5.1   初学者重要提示

  1. 如果使用JLINK调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持。
  2. 如果使用STLINK调试下载STM32H7,推荐使用最新的电脑端驱动和对应的固件,详情见第2章的2.6小节。
  3. MDK曾发布的STM32F1,F407,F429和F7的所有调试方法的设置细节及其注意事项,同样适用于STM32H7:http://forum.armfly.com/forum.php?mod=viewthread&tid=14896
  4. MDK5调试过程中容易崩溃的问题,请看本章5.4小节,比较重要。
  5. JLINK无法下载解决思路以及常见问题整理,适用于其它LINK:http://forum.armfly.com/forum.php?mod=viewthread&tid=21708

5.2   使用MDK调试和下载程序设置(JLINK)

调试下载STM32H7,务必使用JLINK V9或V10,之前的版本已经不支持,JLINK的驱动安装等相关文件已经在本教程第2章的2.5章节有说明。

在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。

5.2.1      开发板和JLINK的接线图

开发板接上JLINK的效果图如下,JLINK端需要插入开发板赠送的JTAG转SWD转接板:

注意转接板不要插反了:

5.2.2      设置Options里面的Debug选项

Debug选项主要用于调试设置。

打开Settings设置选项,设置完毕后别忘了点击确定。

5.2.3      设置Options里面的Utilities选项

Utilities选项主要用于程序下载设置。

5.2.4      程序下载

前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电,就可以下载了。点击这里就可以下载了:

下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:

5.3   使用MDK调试和下载程序设置(STLINK)

调试下载STM32H7,请将STLINK固件升级到最新版,关于固件升级和驱动安装等相关文件已经在本教程第2章的2.6章节有说明。

在上个章节里面,我们已经将Options对话框里面大部分设置选项都做了说明,本章节主要是调试下载的设置。

5.3.1      开发板和STLINK的接线图

开发板接上STLINK的效果图如下:

如果是下面这种STLINK,需要接上转接板:

5.3.2      设置Options里面的Debug选项

Debug选项主要用于调试设置:

打开Settings设置选项,设置完毕后别忘了点击确定。

5.3.3      设置Options里面的Utilities选项

Utilities选项主要用于程序下载设置。

5.3.4      程序下载

前两步设置好之后,JLINK插到电脑端并跟开发板连接好,将板子上电就可以下载了。点击这里即可:

下载成功后可以看到开发板上的LED开始闪烁,MDK的也有信息展示:

5.4   MDK调试容易崩溃的解决办法

进入到MDK5.2X后,MDK调试的时候很容易崩溃,出现下面这个错误

出现这个错误的话,要注意下面两个问题:

  1. 如果出现这种情况的话,将工程放在桌面路径下,工程名不要有中文会好很多。路径深或者有中文,都会造成这种情况。
  2. 退出调试的时候,如果使用断点了,务必清除所有断点,再退出,否则也会造成这种情况。

针对这个问题,KEIL官方也有说明:http://www.keil.com/support/docs/4036.htm

5.5   MDK程序调试

JLINK或者STLINK设置完毕后,调试是一样的。

5.5.1      全速运行和单步调试

点击如下按钮可以进入调试状态:

进入调试状态后的效果如下:

首先要认识下这7个图标的含义:

  • 第1个图标是复位调试。
  • 第2个图标是全速运行。
  • 第3个图标是进入全速运行状态后,通过这个图标可以停止全速运行。
  • 第4个图标是Step(Step one line),单步调试,每次点击运行一行代码,所以只要有子函数就会进入。
  • 第5个图标是Step Over(Step over the current line),每次点击以函数为单位运行,不会进入函数内部。
  • 第6个图标是Step out(Step out of the current line),点击后退出当前运行的函数,执行下一个函数。
  • 第7个图标是Run to Cursor Line(Run to the current cursor line),直接运行到用户设置的行,设置方法比较简单,用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头

然后点击此图标即可,可以看到前面多了一个黄色的小箭头,说明已经运行到此行

前面几个图标的功能,大家多测试几次就熟练了。

5.5.2      外设寄存器的查看

要查看的外设寄存器内容在这个菜单里面:

如果要查看内核外设寄存器,在这里:

5.5.3      全局变量的查看

针对全局变量,MDK专门提供了Watch1和Watch2两个窗口,每个窗口可以添加很多变量。调试过程中,这些窗口里面添加的变量是会更新的。

也可以从菜单View ->Watch Windows进行添加。比如下面添加一个简单的全局计数变量。

5.5.4      局部变量的查看

针对局部变量,MDK专门提供了一个栈窗口,用于查看函数中各种局部变量,这个不需要用户添加,MDK会自动添加。

也可以从菜单View ->Call Stack Window进行添加。局部变量需要进入到那个函数里面才可以查看,这点要特别注意,因为局部变量是来自栈空间的,进入函数申请占空间,退出函数后,栈空间就会被释放掉。比如main函数里面一个num局部变量:

5.5.5      Flash区或者RAM区的查看

如果要查看Flash区或者RAM区的内容,MDK提供了4个Memory窗口。

也可以从菜单View ->Memory Windows进行添加。比如要查看0x0800 0000地址开始的内容,直接输入即可,这个地址是STM32H7的Flash首地址:

5.5.6      断点调试

断点调试比较重要,进入调整状态后,如果大家想让程序在指定的位置停止运行,可以添加断点,通过这个小红点来添加。

比如想在84行添加断点。

用户仅需在那行使用鼠标左键点击一下,可以看到前面有个箭头:

然后点击那个小红点,可以看到已经添加上:

然后点击全速运行,如果程序有执行到这个地方,就会停在这里。可以看到黄色小箭头也显示在左侧了,说明程序执行这个地方了:

正常情况下,断点可以加到任何程序代码可以执行到的地方。另外注意,退出调试前,点击这个按钮取消所有断点,防止MDK调试期间崩溃:

5.5.7      寄存器,全局变量和局部变量的动态更新

MDK有个周期性更新选项,如果大家要周期性的观察一些寄存器、全局变量的更新、需要把菜单View -> Periodic Window Update选上。

这个周期不能设置,大概0.5s左右更新一次。

5.6   总结

对于初学者来说,务必要实际动手操作一遍。特别是调试方法,要熟练掌握,因为以后工程代码调试时,用到的最多。

【STM32H7教程】第5章 STM32H7下载和调试方法(MDK5)的更多相关文章

  1. 【STM32H7教程】第7章 STM32H7下载和调试方法(IAR8)

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第7章   STM32H7下载和调试方法(IAR8) 本 ...

  2. 微信小程序开发系列教程三:微信小程序的调试方法

    微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 这个教程的前两篇文章,介绍了如何用下图所示的微信开发者工具自动生成一个Hel ...

  3. 【STM32H7教程】第13章 STM32H7启动过程详解

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第13章       STM32H7启动过程详解 本章教 ...

  4. 【STM32H7教程】第12章 STM32H7的HAL库框架设计学习

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第12章       STM32H7的HAL库框架设计学 ...

  5. 【STM32H7教程】第11章 STM32H7移植SEGGER的硬件异常分析

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第11章       STM32H7移植SEGGER的硬 ...

  6. 【STM32H7教程】第10章 STM32H7的FLASH,RAM和栈使用情况(map和htm文件)

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第10章       STM32H7的FLASH,RAM ...

  7. 【STM32H7教程】第8章 STM32H7的终极调试组件Event Recorder

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第8章   STM32H7的终极调试组件Event Re ...

  8. 【STM32H7教程】第9章 STM32H7重要知识点数据类型,变量和堆栈

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第9章   STM32H7重要知识点数据类型,变量和堆栈 ...

  9. 【STM32H7教程】第6章 STM32H7工程模板建立(IAR8)

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第6章   STM32H7工程模板建立(IAR8) 本章 ...

随机推荐

  1. 记住这个网站:服务器相关数据统计网站 http://news.netcraft.com/

    http://news.netcraft.com/ 需要参考现在服务器相关数据,可以上这个网站. 当然google趋势也是一个可选得备案. 有一个数据统计更全面的: http://w3techs.co ...

  2. Ocelot中文文档-服务发现

    Ocelot允许您指定服务发现提供程序,并使用它来查找Ocelot正在将请求转发给下游服务的主机和端口.目前,这仅在GlobalConfiguration部分中受支持,这意味着所有ReRoute将使用 ...

  3. Hbase出现ERROR: Can't get master address from ZooKeeper; znode data == null正确找到解决思路

    第一次配置时出现这样的错误,也很懵的,到处上网找博客看资料,都试了个遍,但是问题还是存在,以下这些博客写的或许是解决一类问题的方式. https://blog.csdn.net/whbo111/art ...

  4. 在Ubuntu系统安装Sencha CMD

    Now type from the terminal prompt followed by Enter:   1 root@prompt:cd /java   1 root@prompt:tar zx ...

  5. 2018 CISCN reverse wp

    2018 CISCN reverse wp 这题比赛的时候没做出来,主要是心态崩了看不下去..赛后看了下网上的wp发现不难,是自己想复杂了.这里将我的思路和exp放出来,希望大家一起交流学习. mai ...

  6. Python 处理时间的模块

    1.由日期格式转化为字符串格式的函数为: datetime.datetime.strftime().date() 2.由字符串格式转化为日期格式的函数为: datetime.datetime.strp ...

  7. Python 内置的一些高效率函数用法

    1.  filter(function,sequence) 将sequence中的每个元素,依次传进function函数(可以自定义,返回的结果是True或者False)筛选,返回符合条件的元素,重组 ...

  8. 节流throttle和防抖debounce

    underscore.js提供了很多很有用的函数,今天想说说其中的两个.这两个函数都用于限制函数的执行. debounce 在解释这个函数前,我们先从一个例子看下这个函数的使用场景.假设我们网站有个搜 ...

  9. java里的堆内存于栈内存的区别

    这个区别对于我们来说并不大,这是内存分配的两种方法.一般代码逻辑,简单变量,结构体都是放入栈中,而对象,以及被装箱的数据是放入堆中的.简单来说,栈就是一个很长的栈(数据结构中的栈,如果不理解可以当做是 ...

  10. SSM-Spring-14:Spring中默认自动代理DefaultAdvisorAutoProxyCreator

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 默认自动代理DefaultAdvisorAutoProxyCreator 本处没有什么要讲的,放原代码 ISo ...