STM32
直播中

康大争

7年用户 2208经验值
私信 关注
[问答]

STM32H750通过JTAG烧录一次程序后,就连接不到芯片了怎么解决?

我的问题是这样的:  我使用STM32CubeMX配置的工程,第一次用JTAG可以连接到芯片,但当程序下载完成后,就再也连接不到芯片了,这是什么原因?我已经在GPIO初始化中,人工增加了以下代码:
  GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  GPIO_InitStruct.Alternate = GPIO_AF0_SWJ;
  HAL_GPIO_Init(GPIOA,  GPIO_InitStruct);

  GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  GPIO_InitStruct.Alternate = GPIO_AF0_SWJ;
  HAL_GPIO_Init(GPIOB,  GPIO_InitStruct);

但是还是有同样问题。(我外部晶振是接24MHZ,程序配置成480Mhz运行)

看我的配置管脚图的话,我感觉我写了初始化代码是对的,然后我感觉是否是STM32CubeMX配置的漏洞?

回帖(1)

h1654155275.5753

2024-4-12 15:59:57
可能的原因是在程序下载完成后,JTAG引脚(SWDIO和SWCLK)被配置成了其他功能,导致无法再通过JTAG连接到芯片。

你在GPIO初始化中的代码是正确的,它将相关的引脚配置成了JTAG功能。但是,仅仅在初始化阶段配置一次是不够的,你需要确保在程序运行期间这些引脚不会被重新配置成其他功能。

有两种方法可以解决这个问题:

1. 在初始化完成后,配置引脚为JTAG功能。

   你可以在main函数的最后添加以下代码:

   ```
   HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSI48, RCC_MCODIV_1);   // 加入此段代码
   ```

   这将使引脚保持为JTAG功能。

2. 禁用调试功能。

   如果你不再需要通过JTAG调试程序,可以禁用调试功能,这样就不会再有引脚被配置成非JTAG功能。为此,你只需在MX_GPIO_Init函数中将调试功能选择为“无调试”(No Debug)。

   ![禁用调试功能](https://i.imgur.com/uoBOOua.png)

尝试以上两种方法后,应该能够再次连接到芯片。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分