STM32 程序禁用JTAG、SWD

#STM32 程序禁用JTAG、SWD


  • 标准库禁用
  • HAL库禁用
  • 不能下载程序
  • PB3

禁用方式

程序中在使用到JTAG、SWD的某个IO 时,需要禁用掉相关调试方法后,再配置相应的IO方式。在需要相应的接口配置前使用这些代码。

  • 标准库配置:
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOF, ENABLE);	 //使能相应接口的时钟,以及RCC_APB2Periph_AFIO

 GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);//完全禁用SWD及JTAG 
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);     //禁用JTAG
  • HAI库配置方式:
	__HAL_RCC_AFIO_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();           	//
	__HAL_RCC_GPIOF_CLK_ENABLE();           	//
	

/* JTAG-DP Disabled and SW-DP Disabled */
  __HAL_AFIO_REMAP_SWJ_DISABLE();			//完全禁用SWD及JTAG 
	__HAL_AFIO_REMAP_SWJ_NOJTAG();				//禁用JTAG

产生的副作用

在禁用掉相应的接口方式后,即不能再使用这种方式下载程序了。因此会出现很多人遇到的:“”RAM check failed at :“”或者“NO M-Cortex”.

遇到这个状况,需要再次下载程序,有如下三种办法:

  • 如果只禁用的JTAG,可以用SWD模式下载程序进去。

否则只能后续两种,但总体思路都是不认让代码运行起来,不去禁用JTAG及SWD,这时候下载程序。

  • 采用人工复位,按钮或短接。在程序下载进行到复位的这一步,完成复位动作。
  • 拉高BOOT0->重新上电->程序不能运行->下载程序-> 拉低BOOT0->重新上电->程序正常运行。

注意及总结

  • 根据自己实际需要的禁用方式来禁用JTAG及SWD。我只需禁用JTAG,不用完全禁用,就会避免这些问题了。
  • 一开始能正常下载,后来不能下载了,一定是代码配置中出现的问题。细心查找网络资源及代码配置试验后,总结出了出错原因。

猜你喜欢

转载自blog.csdn.net/Soonjn/article/details/106868748