IAR教程之IAR下载和调试

IAR下载

下载器与单片机之间的接线有两种JTAG和SWD,SWD只需要四根线(GND、TCK、TMS、RST(可选)),一般使用SWD接线即可。

  1. 硬件连接
  • 使用龙邱下载器的

龙邱核心板的下载接口丝印层都有一个白色凸口,对应龙邱下载器排线的凸口。

IAR教程之IAR下载和调试_第1张图片
IAR教程之IAR下载和调试_第2张图片
IAR教程之IAR下载和调试_第3张图片
  • 使用其他下载器的

如果没有使用龙邱下载器,打开核心板原理图,找到下载口部分,接线对应即可:

IAR教程之IAR下载和调试_第4张图片
  单片机SWDIO(TMS)  -----  下载器SWDIO(TMS)
  单片机SWDIO(TMS)  -----  下载器SWCLK(TCK)
  单片机RST         -----  下载器RST

下载器哪个管脚是SWDIO、哪个是SWCLK,打开盒子看丝印或者问卖家。一般常用的20Pin接口图

IAR教程之IAR下载和调试_第5张图片



  1. 软件配置

IAR并不知道你使用什么下载器,因此需要你告诉IAR你使用的什么下载器。

  • 使用JLink-V9下载

IAR教程之IAR下载和调试_第6张图片
IAR教程之IAR下载和调试_第7张图片
IAR教程之IAR下载和调试_第8张图片
IAR教程之IAR下载和调试_第9张图片
  • 使用DAPLink下载

IAR教程之IAR下载和调试_第10张图片
IAR教程之IAR下载和调试_第11张图片
IAR教程之IAR下载和调试_第12张图片
IAR教程之IAR下载和调试_第13张图片



IAR调试

下载器和核心板接好线并且在IAR中选择好下载器,就可以下载调试了,调试时最好把优化等级调低(参考IAR常用功能简介)。

调试常用按键说明

IAR教程之IAR下载和调试_第14张图片
IAR教程之IAR下载和调试_第15张图片
  • 第 1 个图标是重新编译例程并进入调试状态。

  • 第 2 个图标是重新进入调试状态。

  • 第 3 个图标是退出调试。

  • 第 4 个图标是每次点击以函数为单位运行,不会进入函数内部。

  • 第 5 个图标是单步调试,每次点击运行一行代码,所以只要有子函数就会进入。

  • 第 6 个图标是退出当前执行函数,点击后退出当前运行的函数,执行下一个函数。

  • 第 7 个图标是进入下一个状态,跟第 4 个图标
    功能差不多。

  • 第 8 个图标是直接运行到光标处,用户用鼠标左键点击一下,可以看到前面有光标即可。

  • 第 9 个图标是全速运行(经常和断点配合使用)。

  • 第 10 个图标是用于暂停全速运行。

  • 第 11 个图标是复位调试,重新回到 main 函数开始执行。

断点

在Debug过程中,通常只需要重点关注某一部分代码,让程序运行到指定位置后,再单步调试,进行分析。

经过上面debug按键介绍,可以使用第8个图标让程序运行到指定位置,当然也可以使用断点+全速运行的方法让程序运行到指定位置。

IAR教程之IAR下载和调试_第16张图片

寄存器查看说明

进行底层开发时,需要查看寄存器的值

打开寄存器窗口

IAR教程之IAR下载和调试_第17张图片

右键选择对应寄存器窗口

IAR教程之IAR下载和调试_第18张图片

全局变量查看

全局变量占用的内存空间是固定的,程序访问该全局变量时直接访问该地址空间即可,因此全局变量可以在live watch中实时显示。但是局部变量是存储在栈空间中的,当退出局部变量作用域时,该局部变量占用的内存空间就会被系统回收,相当于这个变量就没了,因此watch窗口中查看局部变量时,确保程序在局部变量的作用域内,否则会显示ERROR。

  • watch窗口

watch窗口可以查看全局变量和局部变量(查看局部变量时,确保程序在局部变量的作用域内,否则会显示ERROR)。不过watch窗口在全速运行时,里面的变量不能刷新。

IAR教程之IAR下载和调试_第19张图片
  • live watch窗口

live watch窗口可以查看全局变量。不过live watch窗口不可以查看局部变量,在全速运行时,live watch里面的变量会实时刷新。

IAR教程之IAR下载和调试_第20张图片
  • 局部变量窗口

可以显示当前栈空间下的局部变量

IAR教程之IAR下载和调试_第21张图片

其他窗口

IAR教程之IAR下载和调试_第22张图片

调试基本思想

好多同学拿到调试器后,就只是当作下载器用。不知道怎么去仿真,遇到问题之后,就直接跑过来,啥情况啊?咋回事啊?我…

遇到问题后,首先分析问题,举个例子:

我的程序里设置是小车在拐弯时减速,但是实际发现并没有减速?

思考为啥没有减少?

可能没检测到拐弯!

进行Debug,设置一个入弯标志位,拐弯时检查入弯标志位,看是否检测到入弯。

这里假设检测到了入弯,那么再次思考,为啥没有减速?速度是哪里来的?

这里假设速度和PWM控制信号占空比正相关,没有减速,那就是证明,PWM信号占空比没有降低。思考为啥PWM信号占空比没有降低? PWM信号哪里来的?

这里假设PWM占空比是由PID控制的,进行Debug,查看PID控制器的输入信号和各个分量的输出。

总结:整个Debug的思路就是找到异常,分析异常,追踪异常,找到异常根源,解决问题。
,那么再次思考,为啥没有减速?速度是哪里来的?

这里假设速度和PWM控制信号占空比正相关,没有减速,那就是证明,PWM信号占空比没有降低。思考为啥PWM信号占空比没有降低? PWM信号哪里来的?

这里假设PWM占空比是由PID控制的,进行Debug,查看PID控制器的输入信号和各个分量的输出。

总结:整个Debug的思路就是找到异常,分析异常,追踪异常,找到异常根源,解决问题。

你可能感兴趣的:(IAR教程之IAR下载和调试)