本文是针对STM32的芯片,其他Arm核芯片可以参考。
不考虑下载器的连接有问题、芯片有问题等硬件情况。仅考虑软件问题——
这是由于上一次烧录的程序中把stm32的SWD和JTAG功能都关掉了。
这种情况的特点往往是:之前烧录都好好的,某次烧录后突然就不行。并且当你一直按着开发板的reset键时,你会发现又能识别设备了。
首先确保用于SWD的PA13、PA14(往往是这两个引脚)没有被用去作为其他功能。此时,在你的代码中(如果是用HAL库)多半是有__HAL_AFIO_REMAP_SWJ_DISABLE();
这个代码,这个宏定义将SWD和JTAG禁止了。正确的代码应该是__HAL_AFIO_REMAP_SWJ_NOJTAG();
,这个代码仅禁止JTAG,不禁止SWD。
解决方法一:
1、按住复位不松开,点击下载程序。
2、马上 松开复位(要在报错之前) ,即可成功下载。
3、重要:为了保证稳定性,尽量使用有线的下载器。并且,在实践过程中发现,使用ST-Link成功的概率最大。CMSIS-DAP、Jlink等都是一按下载按钮就会报错,来不及重新下载。
解决方法二:
(不管你已经烧录了的程序有没有打开串口)换用ISP工具下载,就是用串口下载的那个。没有ISP的一键下载电路的板子不要忘了换BOOT的电平喔~
注:这里点下载到松开复位键不是每一次都能成功,每次点了下载键到松开复位键的时间每次都不同,在某一个点时,就可以下载程序了。板子就恢复正常了。但需要注意的是,在程序里一定要避开对SWD的引脚的配置。