STM32F103C8T6单片机的PA13引脚一直输出高电平的解决

STM32F103C8T6单片机PA13引脚高电平问题解决
在STM32F103C8T6项目中遇到PA13引脚无法控制输出电平的问题,始终处于高电平状态。问题源于JTAG模式的影响,需要关闭JTMS-SWDIO功能并进行IO口复用配置。通过设置GPIO_PinRemapConfig()函数禁用SWJ,最终解决输出问题。附带PA13引脚的调试代码和输出波形。

使用环境(蓝色粗体字为特别注意内容)
1、软件环境:Keil MDK 5.15
2、硬件环境:STM32F103C8T6最小系统
在项目中需要用到STM32F103C8T6的GPIOA13引脚,发现无论如何初始化都无法控制该引脚的输出电平,该引脚一直输出高电平,而且非常稳定。查阅相关资料发现是JTAG模式搞的鬼。原因如下:


可以看到PA13口的Main function是JTMS-SWDIO,不是PA13,所以要想使用PA13的普通IO口能力,就要先把IO口的复用功能打开,再把JTMS-SWDIO功能关掉就可以。我从来不用JTAG的,于是采用以下方式禁用PA13引脚的JTAG模式:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);

发现问题依旧存在,多方查找资料,完全没有理由啊。。怀疑是IO口初始化方式不对,最后终于发现少了这一句:

GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);

最后贴上PA13引脚的调试代码;

Main.c

void DisableJTAG()
{

	GPIO_InitTypeDef GPIO_InitStruct;
	//开启AFIO 时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
	// 改变指定管脚的映射 GPIO_Remap_SWJ_Disable SWJ 完全禁用(JTAG+SW-DP)
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
	// 改变指定管脚的映射 GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁用 + SW-DP 使能
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);


	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA时钟
	GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_Out_PP;  //配置模式
	GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_13; //配置哪个IO口
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  //配置IO口速度,仅输出有效
	GPIO_Init(GPIOA, &GPIO_InitStruct);

}

int main(void)
{
	DisableJTAG(); // 禁用PA13的JTAG调试模式
	delay_ms(1000);

	while(1)
	{
		GPIO_ResetBits(GPIOA, GPIO_Pin_13);
		delay_ms(500);
		GPIO_SetBits(GPIOA, GPIO_Pin_13);
		delay_ms(500);
	}
}

PA13引脚输出波形如下:

 

 

评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值