【小陈笔记】单片机学习笔记——JTAG与PA15的使用

在使用STM32F103RCT6开发板学习按键例程时遇到无法启动问题。通过更换硬件、测试接口和配置代码,发现JTAG接口的PA15引脚电压异常,最终确定问题出在DAP下载器与JTAG接口的连接方式上,提供三种解决方案:使用SWD接口、下载后断开连接或使用ST-LINK-V2下载。
摘要由CSDN通过智能技术生成

为了预防今后再次遇到相同问题,留下记录以供日后参考,如描述有误还望指正。

问题描述

在使用正点原子mini开发板(主控STM32F103RCT6)学习寄存器按键例程时,遇到了无法启动的问题。随后尝试了测试标准库例程,仍然无法启动。为了解决这个问题,我尝试使用HAL库编写了一个按键读写的测试工程,然而依然没有解决。

原因分析:

经过尝试了三种不同的测试方案后,发现这些方案并不是问题的根源。考虑到可能存在硬件问题,我首先更换了开发板,使用了STM32F103C8T6最小系统板进行测试,并成功验证了测试代码的功能正常。

然而,当我将代码下载到mini开发板时,仍然无法正常工作。这引发了我对下载器的差异性的怀疑。尽管我使用的是原子DAP下载器,但最小系统板是通过SWD接口连接的,而mini开发板则是通过JTAG接口连接的。

通过查阅资料,我了解到JTAG接口中使用了PA15引脚。于是我开始怀疑问题可能出在DAP和单品机连接方式上。为了验证这个猜想,我保持连接状态,同时使用万用表测试PA15引脚的电压。结果显示只有0.36V,这进一步确认了问题出在JTAG接口上。

解决方案:

通过测试,解决方案有以下几种:
1.使用杜邦线连接SWD接口进行下载。
2.使用JTAG接口的连接线下载后断开与下载器的连接。
3.使用ST-LINK-V2用JTAG接口进行下载。(下载后程序功能正常,无需断开连接)

配置代码:

  1. 寄存器配置代码
	RCC->APB2ENR|=1<<2;     //使能PORTA时钟
	
	JTAG_Set(SWD_ENABLE);	//关闭JTAG,开启SWD
	
	GPIOA->CRH&=0X0FFFFFFF;	//PA15设置成输入	  
	GPIOA->CRH|=0X80000000; 			 
	GPIOA->ODR|=1<<15;	   	//PA15上拉,PA0默认下拉
  1. 标准库配置代码:
	GPIO_InitTypeDef GPIO_InitStructure;
	
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);//使能PORTA,PORTC时钟

	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试
	
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_15;//PA15
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
 	GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA15
  1. HAL库配置代码
//附网上的一段代码
RCC_APB2PeriphClackCmd(RCC_APB2Periph_AFIO |RCC_APB2Periph_GPIOB, ENABLE); //打开复用时钟
GPIO_PinRemapConfig(GPIO Remap _SWJ Disable,ENABLE);/调用重映射函数,关闭jtag,开启swd

我使用CubeMX生成的,无需额外配置。禁用代码配置在HAL的void HAL_MspInit(void)函数:

void HAL_MspInit(void)
{
  /* USER CODE BEGIN MspInit 0 */

  /* USER CODE END MspInit 0 */

  __HAL_RCC_AFIO_CLK_ENABLE();
  __HAL_RCC_PWR_CLK_ENABLE();

  /* System interrupt init*/

  /** NOJTAG: JTAG-DP Disabled and SW-DP Enabled
  */
  __HAL_AFIO_REMAP_SWJ_NOJTAG();

  /* USER CODE BEGIN MspInit 1 */

  /* USER CODE END MspInit 1 */
}

配置为输入模式代码在void MX_GPIO_Init(void)函数内,具体如下:

void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  
  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOA_CLK_ENABLE();
  
  /*Configure GPIO pin : PA15 */
  GPIO_InitStruct.Pin = GPIO_PIN_15;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值