问题:
使用CubeMX生成的代码烧录一次后,再使用st-link对stm32f103c8t6进行烧录时,keil显示“No target connected,提示框如下:
原因:
因为配置CubeMX时未勾选调试器,所以生成的代码把用于ST-LINK烧录的I/O配置成了其它模式,导致程序烧录一次后就无法再通过ST-LINK的SWD烧录方式进行程序的下载。
解决方案:
第一步:确保Debug->Settings->Flash Download下的Reset and Run进行了勾选。
第二步:
长按开发板的复位键,别松手!!!然后点击Keil的下载,在点击Keil的下载0.5s后,松开复位键,此后就可以正常使用ST-LINK了。就是这么简单!就是这么玄学!!
背后原理:
STM32有复用重映射和调试I/O配置寄存器(AFIO_MAPR),通过配置这个寄存器,就可以切换不同的程序烧录方式。当我们按下复位键后AFIO_MAPR寄存器的位[26:24]默认为000,此时就可以使用JTAG或者SWD的方式进行程序的烧录了。