【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);

相关推荐
昊昊昊昊昊明25 分钟前
十天学会嵌入式技术之51单片机—day-10
单片机·嵌入式硬件·51单片机
赵谨言1 小时前
基于单片机的车灯智能控制系统设计与实现
经验分享·单片机·毕业设计
剑鞘的流苏1 小时前
STM32-USART串口通信(9)
stm32·单片机·嵌入式硬件
集思广益的灰太狼3 小时前
静电的起因与静电效应:技术分析与应用
单片机·硬件工程
憧憬一下4 小时前
stm32之FLASH
stm32·单片机·嵌入式
@NachoNEKO5 小时前
一种资源有限单片机处理cJSON数据的方法
单片机·嵌入式硬件
qq_301881696 小时前
XD08M3232接近感应单片机的接近感应模块的工作原理
单片机·嵌入式硬件·硬件架构
爱学习的小旭6 小时前
STMCubeMX使用TB6612驱动编码轮并进行测速
单片机·嵌入式硬件
不脱发的程序猿7 小时前
MCU裸机程序如何移植到RTOS?
单片机·嵌入式硬件·rtos
PAQQ7 小时前
【python】windows实现与k230使用socket通信并传输文件
python·stm32·单片机