自学内容网 自学内容网

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

Bug

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

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,只需要在配置时增加以下两行代码:

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

修改后的配置代码如下:

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


原文地址:https://blog.csdn.net/augu_/article/details/142691142

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!