STM32F1的PB3/PB4用作普通IO

STM32F1的PB3/PB4用作普通IO

一 背景:

  在调试以PB3/PB4为引脚驱动继电器时发现初始化IO后,对IO控制不起作用,考虑是否引脚复用了,在参考芯片手册后,发现该引脚复用了。

二 芯片手册引脚图:

由下图可以看到PB3/PB4默认功能是JTAG功能,不是GPIO功能,需要对其进行配置使其作为普通IO。
STM32F1的PB3/PB4用作普通IO_第1张图片

三 配置

1.开启复用时钟: 要将PB3/PB4作为普通IO使用,需要进行复用操作,所以要开启复用时钟。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

2.关闭JTAG功能: PB3/PB4用作JTAG的调试引脚,为将其用作GPIO,需要关闭JTAG功能。

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

3.正常配置IO: 实现上述操作后,我们可以正常配置IO口。

GPIO_InitTypeDef	GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);          //使能GPIOB时钟
	
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                     //配置GPIOB输出引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;			  //配置PB3输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;			  //配置PB3输出速率
GPIO_Init(GPIOB,&GPIO_InitStructure);				   		  //初始化PB3

以上就是对PB3引脚作普通IO的配置,PB4引脚同理。

4 完整配置

void PB3_Config(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
	
	GPIO_InitTypeDef	GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);          //使能GPIOB时钟
		
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                     //配置GPIOB输出引脚
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;			  //配置PB3输出模式
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;			  //配置PB3输出速率
	GPIO_Init(GPIOB,&GPIO_InitStructure);				   		  //初始化PB3
}

你可能感兴趣的:(stm32,单片机,嵌入式硬件)