stm32引脚PB3、PB4、PA15作为普通IO口用时,需要先解除调试端口复用

当项目调试的时候,发现PA15引脚无论配置输出高还是低或者输入,均只能输出3.3V的高电平。

目前STM的硬件调试有两种方法,JTAG和SW的方式,目前个人认为最好的方式就是SW,因为它只占用PA13和PA14两个IO。而JTAG还要多占用PB3,PB4,PA15三个IO口。很浪费资源。

通常使用SW的方式,但是STM默认会启用SW和JTAG两种。也就是说,默认情况下,PA13、PA14、PB3、PB4、PA15均不能作为普通io使用。


因为没有使用JTAG,所以为了让PB3,PB4,PA15这三个IO变为普通io,必须解除调试端口复用。

        AFIO(Alternate Function Input/Output)模块主要用于配置一些外设的复用功能(alternate function)。

        配置步骤:

1.打开AFIO时钟

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

2.查芯片引脚手册

这里我们将PA15从JTDI变成PA15普通引脚。

3.使用GPIO_PinRemapConfig()函数

 这里我们主要看蓝色的三个参数:

第一个,GPIO_Remap_SWJ_NoJTRST,就是解除 JTRST 引脚的复用。在引脚定义表中就是 NJTRST 也就是PB4。使用 GPIO_Remap_SWJ_NoJTRST 参数,PB4 就变为正常的GPIO口了。其他四个端口PA13、PA14、PA15、PB3仍然是调试端口,不能当做GPIO口来使用。


第二个,GPIO_Remap_SWJ_JTAGDisable,就是解除 JTAG 调试端口的复用,在引脚定义表中就是PA15、PB3、PB4这三个端口全都变回GPIO口,PA13和PA14任为SWD的调试端口。


第三个,GPIO_Remap_SWJ_Disable,就是把SWD和JTAG的调试端口全部解除,在引脚定义表中就是PA13、PA14、PA15、PB3、PB4这5个引脚全部变成普通的GPIO,没有调试功能了。这个参数不可随意调用,一旦调用这个参数并且下载程序后,调试端口就没有了,这之后的STLINK就下载不进去程序了,这时只能使用串口下载,下载一个没有解除调试端口的新的程序。这样调试端口才能重新使用。

以上描述对应参考手册中的以下两个表:

GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); //PB4

GPIO_Remap_SWJ_NoJTRST:只将PB4变成普通IO口(GPIO)。

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //PA15|PB3|PB4

GPIO_Remap_SWJ_JTAGDisable:JTAG-DP 禁用 + SW-DP 使能。只将PA15 ,PB3 ,PB4变成普通IO口。

 

GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); //PA13|PA14|PA15|PB3|PB4

GPIO_Remap_SWJ_Disable:将上述串口都变成普通IO口,完全禁用(JTAG+SW-DP)。使调试端口失效,不建议使用。

通常就是解除 JTAG 的复用,保留 SWD 的复用,所以这里选GPIO_Remap_SWJ_JTAGDisable参数。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能AFIO时钟,即端口复用时钟
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//失能JTAG

这两句就ok了,以后就可以将上述三个引脚作为普通io了。

 

<think>好的,我现在需要解释STM32的GPIO_PinRemapConfig函数中禁用JTAG的具体含义,特别是使用GPIO_Remap_SWJ_JTAGDisable和ENABLE参数的情况。首,我需要回忆STM32的GPIO重映射相关知识,以及JTAG接的作用。 STM32的某些引脚在复位后默认用于调试功能,比如JTAG。JTAG是一种常用的调试,占用PA13PA14PA15PB3PB4引脚。当用户需要将这些引脚用作普通GPIO时,必须进行重映射,禁用JTAG功能。否则,这些引脚无法正常作为IO使用,可能导致外设无法工作,比如例子中的MPU6050模块连接PB4无法读取数据的问题。 接下来,GPIO_PinRemapConfig函数的参数GPIO_Remap_SWJ_JTAGDisable的作用是什么?根据引用资料,这个参数会禁用JTAG调试,但保留SWD功能。这样PA13PA14仍可用于SWD调试,而PA15PB3PB4被释放为普通IO。这样用户可以在需要SWD调试的同时,使用部分原本被JTAG占用的引脚。 然后,ENABLE参数表示启用该重映射配置。调用这个函数后,相关的引脚不再受JTAG控制,转而由用户配置为输入或输出模式。需要注意的是,在重映射之前,必须使能对应的AFIO时钟,因为重映射功能属于复用功能,需要时钟使能才能生效。 用户可能会遇到的问题包括未启用AFIO时钟导致配置不生效,或者错误地禁用了SWD导致无法继续调试。因此,在代码中需要执行RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE),然后配置GPIO的重映射。 总结一下,使用GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE)会禁用JTAG接,释放相关引脚普通IO,同时保留SWD调试功能。这对于需要更多GPIO资源的应用场景非常有用,但需注意正确配置时钟和避免影响调试。</think>### GPIO_PinRemapConfig函数中禁用JTAG的功能解释 在STM32微控制器中,`GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE)` 主要用于重新配置调试和释放特定引脚普通GPIO功能。以下是其核心含义和实现机制: #### 1. **背景:默认引脚功能** STM32F10x系列芯片复位后,**PA13PA14PA15PB3PB4** 默认被配置为 **JTAG调试**(用于程序下载和调试)。此时这些引脚无法作为普通I/O使用[^2]。 #### 2. **函数作用** - **禁用JTAG接**:通过 `GPIO_Remap_SWJ_JTAGDisable` 参数,关闭JTAG调试功能,释放 **PA15PB3PB4** 为普通GPIO[^3]。 - **保留SWD接**:**PA13(SWDIO)和PA14(SWCLK)** 仍保留为 **SWD调试**(一种更精简的调试协议),确保仍可通过ST-Link等工具调试程序[^1]。 #### 3. **代码实现步骤** ```c // 步骤1:使能AFIO时钟(重映射功能依赖此时钟) RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // 步骤2:禁用JTAG,保留SWD GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); // 步骤3:配置释放的引脚普通GPIO(以PB4为例) GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 输入模式 GPIO_Init(GPIOB, &GPIO_InitStructure); ``` #### 4. **典型问题与注意事项** - **未使能AFIO时钟**:若未调用 `RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE)`,重映射配置将无效[^2]。 - **错误禁用SWD**:若误用 `GPIO_Remap_SWJ_Disable`(禁用JTAG+SWD),会导致所有调试失效,需通过复位恢复。 - **引脚冲突**:若未正确释放引脚,外设(如I2C、SPI)可能无法正常通信(参考MPU6050案例)。 #### 5. **应用场景** - 需要更多GPIO资源时(如按键、传感器接)。 - 复用JTAG引脚为其他外设功能(如PWM、UART)。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值