stlink制作

stlink制作安排 带 时序图 版
硬件开源平台教程的
视频在我的B站
工程主页在开源硬件平台

最开始我手上有原子的pandora板子和nano板(学校的,马上就要还了),还了就没了,所以准备买个c8t6小蓝板,那还不如自己做一个板子。

面临几个问题:

  1. 只能用usb转ttl(ch340),用flymcu下载hex程序,还不能调试(我对这个功能的不满)

  2. 而且这个flymcu不能直接下载bin文件,只能下hex,但是提取文件只能是bin,不能是hex,所以说flymcu就是个bug循环;(我对这个功能的不满)

stlink完美解决上面俩问题,所以准备买一个stlink,那还不如自己做一个stlink。

这么一来就是做一个c8t6小蓝板+一个stlink板,也就是说做市面上成熟的俩产品,有点浪费芯片;那不如做一个集成stlink的小蓝板,这不符合我复用模块的风格,而且大家复刻还得重新打板从头开始做,最终决定做两个c8t6小蓝板+一个stlink扩展板(一个c8t6小蓝板和stlink扩展板构成一个完整的stlink,另一个c8t6小蓝板当作普通板子),而且stlink扩展板要兼容市面上常用的c8t6小蓝板(同时也就兼容市面上常用的cbt6小蓝板)。

所需工具

  • 一个小蓝板+stlink扩展板+烧录固件的烧录器

烧录固件的烧录器有两种选择:USB转ttl(ch340)配合flymcu或者一个stlink配合stlinkUtility,由于flymcu只能下载hex,而市面上的stlink固件都是bin格式的,所以只能用一个stlink配合stlinkUtility,那我就得有一个能用的stlink。

恰好,我手上还有原子的pandora板子和nano板,这俩都用c8t6做的板载stlink,但是pandora只有下载调试c8t6的触点(背面),没有c8t6下载其他板子的接口,所以没办法用板载的stlink给其他板子下载程序;这个nano板子刚好相反,没有下载调试c8t6的触点,不能为板载stlink刷固件(要升级固件之能用带JTAG丝印的microB,配合ST-Link 升级器升级固件,升级固件版本太高超过64k,有可能升级失败,会让stlink变砖),但是它有c8t6下载其他板子的接口,所以能用板载的stlink给其他板子下载或提取程序,这不就是我要的stlink嘛。当然在这之前我用nano的板载stlink提取了pandora的stlink固件(V2J24),后面验证了这个固件刷在其他板子上是能识别但是不能用的,也就是说这个固件是绑定了Pandora板载stlink的c8t6的硬件信息的,但是如果借着识别的效果更新一下固件就能用了。

面临新的问题

市面上的stlink固件都是bin格式的,而且版本很高(基本上V2J28以后的带读保护,之前版本的我不知道),更高版本的占用flash刚好超过了c8t6的64k,C8T6 只有 64KB flash,在早期 ST-Link 固件比较小的时候,64KB 完全是够用的。但随着 ST-Link 的功能升级后,固件大小正好超过了 64KB ,导致了现在提示的升级错误,如下图所示。提示信息为:The up-to-date firmware is too big for this board (4960 bytes in excess). Can't update 。就差这么 4K 多的空间了。

在这里插入图片描述

图1

所以只能用cbt6(128k),其实不然。其实c8t6和cbt6是在同一块晶圆上做的,只不过c8t6只测试前64k,而cbt6测试前128k。所以有的c8t6其实是128k的,有的是64k的,比如我买的两个c8t6,用stlinkUtility软件读出来一个芯片是64k的(这个我测试了后面64k也是能用的,但是软件就是显示64k),另一个芯片是128k的。

貌似用64k的c8t6做不成stlink了,除非有V2J27或者更早的固件(放心,有),为了让市面上的64k的c8t6小蓝板兼容,特意找了早期的V2J27的stlink升级器,把我的V2J31的stlink降级到V2J27,同时直接将V2J27的stlink固件提取出来了bin和hex两个文件。只要接上我的扩展板,刷上J27的固件就能直接变功能齐全的stlink。当然这是后话了。

最开始我手上有原子的pandora板子和nano板,最开始的时候我只有V2J28的bin固件(官方的)和从Pandora上提取的V2J24固件,只焊接了一个小蓝板和stlink扩展板,而且焊之前,我并不知道两个的flash是多大的,上面展示的图是我焊接之后测的(可能有人要说了,为什么不把两个小蓝板都焊了,这样就能直接用大的flash做stlink)。没错确实是这样的,只不过后来我把小蓝板升级了,板子没到,所以留了一个芯片没焊。但不幸地是,完成第一个焊接的那个芯片用软件测出来flash是64k的(虽然这个我测试了后面64k也是能用的,但是软件就是显示64k),然后我就用nano板载stlink刷了V2J28的固件进去。准备用这个做好的stlink读Pandora板子的stlink固件,发现stlinkUtility软件能检测到stlink是V2J28版本,但是一读程序就断连,还得重新拔插USB才是再次识别,但是一读程序就断连,而且stlinkUtility自带的stlink升级器无法升级,出现图1。所以我以为是硬件电路的问题,在排除原理图问题之后,才意识到是64kflash的问题。于是我刷了从Pandora上提取的V2J24固件,问题还是和上面一样,后面验证了这个固件是绑定了Pandora板载stlink的c8t6的硬件信息的。

与此同时,发现自己做的stlink插到电脑上,没有windows弹窗,但是打开STM32CubeProgrammer软件(ST官方的烧录软件)就有弹窗,只不过问题还是和上面一样。所以打算用STM32CubeProgrammer在试试刷一下V2J28的固件,由于nano板载的stlink固件版本低,出现下图4所示,然后手残点了升级,把nano板载的stlink固件升级了。结果nano板载的stlink不能被keil检测到了,也不能给stm32F103RBT6下载程序了,但是打开STM32CubeProgrammer软件,弹出windows弹窗,keil就又能识别了,不过还是不能下载程序,这现象和我自己做的stlink一摸一样呀。这个nano板载的stlink被我升级成了砖。

最后是自己的stlink没做成,赔了一个好的板载stlink,而且这个nano板子还得还给老师,良心难安。

这就是折腾的后果,真的是试试就逝世。那天心情真的是太失落了。第二天弄了弄还是老样子。心凉了个透。

在这里插入图片描述

图4

后来我发现nano板子上的这个stm32F103RBT6不执行程序,之前一直插拔接口,不会芯片被烧坏了吧,既然板载stlink不能下载程序,那我就flymcu用USB转TTL采用串口下载,结果显示图5。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O3n0l9Ya-1665136926697)(5.png "图5")]

不能写入应该是flash被保护锁住了。果断插上nano板子,打开STM32CubeProgrammer软件,弹出弹窗,用stlinkUtility,点击Target --> Connect,还好这样能连接上,然后点击Target --> Option Bytes -->Unselect all -->apply。

在这里插入图片描述

之后flymcu用USB转TTL采用串口下载,就能给nano板子主控stm32F103RBT6下载程序了。

然后打开STM32CubeProgrammer软件,弹出弹窗。keil和stlinkUtility还是不能下载,会显示图8。ST-Link in DFU mode. Restart it or upgrade it.

在这里插入图片描述

这就说明,目前nano板载stlink还是个砖,不能使用。还好找到了旧版本的 ST-Link 升级器。打开STM32CubeProgrammer软件,弹出弹窗。打开ST-LinkUpgrade_V2.J27.M15.exe(旧版本的 ST-Link 升级器),点击 Device Connect 后,再点击 Yes 即可。这个时候发现keil和stlinkUtility都能下载程序了,而且不用打开STM32CubeProgrammer软件,插上nano板子就有弹窗,下载调试都好了。

到此,nona板子算是弄好了,这样就能还给老师了。


不对呀,我自己的stlink还没做成呢,既然找到了旧版本的stlink升级器,那这不就是64kflash的c8t6的福音,果断插上我的小蓝板(有V2J28固件),打开STM32CubeProgrammer软件,弹出弹窗,打开旧版本的 ST-Link 升级器,点击 Device Connect 后,再点击 Yes ,刷回V2J27。刚好第二块板子也焊好了,用自己做的stlink下载调试我的第二个小蓝板,一切顺利。成功。

最后用nano的板载stlink把小蓝板的V2J27固件提取出来,幸运地是,可以提取出来(bin和hex),然后再反复刷到我的两个小蓝板里,都能用。

后来发现我的第二个小蓝板是128k的,用V2J28固件也是可以的,要是最开始第一个板子芯片是128k的就直接成功了,有点难过,不过也因为如此,才搞明白了stlink的坑。

总结:

  • stlinkUtility显示64kflash的c8t6,stlink扩展板+小蓝板c8t6+提取的V2J27的固件。
  • stlinkUtility显示128kflash的c8t6,stlink扩展板+小蓝板c8t6+V2J27或者其他版本固件都行
  • cbt6,stlink扩展板+小蓝板cbt6+V2J27或者其他版本固件都行

参考:

候鹏飞/HackSTLinkUpgrade (gitee.com)

STM32用flyMcu烧录“写入出错在0kb,进度0%,耗时1029毫秒”的错误烧不进去

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值