你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】SWIM 协议的 GPIO 口模拟

[复制链接]
STMCU小助手 发布时间:2022-2-28 20:02
前言
2 P! t: m# w1 H" F3 B( r为了更新。ST 提供了 STLINK,可以通过该工具上的 SWIM 口进行下载程序,当然在客户的实际使用中,客户也可以按照SWIM 的协议,自己去实现类似 STLINK 的功能。
5 a7 s# p" O: ^* l, F; a9 c9 r一、详解% Q# _0 k( g/ }" ]; R
手册只需要参照 UM0470_STM8 SWIM communication protocol and debug module 即可,注意请在官网下载最新的 UM0470,对老版的有了一些修改。目前我参考的是 DocID14024 Rev 4。在 24-AUG-2016 做的修改。: q) }6 K& E3 }5 y7 H
对于官方的 STLINK 部分的电路设计,可以参考 STM8S-Discovery 的原理图设计,如下:
; ?0 i4 {" h9 I$ b0 ~/ w6 n  @
: v- d8 C/ j- G9 ]2 q+ N5 V- H4 t [9SIDMX@V9]_E(}BEGF{P5F.png   y! @% d5 X8 W$ }2 m$ u7 n7 D
' d1 p3 q$ t1 ?/ H
STLINK 里面的主控芯片是 STM32F103,结合 MCU 部分的电路图,不难发现,其结构如下:& ^% L% z3 ^' e' j; ^: D

' B/ Q7 l$ i" }# w6 t. i4 |, P [6ZRS}3PE}W8CC1RQ2%1.png   S8 r" ?: j' E0 J* l% i  o' t* e* n
0 M8 z: X/ ?9 x, K% z
所以可以看出,虽然我们认为的 SWIM 口线只有四根线,但是这只是在终端客户看来,在实际的开发过程中,会有不止四根线去实现 SWIM 协议的功能。
7 |, C8 S, F0 u+ m% d3 u5 {其中需要说明的是:
5 M2 ^. t8 K$ y& g0 g) xSWIM 功能用到的口线,必须要配置成 OPEN-Drain 模式,不可以使用推挽模式。
6 G$ p  E$ m8 `/ X; ~, t- N6 w+ `( E
8 P! B$ N2 P% V+ H- j: C" _二、软件部分
7 v  `: _2 |5 F( s& E, UST 目前没有官方的示例代码供客户验证,但是在大千世界的互联网上还是能找到相关的例程,这里分享一个链接需要翻墙:
% p' K7 s% x  ?9 r6 F6 H: m9 V$ w$ Q4 K
U[U$Y[ER}P83SW20R}L0P~D.png % B' L& X4 f) c: S2 |* D; h

1 S( K: U6 U1 V2 q XD]T}003B5O(F6F1043NBXO.png
& q7 c; I2 C9 \" {5 n# j& f" @5 y
3 {* K' ^- X* M. ~" Z* f自己找一块 STM32F103 的 discovery 板子再加一块 STM8S105 的 discovery 板子,找一些上面的 R1,R2,R3 的电阻焊接上面的电路,链接好即可,然后编译下载好的软件,稍微修改,然后运行:
' A( {9 n/ T* d( _! N  ^5 j. _( ^' t1 q  P- R2 U8 p  z* P+ ?
RW@_L@WOKKD2IU23687VVX4.png 8 C8 D& _( B' t2 I$ M( q* B+ [
! b$ h" W" m8 ?7 ?9 n6 n
通过 STVP 验证软件是否通过自己模拟的 SWIM 正确的写入了:) T' m4 I# a' C- \' W

- m0 l7 L+ ]/ Z0 L MA5VOQ23IX4EW~33UY~W0~D.png
: e$ T; E$ w7 s) I3 x; J
+ z# X8 m) U/ l9 N6 F$ M验证通过。! T9 i. t: ~  f# t! k2 B
通过上面的实践,发现其实主要的两个方面:
3 p8 m  t. G1 Y, Y5 S! T: s1、电路的连接要正确,请参考 ST 官方的原理图;注意端口有分流的,这样可以避免端口的来回切换。' p7 y3 r- m( W+ `6 ?* \
2、IO 口配置成 Open-Drain 模式,运用网上开源的例程还是很轻松的能编译通过的。) o3 s# ?1 f7 E& M0 C3 A; j
3、注意代码里面的容错性处理。具体说明如下图所示:+ n* Q' P+ ^9 h% U9 L5 I* U

. s6 h4 `! f* `# n AJQQ7@DX8YAE`I_FT@56D8T.png 6 B" H  P1 j( ^

/ g: Q# m. P& n5 n- l6 K在 SWIM 写的过程中,需要关注容错性的处理,可以定义全局变量 nacked,观察他的数值,会发现他会随着发送的字节长度的加长而线性的增加;所以很有必要将 SWIM_NACK_MAX 的数值放大一些;否则可能造成想要较长长度的数值不能正确的全部写成功;! N8 Q8 y2 g# |4 c; N
  O5 Z: g+ ]# m7 T; y4 d
赞 收藏 评论0 发布时间:2022-2-28 20:02

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版