电子说
本文介绍了如何使用GPIO固件库来释放SWJ-DP引脚(串行JTAG调试端口),并且重用为标准IO。SWJ-DP IO能够用作标准IOs,它的性能可以达到标准IO的80%。
当系统复位后,会默认把以上引脚复用为调试功能:PA15引脚复位后的主要功能为 JTDI、PB3为JTDO、PB4为JNTRST;如果把这些引脚作为普通引脚使用时,则需要进行重映射。通过设置复用重映射和调试I/O配置寄存器 (AFIO_MAPR) 的SWJ_CFG[2:0]位,可以改变上述重映像配置。
1、硬件描述
把LED灯与SWJ-DP引脚相连。
2、固件描述
提供的GPIO驱动通过一系列的函数支持所有的GPIO 特性。
首先,SWJ-DP被禁用,SWJ-DP引脚配置为输出推挽式。5个LED连接到PA13(JTMS/SWDIO),PA14(JTCK/SWDCLK),PA15(JTDI),PB03(JTDO),PB04(JTRST),这些LED在无限循环中被翻转。
注意:一旦SWJ-DP被禁用,和主机的调试器的连接将断开。只要JTAG IO仍然禁用,就不能重新建立调试连接。为了避免这种情况,PB09被连接到一个按钮,该按钮用来禁用或者不禁用JTAG IOs。
●在复位时按钮按下,JTAG IO禁用。
●在复位时按钮没有按下,JTAG不改变。
3、注意事项
重映射的方式一共有三种。分别描述如下:
1.GPIO_Remap_SWJ_JTAGDisable:/*< JTAG-DP Disabled and SW-DP Enabled */ 即能用PB3,PB4,PA15做普通IO,PA13&14用于SWD调试。
2.GPIO_Remap_SWJ_Disable: /*< Full SWJ Disabled (JTAG-DP + SW-DP) */ 5个引脚全为普通引脚,但不能再用JTAG&SWD仿真器调试,只能用ST-Link调试。
3.GPIO_Remap_SWJ_NoJTRST:/*< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */PB4可为普通IO口,JTAG&SWD正常使用,但JTAG没有复位。
如果你用到所有的五个引脚当做普通IO口,那么上述步骤二中的重映射配置应写为:
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
如果你用PB3,PB4,PA15做普通IO,PA13&14用于SWD调试,则重映射配置应写为:
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
举例:PA15管脚默认为JTAG接口的JTDI,做普通IO口使用时需Remap,否则将出现一直输出高电平的情况。
void BUZ_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//关键,禁用JTAG 只使用SWD GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //复用时钟使能,开启AFIO时钟 GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);//引脚影射,禁止JTRST功能 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStruct); }
PB3这个调试引脚,比较特殊一点,需要设置 DBGMCU_CR寄存器,这个寄存器位说明如下:
要做的就是配置TRACE_IOEN=0,不分配跟踪引脚。异步跟踪功能只能在SW-DP调试接口上实现,当我们在软件上选择使用SW-DP调试时,便会把一开始默认的JTAG-DP切换到SW-DP,而对应的,也会开启异步跟踪功能,使得我们可以在IDE上可以进入DEBUG模式调试。
释放PA15、PB3、PB4总的代码就是:
// 不分配跟踪引脚,释放 PB3 DBGMCU->CR = DBGMCU->CR & ~((uint32_t)1<<5); //使能复用时钟和引脚 GPIO时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); //切换 SWJ调试,释放 PA15,PB4, PB3 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
值得注意的是,当释放禁用了PB3的异步跟踪后,就无法正常进行DEBUG调试了。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !