×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-05-19 发布时间:
|

最近由于任务需要,用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);

}

上面的代码是我的工程中的一段初始化代码,其中使用到了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 这两个引脚,以免在后续的开发过程中被这个问题挡住去路,拖延了项目的开发进度。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR单片机语音识别电路模块设计