前言 为了更新。ST提供了STLINK,可以通过该工具上的SWIM口进行下载程序,当然在客户的实际使用中,客户也可以按照SWIM的协议,自己去实现类似STLINK的功能。 一、详解7 G) g5 @' D5 f5 ]; X5 e* c* m0 E 手册只需要参照UM0470_STM8 SWIM communication protocol and debug module即可,注意请在官网下载最新的UM0470,对老版的有了一些修改。目前我参考的是DocID14024 Rev 4。在24-AUG-2016做的修改。. }4 y3 x2 G! u 对于官方的STLINK部分的电路设计,可以参考STM8S-Discovery的原理图设计,如下: STLINK里面的主控芯片是STM32F103,结合MCU部分的电路图,不难发现,其结构如下:% P7 a- Q: k# z$ j' L 所以可以看出,虽然我们认为的SWIM口线只有四根线,但是这只是在终端客户看来,在实际的开发过程中,会有不止四根线去实现SWIM协议的功能。 其中需要说明的是:6 K; \$ l: x* C! R, I SWIM功能用到的口线,必须要配置成OPEN-Drain模式,不可以使用推挽模式。# u. [$ i5 c! S: r3 U 二、软件部分. B C- r* @% M" i! S. D ST目前没有官方的示例代码供客户验证,但是在大千世界的互联网上还是能找到相关的例程,这里分享一个链接需要翻墙: 自己找一块STM32F103的discovery板子再加一块STM8S105的discovery板子,找一些上面的R1,R2,R3的电阻焊接上面的电路,链接好即可,然后编译下载好的软件,稍微修改,然后运行: 通过STVP验证软件是否通过自己模拟的SWIM正确的写入了:1 X- x& [ L4 W" ?$ N7 X$ L 验证通过。4 O; q5 E8 F4 I9 d w# _$ k 通过上面的实践,发现其实主要的两个方面: 1、电路的连接要正确,请参考ST官方的原理图;注意端口有分流的,这样可以避免端口的来回切换。, E+ ~) h/ l) x4 t% k3 m: ? 2、IO口配置成Open-Drain模式,运用网上开源的例程还是很轻松的能编译通过的。 3、注意代码里面的容错性处理。具体说明如下图所示:3 l8 J; {+ I3 _, S 在SWIM写的过程中,需要关注容错性的处理,可以定义全局变量nacked,观察他的数值,会发现他会随着发送的字节长度的加长而线性的增加;所以很有必要将SWIM_NACK_MAX的数值放大一些;否则可能造成想要较长长度的数值不能正确的全部写成功;! j/ T8 E4 Y, k8 ^4 Y 文档下载 更多实战经验* X+ t$ N5 f2 v' K |
谢谢分享 |
谢谢分享 |
谢谢LZ分享 |
早上好!谢谢分享。 |
s19文件放在stm32flash中,通过GPIO模拟SWIM协议可以实现给STM8s下载程序吗 |
非常感谢楼主的分享,学习学习 |
非常感谢楼主的分享! |
谢谢分享 |