【Bug】STM32F1的PB3和PB4无法正常输出

Bug

使用标准库配置STM32F103C8T6的PB3和PB4引脚输出控制LED灯时,发现引脚电平没有变化无法正常输出高低电平,配置代码如下:

c 复制代码
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(	RCC_APB2Periph_GPIOB, 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);

Reason

原文链接:STM32 PB3/PB4不能正常使用的解决办法

网上搜了一下后通过上面博客的讲解,才知道在系统复位的时候,PB3和PB4对应的功能默认为SYS_JTDO和SYS_NJTRST。

这两个引脚是在使用Jlink向STM32烧录程序时需要用到,所以默认的功能就不作为普通的GPIO,需要通过复用,才能作为普通的GPIO,只需要在配置时增加以下两行代码:

c 复制代码
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);	 
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);		

第一行是多一个复用功能时钟的使能,第二行是使能JTAG相关引脚的复用,该参数在内部函数中标注的意思是:@arg GPIO_Remap_SWJ_JTAGDisable : JTAG-DP Disabled and SW-DP Enabled


Resolution

修改后的配置代码如下:

c 复制代码
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|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);

相关推荐
学工科的皮皮志^_^1 小时前
单片机ADC+NTC温度采集电路学习
经验分享·笔记·单片机·嵌入式硬件·学习
【云轩】1 小时前
STM32驱动代码规范化编写指南(嵌入式C语言方向)
c语言·stm32·elasticsearch
马浩同学2 小时前
【ESP32】ESP-IDF开发 | 经典蓝牙开发 | 蓝牙串口协议(SPP) + 客户端和服务端例程
c语言·单片机·嵌入式硬件·mcu·物联网·iot
EleganceJiaBao4 小时前
【嵌入式】嵌入式系统中的 SemVer 版本控制方案
c语言·stm32·嵌入式·patch·semver·major·minor
绿算技术4 小时前
MCU详解:嵌入式系统的“智慧之心”
单片机·嵌入式硬件
Ch_Jany7 小时前
C51 Proteus仿真实验17:数码管显示4×4键盘矩阵按键
单片机·51单片机·proteus
星火1913147 小时前
WinSW-x64(2.12.0)将nginx注册为服务可能有bug
nginx·github·bug
simplesin7 小时前
docker 增加镜像(忘记什么bug了)
docker·bug
蓝白小手套8 小时前
“消失的中断“
单片机·嵌入式硬件·bug
shixiexunnie8 小时前
从点灯开始的51单片机生活
单片机·嵌入式硬件·学习·51单片机