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

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

[复制链接]
radio2radio 发布时间:2018-5-31 15:47
阅读主题, 点击返回1楼
1 收藏 45 评论417 发布时间:2018-5-31 15:47
417个回答
radio2radio 回答时间:2018-7-4 20:54:32
shanji 发表于 2018-7-4 19:16
+ A; v: c" E2 Z3 H  X9 L4 W* L看来要换个mdk版本了

' ]( }7 F, @" i也不一定要换,单独升级CMSIS,如图:3 ?% s1 K& E/ I% }; U
Keil CMSIS v5.3.0_required.JPG $ y6 e0 }/ p- m% H. d) Y
sunonly 回答时间:2018-7-6 19:13:30
感谢分享!下来学习学习
radio2radio 回答时间:2018-7-17 17:20:34
shanji 发表于 2018-7-4 19:16
5 ]7 ]4 \1 j3 C1 J# s  s: V看来要换个mdk版本了

5 s9 \& a3 \' a& B: m5 W# E搞定没有?
hi201803 回答时间:2018-7-22 19:23:07
radio2radio 发表于 2018-7-17 17:20- Y: M0 [& X2 O% s
搞定没有?
5 O+ ?# z- h6 t* D- R
在  MDK 4.xx  里面编译通过了。
9 o/ A3 i3 U6 Q# Y6 o只需要把 缺少的头文件复制过去就可以,大约3个,再改一下include 设置就可.
' P) S% l  }- w0 o1 m9 |5 D8 j" Q: R- A: O/ A$ f
缺少的头文件 在MDK 5.xx 下面目录里.
; k# |: V) \. yC:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Include! T6 [9 a; p7 O8 z) X
C:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Driver\Include% q! U8 ~9 h; ^- I+ N; m# n

3 O1 ?0 n$ @3 k2 t+ N缺少 的 usb库文件 也复制过去. 具体在哪里就不清楚了.
wujique 回答时间:2018-7-24 09:35:40
楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。+ h+ y3 {! d  b  H
还有CDC不敢呢?不知道DAPLINK是否有这个BUG。
radio2radio 回答时间:2018-7-24 21:21:44
huangxuejia-292 发表于 2018-7-24 09:35" `+ V& Y& l1 ?- r* P
楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。; Q( R0 S! D2 D, h& ^! Z) [9 [8 d
还有CDC不敢呢?不知道DAPLINK是否有这个BUG。 ...

& d" j7 t2 d' ?- T0 c这个简单,在main.c的最后面一段,我拷贝到这里:+ e8 _) T. g2 r) r- E" Y6 W. o

  1. " I! B' W, h& T8 V
  2. //-----Soft reset + Hard reset-------------------------------------------------
    7 ?* t! x1 X9 r% q5 a  V2 X
  3. #define PIN_SWCLK_SET PIN_SWCLK_TCK_SET5 \+ O$ Z! U& I* a
  4. #define PIN_SWCLK_CLR PIN_SWCLK_TCK_CLR- ~4 v, [" d& H8 A
  5. ( |4 f# `' \4 Y
  6. #define RST_CLOCK_CYCLE()                \3 U1 y2 J5 m1 f
  7.   PIN_SWCLK_CLR();                       \
    6 f  z5 t* N4 ~6 @* ^' k
  8.   PIN_DELAY();                           \
    + l9 \" _2 O. c: P; o( N0 J
  9.   PIN_SWCLK_SET();                       \; j: k" Z/ P# D' _( d8 Q! x
  10.   PIN_DELAY()0 {1 P2 W* X8 L- }# j# @% P
  11. . {: L8 P# w$ ?8 H. ?8 ]9 N
  12. #define RST_WRITE_BIT(bit)               \) K4 r) A- H9 }+ N! h9 j. g! p
  13.   PIN_SWDIO_OUT(bit);                    \
    ( l& z7 n3 B. f5 R) _' w1 X# Q
  14.   PIN_SWCLK_CLR();                       \' e* [9 f* D/ Z9 k
  15.   PIN_DELAY();                           \
    . E; V" x+ Y* G1 r
  16.   PIN_SWCLK_SET();                       \2 R4 b" L' X0 W
  17.   PIN_DELAY()* N/ f0 k, y9 ~' ]9 M' _* w& G+ u

  18. 2 ?* G8 D; ?" Z4 t
  19. #define RST_READ_BIT(bit)                \
    3 o# K2 K% `( L' \+ M* y- n( \
  20.   PIN_SWCLK_CLR();                       \
    4 y4 N1 ^+ s6 T# @) ?9 O
  21.   PIN_DELAY();                           \
      j3 |% l1 N# l: x* v
  22.   bit = PIN_SWDIO_IN();                  \1 k8 W  ]% U9 c6 L4 c4 x- Y
  23.   PIN_SWCLK_SET();                       \
      p" f$ o5 x% y% }$ @$ D9 F7 U
  24.   PIN_DELAY()
    4 M* f, u( G; s# [. J  r8 E

  25. % O! Q: k5 ~7 p0 t, A' O9 t
  26. #define PIN_DELAY() PIN_DELAY_SLOW(DAP_Data.clock_delay)+ X) g! }1 c2 N! C

  27. 5 n- \, [" I( ]: Q
  28. uint8_t RST_Transfer(uint32_t request, uint32_t data)& W! Z' X4 c/ F' Y# m/ O
  29. {* G6 j, L4 O1 Y3 z1 r
  30.   uint32_t ack;                                                                 \! w, i$ k  y/ Y& b. y$ g/ |, a0 `
  31.   uint32_t bit;                                                                 \! J2 @7 m7 G9 G0 \9 z
  32.   uint32_t val;                                                                 \6 M; n# X; E- s5 P  O
  33.   uint32_t parity;                                                              \. R- Y( D' f& [4 k: R/ o
  34.   uint32_t n;                                                                   \
    + E. R# K. i3 ~6 l: b& @, W
  35.   \1 @! T4 _+ `$ y) e
  36.   /* Packet Request */                                                          \: D, M9 k$ c! w
  37.   parity = 0U;                                                                  \# q8 Y, _* C- q1 w2 N8 F2 U
  38.   RST_WRITE_BIT(1U);                     /* Start Bit */                        \+ g, F! u! D9 Z
  39.   bit = request >> 0;                                                           \4 Q# b' j( K3 Q/ H( r! u/ j! {
  40.   RST_WRITE_BIT(bit);                    /* APnDP Bit */                        \  X8 x- o1 q8 O0 F! U% N
  41.   parity += bit;                                                                \4 z1 n7 Y# N  K9 n7 @" k
  42.   bit = request >> 1;                                                           \
    - f. F( x+ l" v
  43.   RST_WRITE_BIT(bit);                    /* RnW Bit */                          \3 I! y% S/ r1 w
  44.   parity += bit;                                                                \
    4 C, C! ?% f8 o  c- {
  45.   bit = request >> 2;                                                           \
    ) M5 A" i# E6 l& a7 j
  46.   RST_WRITE_BIT(bit);                    /* A2 Bit */                           \
    / N, D% ^" s; z; K
  47.   parity += bit;                                                                \
    5 ~6 Q( A1 z, j( m6 y& p
  48.   bit = request >> 3;                                                           \
    8 b* @3 X& Q7 T/ x
  49.   RST_WRITE_BIT(bit);                    /* A3 Bit */                           \
    # C  J+ g9 V, o2 A; e7 c3 M
  50.   parity += bit;                                                                \" b3 f) g7 h# K- ]2 l: r
  51.   RST_WRITE_BIT(parity);                 /* Parity Bit */                       \8 x. i3 R% p" N0 `3 n3 U- L
  52.   RST_WRITE_BIT(0U);                     /* Stop Bit */                         \' ]6 w7 ~8 W9 s4 V& B# O
  53.   RST_WRITE_BIT(1U);                     /* Park Bit */                         \
    , I: d- r! t' C& b$ i2 e( m
  54.   \
    % m7 c% S& }$ d3 ]$ m
  55.   /* Turnaround */                                                              \3 z! M" @5 u' z* y0 V5 \7 Z' V! [
  56.   PIN_SWDIO_OUT_DISABLE();                                                      \' L3 Q: L# _5 \# [! |  `1 O3 b
  57.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \- b1 h& l3 u  j" {1 L
  58.     RST_CLOCK_CYCLE();                                                          \+ Q2 p8 c3 h, p$ c. w5 D3 t; I
  59.   }                                                                             \8 H4 ], Z% h1 N
  60.   \6 T6 \1 M8 j  P9 d2 ?6 e
  61.   /* Acknowledge response */                                                    \! F3 p( t4 N8 o! ?4 \* t
  62.   RST_READ_BIT(bit);                                                            \
    : U% a& Z( n. l( S
  63.   ack  = bit << 0;                                                              \
    " @% J  e' r" Y, a. m0 t: n- x
  64.   RST_READ_BIT(bit);                                                            \
    6 y, a$ C7 D7 }8 k: g2 J
  65.   ack |= bit << 1;                                                              \
      E9 S( Y+ k1 }6 q; M* b5 F- ^
  66.   RST_READ_BIT(bit);                                                            \
    . T$ V& J: F: M# X5 T% G
  67.   ack |= bit << 2;                                                              \3 S& T$ X: G& H
  68.   \& M9 a  y0 @3 H. d1 |
  69.   /* Data transfer */                                                           \& T7 C: c3 j9 S* U/ U4 V: @( r
  70.   /* Turnaround */                                                              \
    ; U2 h. b' A) T) [: b
  71.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \& V# W: M. u9 Z, K3 f
  72.     RST_CLOCK_CYCLE();                                                          \3 P/ d+ g% z% W0 `6 N
  73.   }                                                                             \) m* [2 l1 t& |9 I
  74.   PIN_SWDIO_OUT_ENABLE();                                                       \
    - W/ F4 R( j5 h! m1 K
  75.   /* Write data */                                                              \! C% h, l5 E$ H& E8 T, \4 I
  76.   val = data;                                                                   \
    : p+ E: @: [, P8 x
  77.   parity = 0U;                                                                  \
    3 y2 M# {+ S( m
  78.   for (n = 32U; n; n--) {                                                       \
    " z7 U4 h! \& |& n2 b& P/ B
  79.     RST_WRITE_BIT(val);              /* Write WDATA[0:31] */                    \% B" p; x, x) }6 P# \2 T
  80.     parity += val;                                                              \
    & P" n" Y" t, E. f. q8 b
  81.     val >>= 1;                                                                  \
    ' u. |, b) O6 d  ~& ]/ S9 x
  82.   }                                                                             \
    * c! X# d5 H5 N9 q$ Y. p( o4 b
  83.   RST_WRITE_BIT(parity);             /* Write Parity Bit */                     \+ o) w/ t  k% {: B* d( ]( E+ ~6 ~
  84.   PIN_SWDIO_OUT_ENABLE();                                                       \5 _- B( K2 b! o) p5 X
  85.   PIN_SWDIO_OUT(1U);                                                            \
    8 j! d+ P% Q; F% M/ D+ v6 }1 s
  86.   return ((uint8_t)ack);                                                        \( x# s, @" G5 Q  r: \
  87. }
    . q  a" r% W) n$ @- [
  88. $ U0 d! z* B* K2 ~0 s
  89. void vResetTarget(uint8_t bit)( P. J7 a3 n1 Y- R2 {
  90. {& _' c3 C. K0 u$ g/ B$ J
  91.   uint32_t i;5 q# G- t, x0 I! F
  92.   //soft-reset for Cortex-M3 y0 S. M) n$ B; E0 }9 ?% x
  93.   RST_Transfer(0x00000CC5, 0xE000ED0C); //set AIRCR address0 ?* c  o" x# |) e8 m
  94.   for (i=0; i<100; i++);( c$ s! R1 ^, d6 @& V0 ]% G$ V' g
  95.   RST_Transfer(0x00000CDD, 0x05FA0007); //set RESET data# b% ~, |( u9 k+ m6 c# Z: P
  96.   for (i=0; i<100; i++);+ U; y- e( ~+ _
  97.   RST_Transfer(0x00000CC5, 0xE000ED0C); //repeat  I0 Z5 N1 J% x+ d. q3 F
  98.   for (i=0; i<100; i++);
    ( v2 f3 ?# ]9 G( A4 X. Z7 E/ t0 `( ^  D; p
  99.   RST_Transfer(0x00000CDD, 0x05FA0007);1 _& ?" V: s% o$ V2 r
  100.   
    3 u4 B; ?) O4 o& `4 h' ^$ J/ N
  101.   if (bit & 1)  PIN_nRESET_HIGH();0 S& W  C8 l: q& U& s1 s0 |
  102.   else          PIN_nRESET_LOW();7 L/ i! [0 i/ D; g7 j
  103. }
    : }' P5 C1 s/ n; L
  104. & W1 j/ J- i. q9 k
复制代码
7 R$ K/ y0 b0 q' F$ h

0 P1 N  ~- |, B! N0 k1 A7 [您再看看,是哪里调用了vResetTarget(uint8_t bit)函数。
2 t9 ]9 @5 T/ ?+ W1 y; O* v+ t; x  ^: ^
CDC的改进,我是仿造CubeMX的CDC user 样板文件,UART库函数换成ARM RTE的。 解决了原来的版本CDC操作会导致死机问题。
" I' A- X; ~0 B- l# _, I$ y2 ~/ a3 V8 X, E  ^
USB的底层没有动。我曾经尝试将USB库函数更换成CubeMX的,没有成功。
8 B/ Q  ?; n% C- @, m- Y; ^# @也还发现,如果换成CubeMX的USB库,编译后代码文件会大了很多,很可能导致64KB不够用(我的F103C8只有64KB)。
! C( Z5 D5 Q1 Z5 T4 V$ I9 ~) M' T# h% o3 K% Z, ]3 k
wujique 回答时间:2018-7-25 15:00:55
radio2radio 发表于 2018-7-24 21:21
- K  w" ]: b* Q: |6 R9 e* X! V这个简单,在main.c的最后面一段,我拷贝到这里:
- w1 t8 a3 A" `7 h3 X& u
改好了,调试能复位。. J; v+ X9 [, `! h$ `
MSD(U盘拖放)无法复位。。。
radio2radio 回答时间:2018-7-25 18:59:43
本帖最后由 radio2radio 于 2018-7-25 19:14 编辑 - f7 O: K) {$ A+ H
huangxuejia-292 发表于 2018-7-25 15:00- A& z" I- a3 t" ]7 C
改好了,调试能复位。
" E$ _6 t/ G* Q( k" @# O$ aMSD(U盘拖放)无法复位。。。
! |8 |0 Q) T# Y6 F6 q" W
你看看优盘拖放是不是后台运行的,要等优盘拖放完成之后,插入一个时延(100ms),调用一次vResetTarget,一定行。3 Z+ U+ j9 J9 j
dreamfly239 回答时间:2018-7-26 10:38:40
很受益啊,希望楼主继续分享有价值的资料
shanji 回答时间:2018-7-27 10:01:49
radio2radio 发表于 2018-7-17 17:20! Y- ~0 j$ I  S) t: g+ s
搞定没有?
7 s( r' y: c; F" [: W/ J  m
还没有,不去折腾了
hi201803 回答时间:2018-7-27 17:01:25
radio2radio 发表于 2018-7-24 21:21
% V2 c  U: f1 P+ k: E+ I这个简单,在main.c的最后面一段,我拷贝到这里:

. |3 }; L, F; K+ @5 x4 o看到,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:034 A" m& U+ j' ?
请问楼主是用哪个版本编译的?
* j- R4 ^; K4 V5 d( K/ j. a
Keil 5.xx,留意第60楼,ARM CMSIS要升级到V5.3.0
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版