IAR下载
下载器与单片机之间的接线有两种JTAG和SWD,SWD只需要四根线(GND、TCK、TMS、RST(可选)),一般使用SWD接线即可。
- 硬件连接
- 使用龙邱下载器的
龙邱核心板的下载接口丝印层都有一个白色凸口,对应龙邱下载器排线的凸口。
- 使用其他下载器的
如果没有使用龙邱下载器,打开核心板原理图,找到下载口部分,接线对应即可:
单片机SWDIO(TMS) ----- 下载器SWDIO(TMS)
单片机SWDIO(TMS) ----- 下载器SWCLK(TCK)
单片机RST ----- 下载器RST
下载器哪个管脚是SWDIO、哪个是SWCLK,打开盒子看丝印或者问卖家。一般常用的20Pin接口图
- 软件配置
IAR并不知道你使用什么下载器,因此需要你告诉IAR你使用的什么下载器。
- 使用JLink-V9下载
- 使用DAPLink下载
IAR调试
下载器和核心板接好线并且在IAR中选择好下载器,就可以下载调试了,调试时最好把优化等级调低(参考IAR常用功能简介)。
调试常用按键说明
-
第 1 个图标是重新编译例程并进入调试状态。
-
第 2 个图标是重新进入调试状态。
-
第 3 个图标是退出调试。
-
第 4 个图标是每次点击以函数为单位运行,不会进入函数内部。
-
第 5 个图标是单步调试,每次点击运行一行代码,所以只要有子函数就会进入。
-
第 6 个图标是退出当前执行函数,点击后退出当前运行的函数,执行下一个函数。
-
第 7 个图标是进入下一个状态,跟第 4 个图标
功能差不多。 -
第 8 个图标是直接运行到光标处,用户用鼠标左键点击一下,可以看到前面有光标即可。
-
第 9 个图标是全速运行(经常和断点配合使用)。
-
第 10 个图标是用于暂停全速运行。
-
第 11 个图标是复位调试,重新回到 main 函数开始执行。
断点
在Debug过程中,通常只需要重点关注某一部分代码,让程序运行到指定位置后,再单步调试,进行分析。
经过上面debug按键介绍,可以使用第8个图标让程序运行到指定位置,当然也可以使用断点+全速运行的方法让程序运行到指定位置。
寄存器查看说明
进行底层开发时,需要查看寄存器的值
打开寄存器窗口
右键选择对应寄存器窗口
全局变量查看
全局变量占用的内存空间是固定的,程序访问该全局变量时直接访问该地址空间即可,因此全局变量可以在live watch中实时显示。但是局部变量是存储在栈空间中的,当退出局部变量作用域时,该局部变量占用的内存空间就会被系统回收,相当于这个变量就没了,因此watch窗口中查看局部变量时,确保程序在局部变量的作用域内,否则会显示ERROR。
- watch窗口
watch窗口可以查看全局变量和局部变量(查看局部变量时,确保程序在局部变量的作用域内,否则会显示ERROR)。不过watch窗口在全速运行时,里面的变量不能刷新。
- live watch窗口
live watch窗口可以查看全局变量。不过live watch窗口不可以查看局部变量,在全速运行时,live watch里面的变量会实时刷新。
- 局部变量窗口
可以显示当前栈空间下的局部变量
其他窗口
调试基本思想
好多同学拿到调试器后,就只是当作下载器用。不知道怎么去仿真,遇到问题之后,就直接跑过来,啥情况啊?咋回事啊?我…
遇到问题后,首先分析问题,举个例子:
我的程序里设置是小车在拐弯时减速,但是实际发现并没有减速?
思考为啥没有减少?
可能没检测到拐弯!
进行Debug,设置一个入弯标志位,拐弯时检查入弯标志位,看是否检测到入弯。
这里假设检测到了入弯,那么再次思考,为啥没有减速?速度是哪里来的?
这里假设速度和PWM控制信号占空比正相关,没有减速,那就是证明,PWM信号占空比没有降低。思考为啥PWM信号占空比没有降低? PWM信号哪里来的?
这里假设PWM占空比是由PID控制的,进行Debug,查看PID控制器的输入信号和各个分量的输出。
…
总结:整个Debug的思路就是找到异常,分析异常,追踪异常,找到异常根源,解决问题。
,那么再次思考,为啥没有减速?速度是哪里来的?
这里假设速度和PWM控制信号占空比正相关,没有减速,那就是证明,PWM信号占空比没有降低。思考为啥PWM信号占空比没有降低? PWM信号哪里来的?
这里假设PWM占空比是由PID控制的,进行Debug,查看PID控制器的输入信号和各个分量的输出。
…
总结:整个Debug的思路就是找到异常,分析异常,追踪异常,找到异常根源,解决问题。