STM32F103 PB3 PB4 设置成普通GPIO的配置

一个ESP8266的小项目

https://blog.csdn.net/shitou123xsx/article/details/90550098

最近由于任务需要,用STM32F103C8T6做了一块板子,以前一直在用JLINK给芯片下载程序【swd】,从未使用过STM32 JTAG下载功能,JTAG功能中包含了PB3 PB4。这次在做的板子中恰巧使用到了PB3引脚用来做普通GPIO口。在不知情的情况下调试了一天,板子上的所有GPIO口都能够正常工作,唯独PB3这个引脚经过多次配置都无法正常的使用。

    经过查阅资料发现PB3引脚默认配置为JTAG功能,如果想要将PB3设置成普通GPIO口功能需要在配置的时候关闭PB3引脚的JTAG功能,让其可以充当普通GPIO口来进行使用。

void Guang_Init(void)
{
GPIO_InitTypeDef  GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
/*******GPIOB********/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);			
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_Init(GPIOA, &GPIO_InitStructure);			
}
			
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_Init(GPIOA, &GPIO_InitStructure);			
}

上面的代码是我的工程中的一段初始化代码,其中使用到了PB3作为输入功能。在上述代码中的

RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

在这两行代码中开启了AFIO时钟,禁止使用了芯片的JTAG功能(GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);或者使用寄存器操作方式AFIO->MAPR|=2<<24;)另外在禁止芯片的JTAG功能时不能错误的吧芯片的swd功能禁止掉,如果禁止了芯片的SWD功能,那就只有换个芯片了。经过这样的简单配置PB3就可以正常的充当GPIO口使用了。其实在设计板子的时候如果芯片的GPIO口数量充足尽量不要去使用PB3 PB4 这两个引脚,以免在后续的开发过程中被这个问题挡住去路,拖延了项目的开发进度。

关于重映射大家可以参考下这个文章https://wenku.baidu.com/view/84aae02df705cc1754270948.html。

你可能感兴趣的:(STM32)