FlyMCU烧录出错的问题

  报错信息如下:

开始连接...12, 接收到:00 E0 00 
开始连接...25, 接收到:00 E0 00 00 00 1F 1F 
在串口COM3连接成功@57600bps,耗时4657毫秒
芯片内BootLoader版本号:3.1
芯片PID:00000421  
芯片已设置读保护
芯片有读保护,请先擦除器件以清除读保护
开始去除读保护(全片擦除时间会比较长,请耐心等候!)
去除读保护,并擦除成功
开始连接...7, 接收到:00 1F 1F 
在串口COM3连接成功@57600bps,耗时1078毫秒
芯片内BootLoader版本号:3.1
芯片PID:00000421  
芯片已设置读保护
第1140毫秒,已准备好
开始编程芯片,共需写入30KB,耗时1140毫秒
写入出错在0KB,进度100%,耗时1172毫秒

  总是会在写入程序的时候出错,提示写入出错在0KB,进度100%,耗时1172毫秒这样的信息,不知道为什么,总是会这样,偶尔会正常,但是大多数情况会出问题。。。
使用STM32 STLink Utility软件擦除掉芯片后,再使用FlyMCU烧录就会正常,但是没过多久就可能又烧不进去了。 我的芯片是STM32F446RCT6。我现在怀疑是芯片的问题,等新的芯片到了之后再看看会不会还有同样的问题。。。
  下面是我的电路设计图,我是没有使用CH340的RTS和DTR引脚的,直接用两个按键控制MCU的RST和BOOT0的。
CH340电路:
在这里插入图片描述
BOOT0控制:
在这里插入图片描述
复位按键:
在这里插入图片描述
  现在又好了,下载好几次又都正常了,真没招了,硬件就是这样,你不知道它为什么出问题,也不知道它为什么又没问题了。。。

补充一下这个电路的下载流程,因为复位和BOOT0都是通过按键控制的,所以在FlyMCU中就不用DTR和RTS引脚控制

在这里插入图片描述
  然后点击开始编程,此时软件会等待MCU的BootLoader的回复信息,此时需要我们先按下BOOT0的控制引脚,拉高BOOT0,然后按下复位按钮,进入BootLoader程序,注意,此时不要松开Boot0的按钮,等看到下面的进度条之后就可以松开了,然后就能在软件上看到下载成功了。
在这里插入图片描述

芯片默认是Boot0和Boot1都是接地的,此时从Flash启动程序

软件下载

  FlyMCU和STM32 STLink Utility软件可以去官网下载(推荐使用STM32CubeProgrammer)。

后续发现

  使用STM32CubeProgrammer串口连接,同样一直提示读保护被开启,问题是我明明没有开启过读保护,就算使用STM32STLink utility工具设置和擦除芯片内容后,依旧会提示读保护。。。没招了 要想继续使用串口下载就只能换芯片了
解决办法
  在重新打板之后,倒腾了一会,发现了解决方法,方法如下:
  首先,必须选择STM32CubeProgrammer烧录软件,同时,使用串口下载时必须勾选Read Unprotect(MCU)选项
在这里插入图片描述
  勾选完后,将BOOT0使用跳线帽选择高电平,选择UART,刷新下面的串口,然后点击Connect进行连接,然后立即按下复位按钮,此时软件会出现两个错误弹窗,不用管,可以看到右上角显示现在已经连接上了,此时就可以进行烧录了。
在这里插入图片描述
  如果按照上面的操作始终提示错误信息,连接不上,首先检查下列内容:

  • 串口是否被占用
  • BOOT0引脚是否拉高
  • 软件右上角连接方式是否选择UART,并勾选了下面的Read Unprotect(MCU)

 如果上面的步骤都是正确的,那么你就把STM32CubeProgrammer软件关闭,然后重新打开,再次按照上面的流程设置一下,然后点击Connect并按下复位按钮,正常情况下即可连接成功!


更新:
  当我再次拿出来进行测试的时候,发现又不行了,即使按照上面的流程也连接不上软件,还是同样的问题。。。服了


再后续分析

  博主使用的STM32F446RCT6的芯片,经过多次改版后才发现了上面的解决办法,博主使用STM32F103C8T6芯片通过FlyMCU以及STM32CubeProgrammer软件进行串口下载都是完全正常没问题的,但是对于F446这个芯片就出现了上面所说的一系列问题,换了新的芯片也是有问题,因此猜测可能与该款芯片有部分关系。同时上述的解决办法是博主在将电路设计进行优化后的结果,优化之前的板子是无论如何也连接不上的,因此可能也与电路设计有关。但是正常情况下应该是直接就可以连接的,所以对于这款F446芯片我是觉得多少有点问题。

最终找到的解决方法

  带着怀疑的心态,我换了一个CH340芯片,将原来的CH340C换成了CH340N,然后重新打板,发现换成CH340N芯片之后,通过FlyMCU以及STM32 Cube Programmer都能正常使用串口烧录了,只不过FlyMCU烧录偶尔可能会失败,这应该是正常的,没想到居然跟串口芯片有关,找了很久很久很久的问题终于解决了!烧录成功的界面如下图所示!

  • FlyMCU烧录成功!
    在这里插入图片描述
  • STM32 Cube Programmer连接成功截图!(不需要勾选任何选项,只需要将BOOT0拉高,甚至不需要按复位按键,感觉还是STM32 Cube Programmer更方便)

如果连不上可以拔一下你的线再插上,然后重新Connect,就能连上了,另外如果你的程序用到了USART1,那么建议不要勾选Run after programming(编程后执行)选项

在这里插入图片描述

  • STM32 Cube Programmer烧录成功截图
    在这里插入图片描述

总结

  本文分析总结了在对STM32F446RCT6芯片使用串口下载过程中遇到的各种问题,并给出了最终的解决办法。最终的解决方法就是将CH340C芯片更换为CH340N芯片,避免了下载失败、STM32CubeProgrammer软件连接不上等问题。不推荐使用FlyMCU软件,bug比较多,最好使用STM32CubeProgrammer下载。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐