解决ST

您所在的位置:网站首页 stm32串口程序以前能用现在不行 解决ST

解决ST

2023-12-22 23:20| 来源: 网络整理| 查看: 265

问题分析 问题描述

在mdk中,点击下载按钮提示找不到目标设备,无法自动下载程序。

原因猜想

单片机只有在停止状态下才可以下载程序?

猜想验证

如果让单片机处在停止状态,是不是就能正常下载了呢? 为了验证这个想法,我在mdk中设置连接方式为:under reset,如下图: 连接模式 点击确定保存。

然后按下STM32的复位按钮不松(此时单片机处于停止状态),点击下载按钮后,马上松开复位按钮,发现程序下载成功。由此可知,stm32在停止状态下可以下载程序,那么:stlink无法自动下载的原因就是它不能使单片机处在停止状态。

不按复位也下载成功过

有的人说他明明不按复位也下载成功过,但是后来什么都没动,再下载就不行了。

这种情况是因为他下载成功的那次stm32里是空白的,没有程序在里面所以它一直处于停止状态,当他下载过一次程序后,stm32处于运行状态,就无法自动下载了。

解决方案

下面提供1种临时方案和1种解决方案。

临时方案

每次下载前按复位按钮,哈哈。

讲道理,这种方法确实可行,但是如果有仿真需求又不行了,点击仿真按钮之前按下复位按钮确实可以进仿真,但是走几步仿真就会提示丢失设备。。。(因为调试过程中stlink常常需要让stm32处于停止状态一小段时间)。

所以这个方案只适用于没有仿真需求并且觉得下载前按复位还能接受的同学。

解决方案

如果你的电路板上带有复位按钮,请试下【按住复位按钮不松,点击下载按钮后立即松开复位按钮】能不能下载进去程序,如果可以的话跳过下面“第1步”。

第1步:使单片机处于停止状态

把stm32的flash全部擦除,用到的软件是flymcu,就是用串口下载程序那个,担心你没有用过,看下图(如果没用过flymcu的话可以百度一下使用方法,灰常多): 清除芯片 清除芯片后的单片机再上电是什么状态呢?没错,是停止状态。

第2步:设置调试引脚

其实,无法下载的原因就是没有给引脚初始化成调试引脚,然后stlink无法通过调试引脚停止单片机,程序就下载不进去。所以需要在程序里添加 swclk和swo引脚初始化 代码。

库函数编程初始化引脚方法

根据具体型号初始化调试引脚,不再赘述。

HAL编程初始化引脚方法

如果你是用的HAL编程,初始化引脚方法如下图所示: HAL初始化 这里可以选择 Serial Wire 也可以选择 Trace Asynchronous Sw,然后重新生成代码即可。

下载完成后程序不自动运行?

还有人说下载程序的问题解决了,但是下载后程序不会自动运行,还要手动按一下复位才行,太麻烦了。这个也好解决,在keil里修改两个地方的设置就行,直接上图: 在这里插入图片描述 这个地方大家应该都知道,但是只操作这个地方是不行的。

下面这个位置要取消勾选。 下面这个位置要取消勾选。 下面这个位置要取消勾选。 重要的事情说三遍,取消勾选、取消勾选、取消勾选。 在这里插入图片描述 越来越觉得国外的东西太强大了,不仅芯片厉害,配套的开发工具也很厉害,反观我们自己,除了电源芯片还不错,其它方面还是有很长的路要走呀!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3