STM32(Cortex-M)内核DEBUG调试接口知识
内容提要
在STM32F1系列和Cortex-M3内核中,调试接口是必不可少的。支持两种调试接口:串行接口和JTAG调试接口。为了释放普通I/O口,可以使用串行接口并设置SWJ_CFG=010。
延伸解读
调试接口选择与引脚复用
STM32F1的SWJ-DP接口包含JTAG-DP(5引脚)和SW-DP(2引脚),且引脚存在复用。SW-DP仅需SWCLK和SWDIO两个引脚,可释放PA15、PB3、PB4等作为普通I/O。但需注意,异步跟踪输出(TRACESWO)与TDO复用,因此该功能只能在SW-DP下实现,JTAG-DP无法使用。
从JTAG切换到SW-DP的机制
JTAG是默认调试接口。若调试器需切换到SW-DP,必须在TMS/TCK上输出特定JTAG序列:先输出超过50个TCK周期的TMS=1,再输出16位序列0111100111100111(MSB),最后再输出超过50个TCK周期的TMS=1。该序列禁止JTAG-DP并激活SW-DP,之后仅用SWCLK和SWDIO即可通信。
JTAG引脚内部上拉/下拉的作用
JTAG输入引脚直接连接D触发器,悬空可能导致误触发。STM32在JTAG输入脚内嵌上拉/下拉:JNTRST、JTDI、JTMS/SWDIO内部上拉,TCK/SWCLK内部下拉。当引脚被释放为普通I/O后,GPIO控制器重新接管,状态恢复为复位值,用户可安全用作普通I/O。
释放调试引脚为普通I/O的配置步骤
要释放PA15、PB3、PB4作为普通I/O,用户软件必须在复位后设置SWJ_CFG=010,以启用串行调试接口。调试时,调试器在系统复位状态下发送指定JTAG序列切换到SW-DP,并在复位地址设置断点,释放复位后内核停止,之后所有调试通信使用SW-DP,其他JTAG引脚可由用户代码改配为普通I/O。
Q&A
STM32F1系列支持哪些调试接口?
STM32F1系列支持串行接口和JTAG调试接口。
Cortex-M3内核的硬件调试模块有什么功能?
Cortex-M3内核的硬件调试模块支持断点设置、数据观察点配置和复杂的调试操作。
如何切换STM32的调试接口?
切换调试接口需要在TMS/TCK上输出特定的JTAG序列以激活SW-DP接口。
使用串行调试接口有什么好处?
使用串行调试接口可以释放普通I/O口,便于其他功能的使用。
JTAG输入引脚的内部上拉和下拉有什么作用?
JTAG输入引脚的内部上拉和下拉可以避免悬空状态,确保调试模式的稳定性。
如何配置SWJ_CFG以释放普通I/O口?
用户软件必须在复位后设置SWJ_CFG=010,以释放PA15、PB3和PB4作为普通I/O口。