求stm32高手,我想用pb3当普通io口,为啥不成功呢?,看资料上显示,开启sw,关闭jtag就可以啊

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求stm32高手,我想用pb3当普通io口,为啥不成功呢?,看资料上显示,开启sw,关闭jtag就可以啊相关的知识,希望对你有一定的参考价值。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
你这个时钟开的是复用端口。你应该改成
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
很多管脚都有普通功能和复用的功能,你把复用的开起来当然不能当做普通IO口用。
下面的推挽输出也要改。
参考技术A 把复用推挽输出改为推挽输出就可以了,记得开启GPIOB时钟。

STM32JTAG口用作普通IO的配置

使用Jlink向STM32烧录程序时,需要使用6个芯片的引脚(以STM32F103C8T6为例),分别是PB4/JNTRST、PB3/JTDO、PA13/JTMS、PA14/JTCK、PA15/JTDI、NRST。标准的20针JLink接口如下图所示。 
技术分享图片 
当芯片IO口资源比较紧张时,可选择SW模式烧录程序。SWD只需用到PA13/JTMS、PA14/JTCK两根线,NREST可以接可不接,而剩下的PB4/JNTRST、PB3/JTDO和PA15/JTDI就可以当做普通IO使用。但是这三个口当做普通IO使用时需要先配置。配置方法:

void GPIOInit(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;

    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);    

    /* Disable JLink, enable SW */

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA " RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   

    /* Push-pill output, it can be other output types */

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

    GPIO_Init(GPIOB, &GPIO_InitStructure);

 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   

    /* Push-pill output, it can be other output types */

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

    GPIO_Init(GPIOA, &GPIO_InitStructure);

}

 

GPIO_Remap_SWJ_JTAGDisable已在“stm32f10x_gpio.h”文件中进行了宏定义:

 

#define GPIO_Remap_SWJ_JTAGDisable  ((uint32_t)0x00300200)  

/*!< JTAG-DP Disabled and SW-DP Enabled */

 

注意!!!这三个引脚默认的是JLink的复用功能,如果程序中还有其他GPIO口的配置,那这三个引脚的GPIO初始化一定要放在其他所有GPIO配置之后,否则依然无法作为普通IO使用。

 

如果非要把这三个引脚的配置放在其他GPIO配置之前,那么在程序中每次使用这些引脚前,需要再添加一句 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); 例如:

 

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);  

GPIO_ResetBits(GPIOB, GPIO_Pin_4);  // PB4 is set to 0;



以上是关于求stm32高手,我想用pb3当普通io口,为啥不成功呢?,看资料上显示,开启sw,关闭jtag就可以啊的主要内容,如果未能解决你的问题,请参考以下文章

STM32JTAG口用作普通IO的配置

STM32的PB3口不能拉低 PB4口不能拉高 其他口貌似都可以 怎么会

STM32C8T6 JTAG使用到PB3|PB4|PA13|PA14|PB15端口做普通IO时,需禁止JTAG!

STM32库中关于GPIO_PinRemapConfig函数的使用

求STM32驱动电路 (10路24继电器和2路步进电机驱动器)

STM32F10x下载口的用法