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了。

相关推荐
Mapleay3 小时前
FMC STM32H7 SDRAM
stm32·单片机·嵌入式硬件
易知嵌入式小菜鸡4 小时前
STM32CubeMX-H7-19-ESP8266通信(中)--单片机控制ESP8266实现TCP地址通信
stm32·单片机·嵌入式硬件
c7_ln6 小时前
STM32 低功耗设计全攻略:PWR 模块原理 + 睡眠 / 停止 / 待机模式实战(串口 + 红外 + RTC 应用全解析)
stm32·单片机·实时音视频·江协科技
小柯博客7 小时前
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
c语言·stm32·单片机·嵌入式硬件·物联网
wind_one110 小时前
STM32[笔记]--1.前置准备
笔记·stm32·单片机
Camellia031112 小时前
嵌入式学习--江协stm32day5
stm32·嵌入式硬件·学习
江山如画,佳人北望17 小时前
stm32-c8t6实现语音识别(LD3320)
stm32·单片机·嵌入式硬件
wangxinwei200017 小时前
stm32_LAN8720驱动
stm32·单片机·嵌入式硬件
小胖同学~17 小时前
Linux--vsFTP配置篇
stm32·单片机·嵌入式硬件
知识噬元兽1 天前
【工具使用】STM32CubeMX-FreeRTOS操作系统-信号标志、互斥锁、信号量篇
stm32·单片机·嵌入式硬件