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

【源代码】STM32F103C8T6最小板搞定CMSIS-DAP和SWO功能  

[复制链接]
radio2radio 发布时间:2018-5-31 15:47
阅读主题, 点击返回1楼
赞 1 收藏 45 评论418 发布时间:2018-5-31 15:47
418个回答
sunonly 回答时间:2018-7-6 19:13:30
感谢分享!下来学习学习
radio2radio 回答时间:2018-7-17 17:20:34
shanji 发表于 2018-7-4 19:16# T6 v. p: G" ^+ A# x
看来要换个mdk版本了
1 d( S) y9 E7 l' O0 N
搞定没有?
hi201803 回答时间:2018-7-22 19:23:07
radio2radio 发表于 2018-7-17 17:20
7 V- J" ~) M, G; b  K搞定没有?
2 |) X1 a6 z. a  o! p
在  MDK 4.xx  里面编译通过了。 - x& J3 v: |7 E' i8 F) X+ p
只需要把 缺少的头文件复制过去就可以,大约3个,再改一下include 设置就可.$ @: V$ k  {5 U  }

' J# m4 g1 g; {+ Y: I. @缺少的头文件 在MDK 5.xx 下面目录里.8 U; K" \  q$ V& Z5 @
C:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Include5 w' Z, ^# f" S/ g6 p
C:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Driver\Include8 D* R( l$ O# ]7 \3 }& a

7 R& o0 x% m. U# ?. E2 \; x缺少 的 usb库文件 也复制过去. 具体在哪里就不清楚了.
wujique 回答时间:2018-7-24 09:35:40
楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。0 u4 K1 n: P1 c7 d  X. n
还有CDC不敢呢?不知道DAPLINK是否有这个BUG。
radio2radio 回答时间:2018-7-24 21:21:44
huangxuejia-292 发表于 2018-7-24 09:35
6 \* O0 [# R1 T楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。. Q1 D2 ~( P9 s4 D; ?
还有CDC不敢呢?不知道DAPLINK是否有这个BUG。 ...

0 o5 _' n! L, ?; ^8 s6 c- a& E这个简单,在main.c的最后面一段,我拷贝到这里:
( f5 Q& h4 \' q6 T+ S( j( l) [
  1. # e9 V3 [8 U( F/ o2 Q3 w' o
  2. //-----Soft reset + Hard reset-------------------------------------------------
    / ]/ j  Z! A) s( W5 [( V/ W
  3. #define PIN_SWCLK_SET PIN_SWCLK_TCK_SET
    1 B: A- y2 O$ u) N
  4. #define PIN_SWCLK_CLR PIN_SWCLK_TCK_CLR
    ; h) b6 q5 ^; h
  5. 6 S6 y+ S5 e' X0 B
  6. #define RST_CLOCK_CYCLE()                \0 _6 l; d5 ~+ p6 t9 [/ N
  7.   PIN_SWCLK_CLR();                       \+ m4 N5 y6 |0 f$ A9 O
  8.   PIN_DELAY();                           \
    , o3 R$ W( b, o2 C
  9.   PIN_SWCLK_SET();                       \
    0 y! L% Y* C( @# ?' t, G, [
  10.   PIN_DELAY()' F6 d  M  L0 S+ s: B

  11. ) t# X2 O# Z# N2 Z9 r4 ^) Q' \5 j, }& y
  12. #define RST_WRITE_BIT(bit)               \
    / H9 s/ g" O! y( _( d
  13.   PIN_SWDIO_OUT(bit);                    \
    % o9 J, D7 w7 s! \
  14.   PIN_SWCLK_CLR();                       \
    6 E3 r# y1 b7 C: q' ]1 p0 i, o1 d
  15.   PIN_DELAY();                           \7 h; r0 I/ m9 p+ Y+ y8 u' ~9 F
  16.   PIN_SWCLK_SET();                       \' P& H- h! h& B9 y' B% }0 X
  17.   PIN_DELAY()
    5 _5 ?5 l2 {. C

  18. 5 y3 f8 b$ D3 {2 B) q2 L4 \7 D
  19. #define RST_READ_BIT(bit)                \6 V5 n3 [2 W0 X7 g$ R: H
  20.   PIN_SWCLK_CLR();                       \5 Q; T* J2 d& r# A' @8 @% {
  21.   PIN_DELAY();                           \3 L, P% K/ h$ f8 ?
  22.   bit = PIN_SWDIO_IN();                  \
    " R+ T- q6 c% l& B3 A
  23.   PIN_SWCLK_SET();                       \
    ( s/ m. D! P! D
  24.   PIN_DELAY()
    + s! j, f' L; ~1 h

  25. 3 E% Q+ j8 a" S" t4 x
  26. #define PIN_DELAY() PIN_DELAY_SLOW(DAP_Data.clock_delay)
    / n* f9 b- E* `1 g! U
  27. ; K1 K% |9 ~; `6 i
  28. uint8_t RST_Transfer(uint32_t request, uint32_t data)" t. ?. u2 ?, o  C2 i  B
  29. {# b0 h/ G% m2 B$ ?+ H2 P( b/ d* [
  30.   uint32_t ack;                                                                 \
    + u% C% c  X4 c
  31.   uint32_t bit;                                                                 \9 f6 v* T7 U0 a' ^3 T; A, S9 ]0 s1 v
  32.   uint32_t val;                                                                 \( _9 j4 r( y6 L. o4 i- Z& U
  33.   uint32_t parity;                                                              \
    7 M! _7 f, d$ r$ @
  34.   uint32_t n;                                                                   \
    0 c5 q! C2 L* f
  35.   \% Q# U! i  d& D2 b* J* H, Q! c& C
  36.   /* Packet Request */                                                          \* d" p3 T% Q% R: P6 j* p2 U/ B
  37.   parity = 0U;                                                                  \
      H8 u3 X7 A6 y
  38.   RST_WRITE_BIT(1U);                     /* Start Bit */                        \
    ) K1 p( K  ^6 ^" d
  39.   bit = request >> 0;                                                           \
    * f/ [  g; L0 ?' O- X
  40.   RST_WRITE_BIT(bit);                    /* APnDP Bit */                        \
    & k3 J! T% N0 ~7 j# x
  41.   parity += bit;                                                                \
    2 `8 E, n: }, A/ b1 o1 B
  42.   bit = request >> 1;                                                           \
    % `" U) y  Q1 s9 D/ i$ S" b9 e* K
  43.   RST_WRITE_BIT(bit);                    /* RnW Bit */                          \
    " g5 \" ?; [9 T( M
  44.   parity += bit;                                                                \" j. G# H7 M& C
  45.   bit = request >> 2;                                                           \
    ) L! n( j3 I) _3 x9 W
  46.   RST_WRITE_BIT(bit);                    /* A2 Bit */                           \
    - j5 P: `+ N& q$ y3 V
  47.   parity += bit;                                                                \
    & Q/ c# m3 W+ x1 F
  48.   bit = request >> 3;                                                           \
    & `+ t! k0 ~! J+ G! m
  49.   RST_WRITE_BIT(bit);                    /* A3 Bit */                           \
    4 j# r) W: D0 e) B. P
  50.   parity += bit;                                                                \# ?2 o& |. v) t* J- w5 a
  51.   RST_WRITE_BIT(parity);                 /* Parity Bit */                       \7 s. r% \( y. m, i9 z) Y
  52.   RST_WRITE_BIT(0U);                     /* Stop Bit */                         \5 W2 V) W& l* D- k$ Q
  53.   RST_WRITE_BIT(1U);                     /* Park Bit */                         \4 {' V8 M3 z; T
  54.   \
    : P4 p, s, m6 s: ~2 [
  55.   /* Turnaround */                                                              \0 e) z  e! Z8 Z1 i' n
  56.   PIN_SWDIO_OUT_DISABLE();                                                      \; j/ \* R( c5 P
  57.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \! F3 Z5 A( U0 X4 Z3 o5 p0 I
  58.     RST_CLOCK_CYCLE();                                                          \  L& n! ]% {# R8 s
  59.   }                                                                             \
    8 v7 o6 I6 @, c4 L  K1 s
  60.   \
    ! s  `2 c6 u5 X3 [5 U7 X9 x: |4 b& Y* s
  61.   /* Acknowledge response */                                                    \3 S* K5 T. V1 F0 N
  62.   RST_READ_BIT(bit);                                                            \2 n4 h- |- D  l: g& e( n( {; b
  63.   ack  = bit << 0;                                                              \
      l; e# Z+ o* ~. M7 L
  64.   RST_READ_BIT(bit);                                                            \& ]0 C( w/ B! l/ i
  65.   ack |= bit << 1;                                                              \( _" g3 l1 t" ^1 P
  66.   RST_READ_BIT(bit);                                                            \( Q# E( E/ J" E& D
  67.   ack |= bit << 2;                                                              \
    2 {1 r+ H8 C0 w
  68.   \
    2 s6 H- \( T8 y& ?# X
  69.   /* Data transfer */                                                           \
    ) W; @9 V  F% s% \/ [
  70.   /* Turnaround */                                                              \
    4 ?6 ~5 g. |7 Z: U# [  ]. g
  71.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \
    , p8 U: y7 O6 |- V" `8 ~* E7 }: p
  72.     RST_CLOCK_CYCLE();                                                          \
    6 [* K, T) m0 v9 D4 S" K
  73.   }                                                                             \2 ]1 z5 t8 S9 n. f. B
  74.   PIN_SWDIO_OUT_ENABLE();                                                       \
      U  a" T! r# p: Q. ?* L: k: ^5 P
  75.   /* Write data */                                                              \, L$ ^% x' ?6 \7 B% W) s
  76.   val = data;                                                                   \
    2 B2 i- O/ ?; h9 |" Y0 v
  77.   parity = 0U;                                                                  \3 r/ o4 P) F4 c' E+ s. p
  78.   for (n = 32U; n; n--) {                                                       \
      b2 \) {6 i/ y& E  C  c
  79.     RST_WRITE_BIT(val);              /* Write WDATA[0:31] */                    \  u# F. @- U9 A2 Q3 z- U$ l# W
  80.     parity += val;                                                              \: ?6 P/ {; J: p) N
  81.     val >>= 1;                                                                  \. r5 K4 @- R' y6 W5 C  X
  82.   }                                                                             \
    " z5 i# T& A7 e* m+ j0 i
  83.   RST_WRITE_BIT(parity);             /* Write Parity Bit */                     \) U, V& q! |1 \9 k, m
  84.   PIN_SWDIO_OUT_ENABLE();                                                       \2 [/ }6 V5 O$ [; x' E4 V0 s, w
  85.   PIN_SWDIO_OUT(1U);                                                            \/ F9 i' M$ J& u7 F
  86.   return ((uint8_t)ack);                                                        \
    ( `+ [. j+ H4 b) P$ |! J
  87. }4 O: m2 Y7 ^% }" j8 C: C

  88. ( M5 s5 n) Y- U
  89. void vResetTarget(uint8_t bit)* |2 i  q5 @1 Q3 e
  90. {" i0 r( y' x& [1 J: U9 ]
  91.   uint32_t i;
    # z# I4 [$ B" a1 D$ ]
  92.   //soft-reset for Cortex-M% w: {+ ~/ M: t- ]8 ^5 Z8 P
  93.   RST_Transfer(0x00000CC5, 0xE000ED0C); //set AIRCR address8 z5 Z6 M4 N- a& Y. @
  94.   for (i=0; i<100; i++);
    # k" f4 u+ s. w# b" u4 r- v
  95.   RST_Transfer(0x00000CDD, 0x05FA0007); //set RESET data
    : D  s& S4 N, D3 g& O
  96.   for (i=0; i<100; i++);
    " ?/ E( V2 V6 l& d* C1 e
  97.   RST_Transfer(0x00000CC5, 0xE000ED0C); //repeat( v/ J8 R8 E- ^* M0 v
  98.   for (i=0; i<100; i++);% A0 ]& G& U, `
  99.   RST_Transfer(0x00000CDD, 0x05FA0007);4 i* }) y- d9 V% j: a: |
  100.   5 X7 U. j+ d3 N7 Z
  101.   if (bit & 1)  PIN_nRESET_HIGH();
    ) h8 ]) V) W# ^8 E) p" Y8 U- [6 B& V
  102.   else          PIN_nRESET_LOW();8 D/ N/ d; o% ^5 q& b  C
  103. }' n6 d0 `8 S2 n- n1 L
  104. . j2 u7 B( t. L) a
复制代码
7 k7 v6 B2 ~8 f2 M. j& `
' ?5 w, p  w. _, B+ M/ |
您再看看,是哪里调用了vResetTarget(uint8_t bit)函数。  o" ?) b/ z* s9 m. J+ Y

- @% ?; f0 m. c& `$ m' ?+ eCDC的改进,我是仿造CubeMX的CDC user 样板文件,UART库函数换成ARM RTE的。 解决了原来的版本CDC操作会导致死机问题。# ]3 f9 ~6 e) c+ X  C. \
2 x+ g5 R& f) ]6 D" |! x  s
USB的底层没有动。我曾经尝试将USB库函数更换成CubeMX的,没有成功。9 o7 ~2 S" \- H, l
也还发现,如果换成CubeMX的USB库,编译后代码文件会大了很多,很可能导致64KB不够用(我的F103C8只有64KB)。
% }; N; {' R$ Y$ p- h: t- ], ]# Q" j* w: O
wujique 回答时间:2018-7-25 15:00:55
radio2radio 发表于 2018-7-24 21:21
9 f. I3 Y6 w/ J" G2 W. ]; |- W这个简单,在main.c的最后面一段,我拷贝到这里:
; v# Z0 S1 Q& i2 e' K* ^. k7 V
改好了,调试能复位。# O' P. f% r' O! }5 X! K  Q
MSD(U盘拖放)无法复位。。。
radio2radio 回答时间:2018-7-25 18:59:43
本帖最后由 radio2radio 于 2018-7-25 19:14 编辑   ?1 h- G' [- O6 t
huangxuejia-292 发表于 2018-7-25 15:00
* ]+ l6 s* R+ i5 B, p改好了,调试能复位。! }; O: F; }  W) I
MSD(U盘拖放)无法复位。。。
& ^9 k( o  B' e7 J
你看看优盘拖放是不是后台运行的,要等优盘拖放完成之后,插入一个时延(100ms),调用一次vResetTarget,一定行。
" r3 I2 G7 L. j. H& z5 m( Z) o" R
dreamfly239 回答时间:2018-7-26 10:38:40
很受益啊,希望楼主继续分享有价值的资料
shanji 回答时间:2018-7-27 10:01:49
radio2radio 发表于 2018-7-17 17:20* b- V! m+ B  w; u& ?; T* j- U; C
搞定没有?
, H& |8 Q6 _$ H" e/ u7 i' x( F
还没有,不去折腾了
hi201803 回答时间:2018-7-27 17:01:25
radio2radio 发表于 2018-7-24 21:21
$ L' \$ \8 d6 ^4 y这个简单,在main.c的最后面一段,我拷贝到这里:

0 v# \( q# j9 _! a% l: u看到,github 里面有 几个cmsis-DAP使用 st的USB库,至于大小,具体情况没细看.
chowei 回答时间:2018-7-29 18:32:27
好东西
g2004-148848 回答时间:2018-8-7 00:02:08
楼主辛苦谢谢分享
g2004-148848 回答时间:2018-8-7 00:03:15
请问楼主是用哪个版本编译的?
radio2radio 回答时间:2018-8-7 11:53:12
g2004-148848 发表于 2018-8-7 00:03- O! z1 `+ P# Y# ^9 L! N( s. D2 d5 [
请问楼主是用哪个版本编译的?
: ^- s# j, M$ p0 ^
Keil 5.xx,留意第60楼,ARM CMSIS要升级到V5.3.0
radio2radio 回答时间:2018-8-7 14:32:12
本帖最后由 radio2radio 于 2018-10-27 12:29 编辑 ! D! L; a, R6 F2 P7 q

4 C/ O* `) m( |  A! t刚刚发现,一楼的原码包,USB文件夹里面,少了一个 “USB_CM3.lib” 的USB库文件。8 e) ]! y# B/ K: c
我自己的硬盘上面就有这个文件,但是上传github后,这个文件就是没有上传出去,我后加也不会加。! {$ z% J- c) _( j- J9 y1 J: u% o

( K! [; p: t# h8 J/ ?* u我不知道为什么,记得第一次上传时,*.hex固件文件就是不给上传,后来我压缩成rar文件才传上去的。
+ t4 m7 I+ t" D. r哪位熟悉github的大侠,告诉我如何上传(.lib/.hex)等文件,谢谢。
5 e& A$ D$ f3 r$ Q0 w( I! Q0 ^7 f9 j* L2 `. s( g; d) B
没有了USB_CM3.lib库文件,肯定不行,下面的3个方法都能解决:
" o6 f& c- [/ b; t方法1,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。拷贝到.\USB文件夹。
8 e  |! ~/ S1 L% X' C方法2,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。将此文件添加到工程里面。
8 a, }- X, X( S4 N( {5 J9 t方法3,在其他地方拷贝一个,加到.\USB文件夹。本楼的附件就有一个,方便有需要的。
. A0 ?/ l% Z. f: N* q) d+ R9 s  {! W1 ^' ~9 z8 T8 S9 p
(我的github已经更新,使用方法2)1 U" _. {2 P% V1 U

7 u, n& P- y0 D" G' _$ [* d# |- i这个问题已经解决,是我第一次使用github,还不熟悉,经过网友提醒,需要在github的上传过滤文件里面,修改容许.lib/.hex等文件的上传。+ \  P8 w' W$ d

9 j+ h8 `7 y$ Y
8 q) D  \0 p$ y; @0 h& l1 k- D

USB_CM3.rar

下载

63.75 KB, 下载次数: 50

所属标签

相似技术帖

官网相关资源

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