对32位单片机调试的总结

对于32位的ARM单片机,其程序烧录的方式除了采用原始的串口下载之外,还拥有即可烧录程序,也可在线调试的外部接口,即JTAG与SWD接口。单片机芯片指定了一些IO口在默认的配置下实现上述的功能,例如:PA13、A14、A15、PB3、PB4等。那么如何设置其中某几个IO口做普通使用呢,这篇文章将会给出答案。

烧录方式

目前我经常用的烧录方式有三种,最开始使用JTAG方式去下载调试32单片机,到后来发现更加简单方便的SWD方式,再到后面的ST-LINK,其实也是SWD方式。

JTAG方式

JTAG:JTAG(JointTest Action Group;联合测试工作组)是一种国际标准测试协议,主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。
市场上的J-Link下载器支持JTAG方式,其仿真器与单片机的连接电气图如下:
image.png
除标准的4个IO接口外,还有nTRST、RTCK、RESET,分别表示的含义如下:
nTRST:可选项,内核的调试复位信号,以用来对TAPController进行复位(初始化)
RTCK:可选项,目标端反馈给仿真器的时钟信号,用来同步TCK信号的产生,不使用时直接接地
RESET:可选项,与目标板上的系统复位信号相连,可以直接对目标系统复位。同时可以检测目标系统的复位情况,为了防止误触发应在目标端加上适当的上拉电阻。
JTAG在使用过程中,标准的4根线是必须要连接的,其他三根根据实际情况连接。

SWD方式

SWD:SW(Serial Wire Mode Interface),串行接口线模式。在串行线模式,只有针TCLK和TMS使用。TDO数据输出引脚是一个可选。也就是说SWD只需要3根线就可以实现烧录与调试,分别是时钟线、数据线和地线。相比于JTAG的7根调试线,SWD连接和使用更加方便,其稳定性和可靠性也有进一步提升,通过配置SWD方式,还可最大化的利用单片机的IO口,使A15、PB3、PB4做普通IO口使用。市面上的J-Link下载器也支持SWD方式,其仿真器与单片机的连接电气图如下:
image.png
SWDIO:串行数据线,用于数据的读出和写入,与TMS复用
SWDCLK:串行时钟线,提供所需要的时钟信号与TCLK复用

特殊IO口定义

在常用的32位ARM单片机中,PA13、A14、A15、PB3、PB4这几个IO默认配置成调试专用,其具体的定义在手册中如下:
image.png
image.png
也就是说,如果在单片机初始化中不对这几个IO口进行配置,这些IO将无法作为普通IO口使用,有时候为了方便布线和管理,需要对这其中的某几个IO口进行设置的。

程序配置

需要进行配置的情况大致是,已经通过Keil软件设置成SWD方式进行烧录,这时需要在程序中添加以下代码:

rcu_periph_clock_enable(RCU_AF);  //开启复用时钟
gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE);  //选择SWD调试方式
//gpio_pin_remap_config(GPIO_SWJ_NONJTRST_REMAP, ENABLE);  //SWD或者4线JTAG

以上是GD32单片机提供的库函数设置,通过上面的两句话,就可以将A15、PB3、PB4做普通IO使用,PA13、A14做SWD的下载调试IO口使用。使用STM32CubeMX配置STM32芯片的过程如下,首先在STM32CubeMX中的配置如下:选择Pinout -> System Core -> SYS -> Serial Wire即可。
image.png
生成代码工程之后,在代码中的体现如下:

__HAL_RCC_AFIO_CLK_ENABLE(); //打开复用时钟
 __HAL_AFIO_REMAP_SWJ_NOJTAG(); //只选择SWD方式
 //__HAL_AFIO_REMAP_SWJ_NONJTRST() SWD或者4线JTAG

需要注意的是在使用STM32CubeMX生成底层代码时,如果在之初没有选择Serial Wire,则默认处于NO Debug的状态,第一次可以烧录进程序,当第二次烧录时,就出现烧录不成功,显示没有找到芯片。处理的方式为:首先使用STM32CubeMX从新选择正确配置生成工程,点击烧录,在烧录的同时,将单片机的REST引脚拉低,当出现进度条时,取消REST引脚的拉低配置。出现这种情况的原因在于第一次烧录进去的程序没有配置SWD接口。

总结

本篇首先学习了以前经常使用的JTAG和SWD的烧录方式,讲述了如何将A15、PB3、PB4做普通IO使用,主要包含两类单片机GD32和STM32的程序配置。最后对于一些可能出现的情况讲述了其对应的解决方案。鉴于笔者知识面有限,如上述内容存在问题,请联系笔者更正,谢谢!
现存的问题:在单片机中如果使用TIM3的编码器模式,就会将SWD接口设置成普通IO口,不知道有没有好的解决方案?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值