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

相关推荐
白掰虾1 小时前
STM32N6&AI资料汇总
人工智能·stm32·嵌入式硬件·stm32n6·stm32ai
星空的资源小屋3 小时前
Digital Clock 4,一款免费的个性化桌面数字时钟
stm32·单片机·嵌入式硬件·电脑·excel
xiugou7985 小时前
记录一下CubeMX+Clion的STM32 CMake工程中如何修改Flash程序存储的起始地址
stm32·单片机·嵌入式硬件
涂山苏苏⁠9 小时前
STM32之RTC
stm32·rtc
清风66666610 小时前
基于STM32单片机的OneNet物联网粉尘烟雾检测系统
stm32·单片机·物联网·毕业设计·课程设计
源远流长jerry15 小时前
STM32之RTOS移植和使用
stm32·单片机·嵌入式硬件
范纹杉想快点毕业1 天前
ZYNQ PS 端 UART 接收数据数据帧(初学者友好版)嵌入式编程 C语言 c++ 软件开发
c语言·笔记·stm32·单片机·嵌入式硬件·mcu·51单片机
乔宕一1 天前
stm32 链接脚本没有 .gcc_except_table 段也能支持 C++ 异常
c++·stm32·嵌入式硬件
范纹杉想快点毕业1 天前
STM32 串口接收数据包(自定义帧头帧尾)
stm32·单片机·嵌入式硬件
茯苓gao1 天前
STM32G4 电流环闭环
笔记·stm32·单片机·嵌入式硬件·学习