技术交流QQ群【JAVA,C++,Python,.NET,BigData,AI】:170933152
.
这里,我们调试的时候,串行接口就是swd,这个swd需要两个引脚.
jtag需要5个引脚.
调试允许,程序运行中,暂停并允许获取内部状态,查看完以后,还可以恢复外设的状态,继续执行程序
可以看到对于JTAG调试来说,需要上面的JTDO JTDI JNTRST JTMS JTCK这5个引脚,如果swd的话,
只需要SWCLK SWDS这两个引脚.
然后我们使用的JLINK,他是20个引脚,所以他同时支持JLINK 和SW的调试模式.
上面可以看到.JTMS/SWDIO对应的引脚是PA13,依次,下面的针脚对应的引脚是...
然后对于JTAG调试接口,可以看到需要5个.PA13,PA14,PA15,PB3,PB4
而SW调试结构需要2个引脚.PA13,PA14
SW用的多一些.
这里要注意
因为,这里的开发版,默认是打开SWJ-DP调试功能的,也就是,如果你要是用对应的这个引脚作为
IO口来使用的话,是不行的,因为默认这个是作为调试来用的,也就是被占用了.
要注意,复位的时候,这5个口,都不能作为IO口来使用.
如果这里只连接SWJ,也就是sw调试和JLINK调试,不包含NJTRST这个时候,NJTRST是可以用的.
然后如果禁止了JTAG而打开sw也就是只用了SWDIO SWCLK那么剩下的PA15,PB3,PB4是可以用的.
如果禁止了JTAG也禁止了SW那么5个都可以做位IO口用了.
那么如果这里我想使用PB3,PB4的话,也就是我这里只用SW进行调试,PB3,PB4作为IO口,需要怎么设置呢
可以用上面的库函数.
可以看到有两个参数,这里第一个是设置,也就是前面说到的要用什么模式调试,然后第二个是个enable,disable这样的设置.
先看看第一个模式参数.
去定义可以看到有这么多的模式
下面的先不看,先看看这个,
也就是说第三个,SWJ_Disable也就是SW和jtag都关闭
然后SWJ_JTAGDisable意思是关闭jtag然后打开sw.
然后SWJ_NoJTRST也就是说sw调试和jtag调试都打开,然后
同时关闭NoJTRST.
通过上面的设置,这里如果设置了只使用sw调试,那么另外的几个针脚就可以作为IO口用了
其他的也是一样的道理.
这里可以看到上面就是JLINK调试工具.
有一个JLINK主机,这个上面有个JTAG,20个针脚的,可以用排线连接到开发版上,然后另一端,有个USB,可以连接到电脑上.
可以看到,上面的排线,注意,要使用的话,一定要,先给开发版供电,不管是
用usb供电,还是用电源供电,都需要.先供电,电源灯亮的时候,才能调试.
这个是硬件图,
可以看到这里JTRST等对应的信号线,一般是通过上拉10k的电阻,拉到3.3v
然后JTCK接地,然后RESET连接芯片的复位引脚.其他的引脚,很多都是接地的,
可以看到虽然,这个JLINK调试,虽然有20脚,但是很多都是接地的.
接下来看看代码去调试,
对于战舰版和精英版这里都是打开下面的这个调试章节用代码
对于mini版打开
并且把最后main文件源码中的代码,copy到main.c中覆盖掉就可以了.
调试中需要参考的文档在下面.
然后打开对应的战舰版的程序看看
首先要做个设置
打开debug这个选项卡然后
图中画的都选上,然后打开utilities这个额选项卡
上面那两个勾上.
然后再回到
打开settings然后
可以看到,这里可以选择是sw还是jtag,用
sw的时候,一般使用10mhz,如果jtag,一般设置为5mhz就可以了.
可以看到选择完ort,右边会自动检测到芯片
然后Flash Download这个
.
然后上面的三个√勾选上,然后512k,这个对于精英战舰都是这样的.这个一般会自动识别出来.
这里先说一下先使用软件进行仿真一下.也就是让程序在仿真软件中执行一下,
这个效果,肯定不如直接用硬件跑好的.
软件仿真可以参考下面.
接下来,咱们按照文档一步步做仿真实验.
首先也要设置.
改成左边勾选.然后
.
画出来的四个参数需要都设置好,输入一样的内容就可以,如果是mini版,那么后面parameter,需要输入
-PSTM32F103LC
可以看到文档中也有详细说.
软件仿真,可以点击,右上角的那个D,debug的意思.
点击以后程序就执行了.
常用的调试按钮
文档中有说.
左上角的RST,这个意思是复位的意思,相当于开发版的复位按钮
点击复位可以看到
程序执行到了ResetHandler这个地方.
然后点击向下执行,最终会执行到main中去.
可以点击上图中的位置,直接执行到断点处.
然后是设置断点就是点击一下就行了
这个是跳入执行,执行到方法里面.
这个是按行执行.一行一行的执行.
可以看到第三个按钮是跳出来,也就是跳出来这个函数.
也就是会执行到
delay_ms这个函数外面了.
最后一个是执行到光标处,也就是执行到光标所在的地方.
上面这个是打开关闭汇编窗口
上面这个是观察窗口,call stack local
比如这里我要查看一个变量的内容可以这样,选中这个变量,然后右键,选中watch1,可以看到.
可以看到watch1就可以查看变量内容了.
.
这里有个内存窗口,
这个内存窗口是,可以输入一个地址,可以看到这个地址的变化情况.
这个比较重要,这个是串口窗口.选中一个打开
可以看到首先初始化串口uart_init(115200),然后因为程序不停的打印printf(),
可以看到uart#1窗口,出现了一堆的内容.
这个print(),默认是打印到串口1上面的.注意.
然后再来看看,如果是硬件仿真:
需要勾选上面的画的.
然后也是点击debug,下面的红的部分.
点击了debug可以看到板子没有任何现象的是
虽然这里执行了printf,也就是发送了数据到串口,但是开发版是看不出来的.
.
这个时候可以这样,
可以看到,上面图中,如果我们把串口连接到电脑上的话,那么,
这个窗口,最终连接到usb上,然后我们通过usb连接到电脑上,
安装了串口驱动后,我们可以通过串口调试工具来查看,串口中输出的数据.
可以找到串口调试助手.
这里点击打开串口,选上对应的串口以后.
可以看到刚开始没东西.
但是这里如果咱们让他执行print,就可以看到串口调试工具中出现了数据了,
实际上这个就是,咱们发给硬件串口的数据.,
这个时候也可以,选中某个变量,右键watch查看变量的值.
下面咱们打开跑马灯实验,
打开以后,这里设置
然后点击cebug
然后,这里主要说一下这个逻辑分析窗口.
可以看到下面这个部分就是逻辑分析窗口.
然后点击这个setup,这里是可以设置信号量的.
对于跑马灯实验的话,比如下面的代码
咱们就可以通过逻辑分析窗口,来查看这个LED0和LED1的这个高电平,或者低电平的状态
.这里要说明一下,这个逻辑分析只是对软件仿真有效,对硬件仿真是没有效果的.
比如这里如果,我们要查看PB5和PE5这两个引脚的高低电平,就可以在上面添加上这个两个引脚.
然后为了后面出波形的时候好看
这里还可以,设置不同针脚的颜色.
设置一个是红色,一个是蓝色.
点击ok以后可以看到
注意先看代码,可以看到这个300毫秒,就会进行一次翻转.也就是高低电平的切换.
注意这里,可以点击上图中的in ,out来设置,这个输出的时间间隔,就是这个波形多长时间输出一次,这里
可以点击IN,或者Out就能设置对应的.时间间隔.
好执行代码,这里,打上断点,然后执行,第二次执行的时候可以看到上面的变化了就可以.
可以看到这个PB5,和PE5的波形就出来了,可以看到PE5是高电平的时候,PB5就是低电平,相反也是.
可以看到,他们是相反的,代码写的也是相反的,显示跟代码一致.
然后
如果把光标放到对应的电平上,还可以看到有提示
copy出来看一下,可以看到这里,执行一次大约话了0.303991s,也就是大约300毫秒.
这个和代码是一致的.
实际上还有个窗口可以用.
这里选中比如GPIOB
咱们知道这里,可以看到代码,这个LED0实际上是设置的 GPIOB这个IO口
而且是操作的GPIOB这个io口的第5个引脚,可以看到右边的窗口中.
可以看到,下面有GPIOB这个tab页,可以看到上面有个ODR寄存器,这个时候,第五位,是打钩的.
注意这里打钩了是因为这里已经执行了一次循环,并且断点停在了LED0=0这个位置,而这句代码还没有执行,
也就是,上一次循环LED0=1这句代码已经执行了,我们知道这个LED0=1实际上是设置的GPIOB的第5个引脚是1高电平,
也就是设置的GPIOB这个IO口的,ODR寄存器位5是1..
------------------------------------------------------
https://blog.csdn.net/lidew521/article/details/107999659
这里如果忘记了可以去看对应的博文.
端口输出数据寄存器的作用是,IO口输出低电平,里面就存0,IO口输出高电平,里面就存1
这里,也是对应的,他只用到了低16位。
对应一组io的,16个IO口
给某个IO口输出高电平实际上就是在这个IO口的ODR寄存器中设置为1,因为ODR寄存器有16位,对应的
一组IO的16个IO口,所以这里PB5就是给GPIOB这个IO口组的第5个Io口,的odr寄存器的位5设置为1.也就是让
这个ODR寄存器输出高电平.
------------------------------------------------------
然后我们通过调试执行一行代码,可以看到这个勾就去掉了.
同样对于LED1也是这样的.
然后比如对于串口的USART1
对应的寄存器的值都可以打开查看的.