本人在做一款产品,发现将GPIOA.15设置推挽输出,但是发现配置好后不管置高还是置低都是输出3.3V,不受程序控制。问题现象:设置PA15输出,但无法控制输出,输出一致3.3v.
程序提示:无
问题原因:因为PA15是JTAG的JTDI端口的引脚,默认不是普通IO口,故无法当做普通IO操作。
解决方法:1、开启AFIO复用功能时钟
2、禁止JTAG对应引脚,恢复普通IO。
举一反三:
- #define GPIO_Remap_SWJ_NoJTRST ((uint32_t)0x00300100) /*!< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */ #define GPIO_Remap_SWJ_JTAGDisable ((uint32_t)0x00300200) /*!< JTAG-DP Disabled and SW-DPd*/ #define GPIO_Remap_SWJ_Disable ((uint32_t)0x00300400) /*!< Full SWJ Disabled (JTAG-DP + SW-DP) */
复制代码 所以写GPIO_Remap_SWJ_Disable的话就禁止JTAG和SWD。若只使用SWD仿真,就只禁止GPIO_Remap_SWJ_JTAGDisable。
实例:
- GPIO_Init(){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA,ENABLE); //开启AFIO时钟 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //禁止了JTAG,保留SWD GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin= GPIO_Pin_15; GPIO_Init(GPIOA,&GPIO_InitStructure);
- }
复制代码