stm32的PB3 PB4 PA15引脚可以在使用SWD仿真和烧录的情况下释放出来,作为普通IO口使用。
初始化代码如下:
-
GPIO_InitTypeDef GPIO_InitStructure; -
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); -
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); -
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; -
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; -
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; -
GPIO_Init(GPIOB, &GPIO_InitStructure); -
GPIO_SetBits(GPIOB,GPIO_Pin_4); -
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; -
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; -
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; -
GPIO_Init(GPIOB, &GPIO_InitStructure); -
GPIO_SetBits(GPIOB,GPIO_Pin_3); -
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); -
GPIO_ResetBits(GPIOA,GPIO_Pin_15);
在实际测试的时候,发现工程内PB3 PB15无法当做普通IO使用,最后发现解决办法为:
上面这段初始化代码放在所有IO初始化最后就好了。
通过现象调试找到问题原因:
当把PB3 PB4 PA15初始化好之后,如果再次调用GPIOA GPIOB接口的时钟代码的话,会使得PB3 PA15引脚变回JTAG的引脚
即初始化完之后不能再执行如下代码,否则PB3 PA15引脚会变回JTAG的引脚,而无法作为普通IO使用
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
--------------------- 本文来自 物致-皈依 的优快云 博客 ,全文地址请点击:https://blog.youkuaiyun.com/a18156289516/article/details/60332934?utm_source=copy
本文介绍如何在STM32中将PB3、PB4、PA15等引脚从JTAG功能中释放出来,用作普通IO口。通过正确的初始化顺序和配置,避免了这些引脚在使用过程中变回JTAG状态的问题。
590

被折叠的 条评论
为什么被折叠?



