欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

stm32F1的JTAG、SWJ作为普通引脚使用。禁用JTAG、SWJ。

程序员文章站 2022-07-04 21:47:28
...

stm32F1的JTAG、SWJ引脚,为 PA13/PA14/PA15/PB3/PB4。

单片机复位后,默认功能为 JTAG、SWJ。

而实际使用中,一般只使用 SWCLK、SWDIO这两个引脚做 Debug。其余的引脚可以空出来,重新定义为普通的 IO 来使用。

PA13/PA14/PA15/PB3/PB4 想要定义为 普通IO,需要进行一些额外的重定义配置。

 

1. 手册对JTAG、SWJ管脚的定义

stm32F1的JTAG、SWJ作为普通引脚使用。禁用JTAG、SWJ。

stm32F1的JTAG、SWJ作为普通引脚使用。禁用JTAG、SWJ。

 

2. 引脚重映射分为以下几种情况

#define GPIO_Remap_SWJ_NoJTRST      ((uint32_t)0x00300100)  /*!< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */
#define GPIO_Remap_SWJ_JTAGDisable  ((uint32_t)0x00300200)  /*!< JTAG-DP Disabled and SW-DP Enabled */
#define GPIO_Remap_SWJ_Disable      ((uint32_t)0x00300400)  /*!< Full SWJ Disabled (JTAG-DP + SW-DP) */

(1)全功能 SWJ,JTAG没有JTRST。(PB4 可重映射为其他功能)

(2)禁用JTAG,启用SWJ。(PB3/PB4/PA15 可重映射为其他功能)

(3)完全禁用 SWJ和 JTAG。(PB3/PB4/PA13/PA14/PA15 均可重映射为其他功能)

SWJ、JTAG这些特殊引脚,只能使用以上3种重映射方法,不可对单独引脚重映射。

 

3. 配置代码

以最常用的配置方法为例:启用 SWJ,禁用 JTAG。(PB3/PB4/PA15 可重映射为其他功能)

	GPIO_InitTypeDef  GPIO_InitStructure;
	/* 禁用 JTAG,PB3、PB4重定义为普通IO */
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |  RCC_APB2Periph_AFIO, ENABLE);//使能PORTB口时钟、复用引脚PB3、PB4引脚
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭JTAG功能(PB3/4),只使用SWD(PA13/14)调试
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_3;	//端口配置
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//IO口速度为50MHz
	GPIO_Init(GPIOB, &GPIO_InitStructure);					//根据设定参数初始化
	
	GPIO_ResetBits(GPIOB,GPIO_Pin_4);	//PB.4 输出低
	GPIO_ResetBits(GPIOB,GPIO_Pin_3);	//PB.3 输出低

	/* PA15重定义为普通IO */
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |  RCC_APB2Periph_AFIO, ENABLE);//使能PORTA口时钟、复用引脚PA15引脚
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;				//端口配置
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//IO口速度为50MHz
	GPIO_Init(GPIOA, &GPIO_InitStructure);					//根据设定参数初始化
	
	GPIO_ResetBits(GPIOA,GPIO_Pin_15);	//PA.15 输出低

注意事项:

(1)只能从 GPIO_Remap_SWJ_NoJTRST、GPIO_Remap_SWJ_JTAGDisable、GPIO_Remap_SWJ_Disable 这三种重定义方法中,挑选一种进行使用,不可对单独引脚进行重定义

(2)重定义这些引脚时,也要同时使能 RCC_APB2Periph_AFIO 复用时钟。