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

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

[复制链接]
radio2radio 发布时间:2018-5-31 15:47
阅读主题, 点击返回1楼
1 收藏 45 评论417 发布时间:2018-5-31 15:47
417个回答
sunonly 回答时间:2018-7-6 19:13:30
感谢分享!下来学习学习
radio2radio 回答时间:2018-7-17 17:20:34
shanji 发表于 2018-7-4 19:16
7 Q# K+ r9 ?/ p4 A5 t) O0 G& g, v看来要换个mdk版本了
3 N8 w/ z$ q/ h3 r& q4 I. f5 K- I
搞定没有?
hi201803 回答时间:2018-7-22 19:23:07
radio2radio 发表于 2018-7-17 17:20' c' |$ i  M) f/ ?
搞定没有?

# E; H' G' l0 i$ \8 d* `: D在  MDK 4.xx  里面编译通过了。 ) @- O2 G7 n8 l  K+ |- R$ n6 W
只需要把 缺少的头文件复制过去就可以,大约3个,再改一下include 设置就可.) B" a! g) [( I
  b( u$ T4 M! A4 D- Q. }
缺少的头文件 在MDK 5.xx 下面目录里.- W% W3 ?1 \: R' Z
C:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Include1 k* J# P% [) q$ R' U0 l
C:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Driver\Include: `7 q( s5 [+ |8 z$ @

' w( _& k/ O; {* [# x5 t6 W3 a缺少 的 usb库文件 也复制过去. 具体在哪里就不清楚了.
wujique 回答时间:2018-7-24 09:35:40
楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。
" R. P7 |2 G- ^0 n- N0 Y- n还有CDC不敢呢?不知道DAPLINK是否有这个BUG。
radio2radio 回答时间:2018-7-24 21:21:44
huangxuejia-292 发表于 2018-7-24 09:35* C/ E' k6 r: n( s9 B5 \4 ]& a
楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。
: g9 Q, U; a" ]$ W( V* e& B还有CDC不敢呢?不知道DAPLINK是否有这个BUG。 ...

6 H% r4 S: l& }7 e6 H3 O" H  D这个简单,在main.c的最后面一段,我拷贝到这里:
( a! I0 X% P$ L+ G
  1. 9 [6 Y6 ^) ?& \8 G$ N' D2 x
  2. //-----Soft reset + Hard reset-------------------------------------------------7 L: z6 `+ y- t# r
  3. #define PIN_SWCLK_SET PIN_SWCLK_TCK_SET
    * F8 U1 ~# Z  H2 s: B6 {5 D
  4. #define PIN_SWCLK_CLR PIN_SWCLK_TCK_CLR# d3 t% P/ _7 `1 {
  5.   F( M3 q) G3 U' x
  6. #define RST_CLOCK_CYCLE()                \
    $ J+ C# |1 |6 S: C. y
  7.   PIN_SWCLK_CLR();                       \5 V- g8 g" \5 i0 j9 Y
  8.   PIN_DELAY();                           \
    , \4 e- n3 C# L7 u* ^
  9.   PIN_SWCLK_SET();                       \
    6 T, C6 b- _5 z
  10.   PIN_DELAY()1 G/ t9 d7 B3 Z
  11. - z( E% V5 p$ A+ P3 t
  12. #define RST_WRITE_BIT(bit)               \  {, i. d% K( f
  13.   PIN_SWDIO_OUT(bit);                    \* F6 ]8 |0 W  ^1 R, b8 L2 Y2 u
  14.   PIN_SWCLK_CLR();                       \" ~8 p, I9 W4 [6 F7 P$ l
  15.   PIN_DELAY();                           \% T  x4 j! q* p. t
  16.   PIN_SWCLK_SET();                       \
    3 g" R" x1 b6 [/ F9 \( o, u) r- ~0 {
  17.   PIN_DELAY()
    2 n$ T3 l% j+ ?& ]

  18. : c4 q4 i8 t! l
  19. #define RST_READ_BIT(bit)                \$ q4 E6 z4 Y9 z: a
  20.   PIN_SWCLK_CLR();                       \
    5 O7 {. N; n" c* o8 R( c, ^) R
  21.   PIN_DELAY();                           \
    8 q* r2 O5 M" a* D7 v% G- ^
  22.   bit = PIN_SWDIO_IN();                  \# a1 |; e3 t; F) ^; V" T
  23.   PIN_SWCLK_SET();                       \
    2 ?4 m, i3 a, _  O6 u
  24.   PIN_DELAY()" u! R; P/ }4 r* S  o# F% L+ u6 K

  25. ! W8 @3 H8 S, X8 t! K& \
  26. #define PIN_DELAY() PIN_DELAY_SLOW(DAP_Data.clock_delay)
    + \" f& h/ D. E8 d" d  ~8 O* \4 G

  27. & j3 m0 G, C* h, P9 c/ n* Q+ \
  28. uint8_t RST_Transfer(uint32_t request, uint32_t data)0 L9 g- G  c/ d
  29. {
    7 q" T, J3 n1 ?9 ~) q1 \( F
  30.   uint32_t ack;                                                                 \
    . Z/ j, p/ `* a1 R
  31.   uint32_t bit;                                                                 \
    0 r7 C: ]1 U& K, y7 _
  32.   uint32_t val;                                                                 \- J/ X  ]4 u" d. {1 o
  33.   uint32_t parity;                                                              \* G, f$ i: I2 k0 k$ a; y/ C
  34.   uint32_t n;                                                                   \9 [# {) i" g0 `7 a  T
  35.   \
    . Y9 P3 X: o4 {$ Z
  36.   /* Packet Request */                                                          \
    ; A! {) W& n7 E* c, \& X1 L- f5 g
  37.   parity = 0U;                                                                  \
    2 V! q0 B1 i- z% i0 {
  38.   RST_WRITE_BIT(1U);                     /* Start Bit */                        \
      v3 j8 G; ~2 P2 ?& f$ G" ]2 y1 c: X
  39.   bit = request >> 0;                                                           \# Y; m% B+ }1 `8 H
  40.   RST_WRITE_BIT(bit);                    /* APnDP Bit */                        \
    2 R1 z  n6 F2 |3 h
  41.   parity += bit;                                                                \
    0 t0 w, ]  x# H; t! y2 O) `8 C$ S
  42.   bit = request >> 1;                                                           \! u. c( y, `. i( `( x1 E& Z& Y
  43.   RST_WRITE_BIT(bit);                    /* RnW Bit */                          \7 O9 G9 j+ Q7 B/ P3 _
  44.   parity += bit;                                                                \' P2 d4 d3 K: D$ C( \
  45.   bit = request >> 2;                                                           \
    . g# a" }( y# B8 E) S; S  w! E
  46.   RST_WRITE_BIT(bit);                    /* A2 Bit */                           \/ a: l! @8 c& k) Z  b
  47.   parity += bit;                                                                \
    / h2 L2 J+ h' P/ o1 ]2 b* H
  48.   bit = request >> 3;                                                           \' Y- f; {. e8 I# y
  49.   RST_WRITE_BIT(bit);                    /* A3 Bit */                           \
    " j6 u/ W  @9 `1 H2 K) {8 ]
  50.   parity += bit;                                                                \3 q% R$ g6 H3 N, _
  51.   RST_WRITE_BIT(parity);                 /* Parity Bit */                       \
    7 s# S6 N5 ?7 X6 ?% U! ^. P( K
  52.   RST_WRITE_BIT(0U);                     /* Stop Bit */                         \9 |, z$ v# a6 `, o
  53.   RST_WRITE_BIT(1U);                     /* Park Bit */                         \: `( j& u: o' R9 W# Y+ f
  54.   \
    ! Y. J( }1 U" n! S& O9 n7 a
  55.   /* Turnaround */                                                              \7 \4 D* I7 d* {1 s7 `* w
  56.   PIN_SWDIO_OUT_DISABLE();                                                      \6 Y4 B( C# J5 L
  57.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \) x: P: N6 r  G( |  B1 G
  58.     RST_CLOCK_CYCLE();                                                          \
    5 n: A+ r7 `3 A
  59.   }                                                                             \# D8 x  }% ^9 y6 |; Y: J( ^8 `4 X
  60.   \
    8 N0 L9 @; o2 i0 @2 ^
  61.   /* Acknowledge response */                                                    \
    ( }7 @3 W! j2 T. _& g7 ]
  62.   RST_READ_BIT(bit);                                                            \0 V  I- ~! I; |/ s
  63.   ack  = bit << 0;                                                              \
    4 B7 S+ y& n3 b
  64.   RST_READ_BIT(bit);                                                            \
    ' @1 ]% i( m) u8 P* V
  65.   ack |= bit << 1;                                                              \- p- z, J! z3 Y% i
  66.   RST_READ_BIT(bit);                                                            \2 `" D- W5 k: Z+ a9 [: F, g9 {+ s
  67.   ack |= bit << 2;                                                              \
    ) @3 D5 F: @' N$ G. n0 Z9 x) L
  68.   \3 _7 n6 @% s2 ?
  69.   /* Data transfer */                                                           \
    ' t) ?& m$ p8 e4 H* W0 J, e1 d
  70.   /* Turnaround */                                                              \& {9 J) o+ i* N+ f
  71.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \
    ! G/ A: T* W) s4 O5 j8 j  f
  72.     RST_CLOCK_CYCLE();                                                          \
    . B1 R7 ], Q) R' U/ l/ m* }
  73.   }                                                                             \
    , h3 ]8 z% X; `" _9 D
  74.   PIN_SWDIO_OUT_ENABLE();                                                       \& N- @) c4 S6 K* Q, B0 T0 H
  75.   /* Write data */                                                              \
    4 E7 `! j. H/ K6 H: r
  76.   val = data;                                                                   \
    " T, M9 J/ G) G" N: Q
  77.   parity = 0U;                                                                  \% b0 h  V6 k: d( g$ z. i/ b8 s
  78.   for (n = 32U; n; n--) {                                                       \
    & U; Q$ i0 W. \6 k  R
  79.     RST_WRITE_BIT(val);              /* Write WDATA[0:31] */                    \
    " V7 v4 M3 |/ O% v% A/ \9 U% M0 c
  80.     parity += val;                                                              \( u! ], h2 h8 S6 O4 S5 I8 ~- ]1 }
  81.     val >>= 1;                                                                  \
    7 D+ S( f/ r5 N# r9 D
  82.   }                                                                             \2 E& R4 `) }/ f* S) h+ L- w6 e
  83.   RST_WRITE_BIT(parity);             /* Write Parity Bit */                     \
    ; ?3 Z+ P$ k" ]2 z: D. q
  84.   PIN_SWDIO_OUT_ENABLE();                                                       \# b0 ^$ x" j# i
  85.   PIN_SWDIO_OUT(1U);                                                            \
    7 K; x8 J+ Y+ n" x+ X
  86.   return ((uint8_t)ack);                                                        \# N/ Q' p; `4 q/ p2 S4 L
  87. }
    7 ?. ^! N9 S2 `' ?: _+ {
  88. 8 P" Q# `! S0 A9 M6 {
  89. void vResetTarget(uint8_t bit)1 v4 m7 H- {6 S4 d4 @
  90. {2 \, }+ J+ c/ }3 t' p
  91.   uint32_t i;8 A' \+ E4 {! s% T! y3 P  [- E
  92.   //soft-reset for Cortex-M
    8 G/ B. F7 t  O- o$ q' a! h
  93.   RST_Transfer(0x00000CC5, 0xE000ED0C); //set AIRCR address1 I, S$ ?& C" }( X5 C
  94.   for (i=0; i<100; i++);
    + v$ \  i9 o- n8 k3 p7 Z7 @
  95.   RST_Transfer(0x00000CDD, 0x05FA0007); //set RESET data
    % G4 }6 i' l" Q# \7 d
  96.   for (i=0; i<100; i++);  d/ N* l% q- G0 Z# C& h
  97.   RST_Transfer(0x00000CC5, 0xE000ED0C); //repeat
    ) u: `+ l* }" L! C. c
  98.   for (i=0; i<100; i++);
    ) @  N, G5 P* F0 l
  99.   RST_Transfer(0x00000CDD, 0x05FA0007);
    0 Z9 X3 k" J/ ~3 l, L
  100.   
    " J; g; ^5 d" s. h& k! o9 x
  101.   if (bit & 1)  PIN_nRESET_HIGH();; {1 N9 g4 `3 M% ^% U6 U7 V, V
  102.   else          PIN_nRESET_LOW();  k2 N; B/ |4 k7 H
  103. }# x- X. G& i; t
  104. : \/ _. f( o8 J* w- c1 a7 h  E
复制代码
% U* x$ z+ Z, k# k# }
: |( P+ y% P1 V" V( M1 s. P/ K
您再看看,是哪里调用了vResetTarget(uint8_t bit)函数。& Y2 i$ @2 b* l4 R, M1 v: P; r
4 f. {3 ~# v! R6 l- @+ A
CDC的改进,我是仿造CubeMX的CDC user 样板文件,UART库函数换成ARM RTE的。 解决了原来的版本CDC操作会导致死机问题。4 B6 T" j0 o, m, [

, I  D  q, c8 E0 pUSB的底层没有动。我曾经尝试将USB库函数更换成CubeMX的,没有成功。; x0 I) f/ O8 Y, y3 N2 t3 t; b
也还发现,如果换成CubeMX的USB库,编译后代码文件会大了很多,很可能导致64KB不够用(我的F103C8只有64KB)。. w. Q8 [% a! ^0 q0 ~9 x
2 \) }9 l4 j( N: l) m' {8 p
wujique 回答时间:2018-7-25 15:00:55
radio2radio 发表于 2018-7-24 21:21
6 J: S& t- j! M: A1 X# B& x* y& G  p这个简单,在main.c的最后面一段,我拷贝到这里:
; Y; R3 ?" j' H! X/ D
改好了,调试能复位。
5 _  ^# O/ z$ y- M) Y# |( r: e7 jMSD(U盘拖放)无法复位。。。
radio2radio 回答时间:2018-7-25 18:59:43
本帖最后由 radio2radio 于 2018-7-25 19:14 编辑 0 K1 `2 S- g5 v! l! D
huangxuejia-292 发表于 2018-7-25 15:001 Z( h0 }" _* ~
改好了,调试能复位。8 T0 P3 f- v9 V5 v% n2 Y$ q5 U1 E; x
MSD(U盘拖放)无法复位。。。
% n! V$ X" e/ h) Q. e
你看看优盘拖放是不是后台运行的,要等优盘拖放完成之后,插入一个时延(100ms),调用一次vResetTarget,一定行。
+ O% ], v% [7 s& L7 z
dreamfly239 回答时间:2018-7-26 10:38:40
很受益啊,希望楼主继续分享有价值的资料
shanji 回答时间:2018-7-27 10:01:49
radio2radio 发表于 2018-7-17 17:201 V3 V; h0 d  c1 I7 i! \; q, K9 [
搞定没有?

# @' Q- B7 i9 a7 o4 k. S) ~. r还没有,不去折腾了
hi201803 回答时间:2018-7-27 17:01:25
radio2radio 发表于 2018-7-24 21:21
! R9 U, ~* T, `( E这个简单,在main.c的最后面一段,我拷贝到这里:

1 s2 L2 M! D( y, d0 n看到,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; t1 n) I* A7 O  {" N; M# A
请问楼主是用哪个版本编译的?
0 Z  }7 ]* _; y% G/ [; _0 h
Keil 5.xx,留意第60楼,ARM CMSIS要升级到V5.3.0
radio2radio 回答时间:2018-8-7 14:32:12
本帖最后由 radio2radio 于 2018-10-27 12:29 编辑
) b; N4 X2 L* z$ x: d5 P% n3 J+ B$ o0 L* N; F7 {0 m6 a
刚刚发现,一楼的原码包,USB文件夹里面,少了一个 “USB_CM3.lib” 的USB库文件。
6 y* g% `: P5 K/ G% z, S: d我自己的硬盘上面就有这个文件,但是上传github后,这个文件就是没有上传出去,我后加也不会加。
" u/ ~" v6 J! y# Z( H9 n  I7 c: b- G3 y* F5 T, q$ V6 T! C/ q+ P8 X
我不知道为什么,记得第一次上传时,*.hex固件文件就是不给上传,后来我压缩成rar文件才传上去的。
/ O  O5 d2 _7 B; n& w3 k: b哪位熟悉github的大侠,告诉我如何上传(.lib/.hex)等文件,谢谢。
7 K( E- U0 Q5 g$ V
, g% A8 p" \8 p* N3 r( E4 u! u没有了USB_CM3.lib库文件,肯定不行,下面的3个方法都能解决:
4 a9 F1 `9 {* k% R- R  O方法1,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。拷贝到.\USB文件夹。5 X7 @. ]$ z6 `" _- h. E7 n
方法2,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。将此文件添加到工程里面。
! C% P8 `9 @0 w0 ^# x2 v, f方法3,在其他地方拷贝一个,加到.\USB文件夹。本楼的附件就有一个,方便有需要的。0 l; z% o, k) P- i2 e# ~
6 Y* L; H5 T. T% d2 v. `: X
(我的github已经更新,使用方法2)) `. y" ^/ @6 t1 e7 `  Z
( w* u! P* v6 Z6 B1 p! k
这个问题已经解决,是我第一次使用github,还不熟悉,经过网友提醒,需要在github的上传过滤文件里面,修改容许.lib/.hex等文件的上传。
* N. S( F- a% q; z9 `( O; r: [  x: P8 Z# s  e5 z& U

0 `- W- l) c/ C/ J4 ~

USB_CM3.rar

下载

63.75 KB, 下载次数: 47

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版