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

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

[复制链接]
radio2radio 发布时间:2018-5-31 15:47
赞 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
% Z3 u/ M- c! _看来要换个mdk版本了

. q0 y2 w3 M7 X$ g. y: w; x9 P搞定没有?
hi201803 回答时间:2018-7-22 19:23:07
radio2radio 发表于 2018-7-17 17:20
9 J# @% d% x9 Q  M: F# ]. h* G搞定没有?
) e+ C, R7 {6 d" f/ ^8 P9 K4 n
在  MDK 4.xx  里面编译通过了。 7 K. i- h; I) b7 I6 D& R
只需要把 缺少的头文件复制过去就可以,大约3个,再改一下include 设置就可.1 v. Z% U/ D% b% {; c0 x

  k$ Y" R# @9 |% k缺少的头文件 在MDK 5.xx 下面目录里.
8 C) z7 p$ A* _0 I* s+ WC:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Include
. o: q: v  t; g1 s4 ^! CC:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Driver\Include$ U: O7 `/ X' _5 m! q" g" i
# J" _0 u( {" k+ a
缺少 的 usb库文件 也复制过去. 具体在哪里就不清楚了.
wujique 回答时间:2018-7-24 09:35:40
楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。
& [8 `; ]3 {2 Q  o还有CDC不敢呢?不知道DAPLINK是否有这个BUG。
radio2radio 回答时间:2018-7-24 21:21:44
huangxuejia-292 发表于 2018-7-24 09:35) c  r8 a# d& H. i7 A
楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。* q1 Q$ p7 F1 j( h7 H* ?
还有CDC不敢呢?不知道DAPLINK是否有这个BUG。 ...
/ Q4 x$ [8 f/ `
这个简单,在main.c的最后面一段,我拷贝到这里:, ^9 n) ?+ H! K9 e- C9 v  N
  1. & p- P* ~2 W9 l) o
  2. //-----Soft reset + Hard reset-------------------------------------------------5 [3 Y) U0 J6 `8 \3 f% U6 [+ B
  3. #define PIN_SWCLK_SET PIN_SWCLK_TCK_SET2 {8 b9 y$ ^$ s0 I
  4. #define PIN_SWCLK_CLR PIN_SWCLK_TCK_CLR
    : N/ Q$ K7 `0 e1 `7 M8 x: E
  5. 1 M* w4 c8 Q4 r5 E
  6. #define RST_CLOCK_CYCLE()                \
    6 ?- E4 q8 B( B1 s
  7.   PIN_SWCLK_CLR();                       \2 D( w# c; Z5 i1 M/ ^+ B
  8.   PIN_DELAY();                           \4 X5 S: Y; d* M- D
  9.   PIN_SWCLK_SET();                       \, D9 Z2 ~. m- U
  10.   PIN_DELAY()# T6 M+ k7 V7 M7 k) ]# I& r% T2 w& R& r

  11. ! Y  q; x8 \$ L% O
  12. #define RST_WRITE_BIT(bit)               \
    ; h( y6 j9 e# F: K; E
  13.   PIN_SWDIO_OUT(bit);                    \
    ; v3 J! F7 m( v/ ^6 ^
  14.   PIN_SWCLK_CLR();                       \* A5 m( b+ Q# Q4 M7 Y! }
  15.   PIN_DELAY();                           \/ X6 `# Q/ P+ W$ z- i" Y0 ]
  16.   PIN_SWCLK_SET();                       \; D# Z6 {0 W( k% e5 w7 \
  17.   PIN_DELAY()) a9 ~# ~+ v6 ^( X* f& ~- t! i

  18. : T6 }2 }2 P# M) F: V- h
  19. #define RST_READ_BIT(bit)                \
    0 |. j$ k7 U& n& ?8 ^
  20.   PIN_SWCLK_CLR();                       \5 V' [# T* Y, e
  21.   PIN_DELAY();                           \
    ) c  f+ s4 ]0 ~! E
  22.   bit = PIN_SWDIO_IN();                  \
      @! G0 i" Y" ?6 f1 c! |
  23.   PIN_SWCLK_SET();                       \
    4 T% a% D  U. L3 O
  24.   PIN_DELAY()
    * K2 f3 L% |" t- ^" t8 A

  25. % _/ Z& ^6 Y+ f
  26. #define PIN_DELAY() PIN_DELAY_SLOW(DAP_Data.clock_delay); x1 J' s( f; F- p" N/ u' T

  27. 6 S/ _. J. A4 l3 @) m
  28. uint8_t RST_Transfer(uint32_t request, uint32_t data)
    & @; z* [, Z+ K7 k+ {
  29. {
    / Z, i; Q% `! C+ _' W
  30.   uint32_t ack;                                                                 \: y' N! L7 n4 I; p- p, r" Z
  31.   uint32_t bit;                                                                 \( {# ^  V' G: }/ a
  32.   uint32_t val;                                                                 \
    ) n) ^0 x. P+ z: j
  33.   uint32_t parity;                                                              \! K) z% n, ~, v; i+ r
  34.   uint32_t n;                                                                   \
    6 _  l$ u) a$ X' V. X5 B
  35.   \7 L+ |1 K5 s, E6 R/ s0 K& R
  36.   /* Packet Request */                                                          \
    , J, b: k% s9 f- l
  37.   parity = 0U;                                                                  \  M& E. P( q& }; H4 w  E* \! g
  38.   RST_WRITE_BIT(1U);                     /* Start Bit */                        \: t3 I2 e+ o: S. j5 u5 W5 k' Q
  39.   bit = request >> 0;                                                           \# [3 T+ v5 G" M, }9 H
  40.   RST_WRITE_BIT(bit);                    /* APnDP Bit */                        \. W3 A+ _8 ]* s; i8 V! e* ?2 z: {
  41.   parity += bit;                                                                \' Q/ l. a; X8 @' {) o7 g; H
  42.   bit = request >> 1;                                                           \+ K1 j9 `$ q4 E+ L$ ~
  43.   RST_WRITE_BIT(bit);                    /* RnW Bit */                          \- a& N( A' W* j5 Y
  44.   parity += bit;                                                                \& l8 Z  w2 x* r# n% Z& N
  45.   bit = request >> 2;                                                           \, G' @9 X* g. X; V
  46.   RST_WRITE_BIT(bit);                    /* A2 Bit */                           \" z+ y+ G+ q; E! I) x$ }
  47.   parity += bit;                                                                \
    ' v  y5 M' }! t
  48.   bit = request >> 3;                                                           \: K. E% D, s3 e4 o4 q, K. \
  49.   RST_WRITE_BIT(bit);                    /* A3 Bit */                           \
    + L4 s9 a, F7 m1 I
  50.   parity += bit;                                                                \- s$ U6 K9 o, W+ l# J1 p: S, B/ E& H
  51.   RST_WRITE_BIT(parity);                 /* Parity Bit */                       \
    ' w+ p( B! @! b; f' M
  52.   RST_WRITE_BIT(0U);                     /* Stop Bit */                         \
    0 J, [6 t7 V3 B( ~- ~. M0 E" f
  53.   RST_WRITE_BIT(1U);                     /* Park Bit */                         \4 F- \7 w8 E6 S$ e- n* l4 [- Q4 i$ T( ?
  54.   \
    + n" N, `5 K" O
  55.   /* Turnaround */                                                              \
    : y/ ~, v+ i8 E$ q+ t. e* n
  56.   PIN_SWDIO_OUT_DISABLE();                                                      \- x) K! ~4 [8 t1 V0 J% ^
  57.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \
    * l/ c1 O  c5 ?  N! j2 M
  58.     RST_CLOCK_CYCLE();                                                          \  O. D; M2 n  K5 h, z( c8 J
  59.   }                                                                             \4 v, n6 w  q% u' H5 P
  60.   \
    4 _3 u7 F, R6 A, n! }  ~) h
  61.   /* Acknowledge response */                                                    \
    ( R; f" L/ {# o, I/ Q
  62.   RST_READ_BIT(bit);                                                            \* I' _  S) a1 ~  g. ~
  63.   ack  = bit << 0;                                                              \
    8 S" }) \; d# |5 N% n
  64.   RST_READ_BIT(bit);                                                            \' r) P" G' m/ B. w9 |# P4 M
  65.   ack |= bit << 1;                                                              \+ o8 k1 X$ f9 ]- a6 k
  66.   RST_READ_BIT(bit);                                                            \0 s/ e9 i) l/ j' }! S5 m7 _! a
  67.   ack |= bit << 2;                                                              \* f" }9 P  u, V$ E9 b) S
  68.   \
    , ?( `0 _' c8 x  L
  69.   /* Data transfer */                                                           \
    % H- `5 ]8 P/ q) z9 k
  70.   /* Turnaround */                                                              \# ]; o0 ]5 H0 n$ V+ @( x
  71.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \
    ) Z1 \& j! N; a# d0 a2 e
  72.     RST_CLOCK_CYCLE();                                                          \
      l, j6 L* A( k6 \
  73.   }                                                                             \/ T6 j* z: C/ E
  74.   PIN_SWDIO_OUT_ENABLE();                                                       \
    * z" R2 y& d8 p3 ~6 G) w
  75.   /* Write data */                                                              \! D' C# |8 h6 @$ u- U% u  K* [6 Q
  76.   val = data;                                                                   \
    ! C$ c( L. }9 L  ~+ l
  77.   parity = 0U;                                                                  \
    ' P. H$ B* D% _
  78.   for (n = 32U; n; n--) {                                                       \
    ) a. a3 }6 q. s, t
  79.     RST_WRITE_BIT(val);              /* Write WDATA[0:31] */                    \8 t2 L- H+ R$ J3 t7 H
  80.     parity += val;                                                              \+ V$ g" r0 l$ x! L* k- M
  81.     val >>= 1;                                                                  \
    ( g& |$ j! W# i" s% c" Z
  82.   }                                                                             \' Y3 f" @, v$ W6 X9 ]7 M
  83.   RST_WRITE_BIT(parity);             /* Write Parity Bit */                     \3 C' H; t. _/ l! V! ~7 {
  84.   PIN_SWDIO_OUT_ENABLE();                                                       \" k5 y' _$ I; W6 u5 }- m
  85.   PIN_SWDIO_OUT(1U);                                                            \+ ?0 [2 F9 Y/ S) u
  86.   return ((uint8_t)ack);                                                        \; _0 G3 ~' d: h; e7 B( Z
  87. }
    " v( c4 O& N8 Z% V

  88. 5 ]: o, Y8 h" f/ V# i; k
  89. void vResetTarget(uint8_t bit)
    : K- a3 }4 {" h5 o
  90. {
    3 J+ x3 t6 s$ T& s$ S$ R
  91.   uint32_t i;
    8 ?8 D8 i& y  x1 }
  92.   //soft-reset for Cortex-M
    + Q$ N1 g* \4 i7 q( i$ h4 f( Q
  93.   RST_Transfer(0x00000CC5, 0xE000ED0C); //set AIRCR address7 h3 B) A8 B. I* C# I" K
  94.   for (i=0; i<100; i++);
      [' z% ], i- s" c
  95.   RST_Transfer(0x00000CDD, 0x05FA0007); //set RESET data
    , ~5 \8 N2 _0 n
  96.   for (i=0; i<100; i++);9 |) A; c% s! m6 r) W
  97.   RST_Transfer(0x00000CC5, 0xE000ED0C); //repeat- h: I" D; N1 p6 F5 i0 ]
  98.   for (i=0; i<100; i++);+ R& ?$ P$ Y( d& v  K7 W4 U
  99.   RST_Transfer(0x00000CDD, 0x05FA0007);6 J1 O" |3 |1 R: V
  100.   3 J" b: z4 g( A) O/ Q
  101.   if (bit & 1)  PIN_nRESET_HIGH();
    5 \5 s/ b9 x1 b
  102.   else          PIN_nRESET_LOW();1 P0 @+ U8 u  ~
  103. }
    0 p0 @. [. J$ k$ E5 ~- L2 z
  104. , Q( |$ K9 h+ ^* m, y& X5 X1 H# b
复制代码
0 ~, H2 Y' X! I% W9 O2 B
" X! C' Z) O8 ^9 O  t
您再看看,是哪里调用了vResetTarget(uint8_t bit)函数。* v$ ^5 Z" V! n+ v

6 S# z) k9 k7 B. SCDC的改进,我是仿造CubeMX的CDC user 样板文件,UART库函数换成ARM RTE的。 解决了原来的版本CDC操作会导致死机问题。
: L* {4 o( q, g' e- U" F1 F$ J
7 w% r$ P7 F5 T9 Z8 f5 c# ~0 gUSB的底层没有动。我曾经尝试将USB库函数更换成CubeMX的,没有成功。
% i; q& B$ Y! o; a( @3 H也还发现,如果换成CubeMX的USB库,编译后代码文件会大了很多,很可能导致64KB不够用(我的F103C8只有64KB)。$ {" N9 r' j8 k. _

3 A. d( F  e# P( o" ?* f1 l  H
wujique 回答时间:2018-7-25 15:00:55
radio2radio 发表于 2018-7-24 21:21; H4 Z  M5 Y: l; w6 Q
这个简单,在main.c的最后面一段,我拷贝到这里:

( b- V3 ~4 x; H+ t5 r* W, m改好了,调试能复位。
& ]8 h. m8 q2 lMSD(U盘拖放)无法复位。。。
radio2radio 回答时间:2018-7-25 18:59:43
本帖最后由 radio2radio 于 2018-7-25 19:14 编辑
& Z' R% g% |( q: R2 `" R: S4 c: t* O
huangxuejia-292 发表于 2018-7-25 15:00: W; o9 Q7 x* G) R9 }
改好了,调试能复位。
3 M( C, n4 ]1 f" D0 ^) G6 P2 v  UMSD(U盘拖放)无法复位。。。
' j/ L& Q- i- C6 g" q  T
你看看优盘拖放是不是后台运行的,要等优盘拖放完成之后,插入一个时延(100ms),调用一次vResetTarget,一定行。
/ ]) b8 B) P% c: e" ^: `% I
dreamfly239 回答时间:2018-7-26 10:38:40
很受益啊,希望楼主继续分享有价值的资料
shanji 回答时间:2018-7-27 10:01:49
radio2radio 发表于 2018-7-17 17:20
2 }' K" Y" k4 _/ n6 H/ ~搞定没有?

/ u/ Q5 q( x7 h- L还没有,不去折腾了
hi201803 回答时间:2018-7-27 17:01:25
radio2radio 发表于 2018-7-24 21:21" t, z7 V1 m9 p2 W
这个简单,在main.c的最后面一段,我拷贝到这里:
; n5 O5 P+ K; C* u' j- g9 ?
看到,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
4 F. E$ x0 c; p# Y* L3 O6 U请问楼主是用哪个版本编译的?

% z: y: z& S7 @  E3 W0 w2 J0 HKeil 5.xx,留意第60楼,ARM CMSIS要升级到V5.3.0
radio2radio 回答时间:2018-8-7 14:32:12
本帖最后由 radio2radio 于 2018-10-27 12:29 编辑
0 j* }1 U9 ^' p" |7 Z
3 E2 d; D' N. _. ]刚刚发现,一楼的原码包,USB文件夹里面,少了一个 “USB_CM3.lib” 的USB库文件。, _7 c0 _; \4 W0 ]' H  X
我自己的硬盘上面就有这个文件,但是上传github后,这个文件就是没有上传出去,我后加也不会加。0 M( y9 b6 o) U1 |) A) W

- F6 v6 o# c# n+ b  d0 O+ j% j我不知道为什么,记得第一次上传时,*.hex固件文件就是不给上传,后来我压缩成rar文件才传上去的。
3 }! w- H4 H* ~5 _7 Z, M哪位熟悉github的大侠,告诉我如何上传(.lib/.hex)等文件,谢谢。+ F8 u0 C! D6 T6 G* p

3 l  A! j1 t5 u9 W5 O3 I* g1 F8 C7 a没有了USB_CM3.lib库文件,肯定不行,下面的3个方法都能解决:) f, m* G' \5 N" F& X0 ^
方法1,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。拷贝到.\USB文件夹。9 i* ~$ p- Z+ L6 d" r7 O" g
方法2,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。将此文件添加到工程里面。
5 P' u: d1 m; y+ N% X9 X方法3,在其他地方拷贝一个,加到.\USB文件夹。本楼的附件就有一个,方便有需要的。
! g  ?; j& P- _: \0 p+ i( O' G# ]- \; {" X: R/ p
(我的github已经更新,使用方法2)
, S/ m/ s' S+ G4 {( E5 ?6 X% _  _3 L$ j4 i; }& @; @. T
这个问题已经解决,是我第一次使用github,还不熟悉,经过网友提醒,需要在github的上传过滤文件里面,修改容许.lib/.hex等文件的上传。; t% s$ A* E! |# p, D

2 V( z5 |& Z2 S/ B
3 T& S, t7 N, j9 S0 l

USB_CM3.rar

下载

63.75 KB, 下载次数: 50

所属标签

相似技术帖

官网相关资源

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