问题详情
描述:在mdk中,点击load按钮提示找不到目标设备,无法下载程序
原因:单片机只有在停机状态下才可以下载程序,所以,连接不上是因为mcu无法停止
验证:在mdk中设置连接方式为:under reset,如下图:
点击确定,按下复位按钮,然后点击load,马上松开复位按钮,程序可以正常下载。为什么按复位按钮就可以下载呢?因为单片机停机了。
临时方案:
每次下载按一下复位按钮,哈哈。
讲道理,这种方法确实可行,但是如果有仿真需求,又完蛋了,因为不知道什么时候st-link会再次访问mcu,所以就不知道什么时候按复位。。。点击仿真按钮之前按下复位按钮确实可以进,但是走两步仿真就会提示丢失设备。。。
如果用st-link只是为了下载程序,那不是大炮打蚊子嘛,下载程序用串口都可以。
解决方案
前提条件:单片机内没有程序,flash是空白的
单片机已经下载的有程序怎么办呢?答案是全片擦除,哈哈,用到的软件是flymcu,就是用串口下载程序那个,担心你没有用过,看下图:
清除芯片后的单片机再上电是什么状态呢?没错,是停机状态,不信你可以验证:在mdk里点击load,程序可以直接下载进单片机。如果你真的去验证了,恭喜你,需要再次清除芯片一次,哈哈。。。
解决方案
第一步:在你的程序里初始化swclk和swo引脚,编译
第二步:load进你的单片机
至此问题全部解决。
其实,问题的原因就是没有给引脚初始化成调试引脚,然后st-link通过调试引脚停止单片机时没有成功,然后程序就下载不进去
为什么swclk和swo可以停止单片机呢?这个,我也不知道。。。
HAL快速初始化引脚方法
如果你是用的HAL编程,初始化引脚方法如下图所示:
然后生成代码,编译,清除芯片,load就可以了。