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

【源代码】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:160 R9 `/ P  z. l- h0 U
看来要换个mdk版本了

# k- J  `. E. J$ s6 S( Y: E! X; Y2 z+ v搞定没有?
hi201803 回答时间:2018-7-22 19:23:07
radio2radio 发表于 2018-7-17 17:20
" R( S) @: b3 {搞定没有?

6 H2 V/ L6 A9 x7 R$ D# i$ b在  MDK 4.xx  里面编译通过了。 5 |7 O; o0 r4 d6 Z
只需要把 缺少的头文件复制过去就可以,大约3个,再改一下include 设置就可.1 b* l3 k2 o$ Z

; Z8 r" y/ R$ H/ o. Q缺少的头文件 在MDK 5.xx 下面目录里.
& s" \. p* S' SC:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Include
8 I6 L3 ^) k8 rC:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Driver\Include
# s" I0 q: U0 y) Y5 R* a7 p+ Q6 W4 E
缺少 的 usb库文件 也复制过去. 具体在哪里就不清楚了.
wujique 回答时间:2018-7-24 09:35:40
楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。
% ?& i& }5 e/ e+ t还有CDC不敢呢?不知道DAPLINK是否有这个BUG。
radio2radio 回答时间:2018-7-24 21:21:44
huangxuejia-292 发表于 2018-7-24 09:35
3 c. Q; ?" ~* |/ \  G' h0 X楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。* c. `; P( r: m! s* \
还有CDC不敢呢?不知道DAPLINK是否有这个BUG。 ...
' t1 H( \- \1 e* k4 k: h
这个简单,在main.c的最后面一段,我拷贝到这里:' D' Y- b8 A" |. {8 ~3 e# E

  1. 1 E; X' S7 J. e; V
  2. //-----Soft reset + Hard reset-------------------------------------------------; _  i6 u* |9 {( l+ S9 S0 {' D5 }
  3. #define PIN_SWCLK_SET PIN_SWCLK_TCK_SET6 D, \2 ~( X+ L
  4. #define PIN_SWCLK_CLR PIN_SWCLK_TCK_CLR
    ) T3 p2 ^% l; E6 X2 t* x

  5. 2 F" J( ?& j5 Y, m. i
  6. #define RST_CLOCK_CYCLE()                \( ^3 D2 H6 ^, x7 }6 ^8 j
  7.   PIN_SWCLK_CLR();                       \
    * f  A* N1 M5 m6 `/ w3 h
  8.   PIN_DELAY();                           \1 ^) `+ h. i9 l
  9.   PIN_SWCLK_SET();                       \% {7 l6 \; H; q9 U# [( }
  10.   PIN_DELAY()  z: Z' a6 i0 t% Y
  11. * }& V4 r0 z& h- B" z$ H1 l3 O0 M
  12. #define RST_WRITE_BIT(bit)               \
    0 b7 V8 Z+ s8 w' Z  \0 H
  13.   PIN_SWDIO_OUT(bit);                    \1 n! A) `: F* i4 N& _0 P6 J0 V
  14.   PIN_SWCLK_CLR();                       \
    ) l6 _# c0 L" `; V  f1 S
  15.   PIN_DELAY();                           \
    1 F' M  [$ \) O! M# \
  16.   PIN_SWCLK_SET();                       \9 D8 P/ e: E: L  c- N
  17.   PIN_DELAY()
    : L7 a4 {5 ~1 `$ x: \  n+ V

  18. $ J( g$ h& I# {8 f
  19. #define RST_READ_BIT(bit)                \6 r) ?5 K3 k  V3 o
  20.   PIN_SWCLK_CLR();                       \
    - s2 Q( c1 l- C6 T
  21.   PIN_DELAY();                           \1 K1 L$ ]% p7 v( T
  22.   bit = PIN_SWDIO_IN();                  \
    . {1 y& ~* ?) O
  23.   PIN_SWCLK_SET();                       \
    6 ~6 g/ S& O9 d1 s
  24.   PIN_DELAY()! p2 K# y8 t  {# i) |( O
  25. , r0 U' P8 _7 I. Z3 I
  26. #define PIN_DELAY() PIN_DELAY_SLOW(DAP_Data.clock_delay)
    7 o3 a# }( g1 J' G$ y
  27. 5 ]8 {0 d- b4 ?9 P- P3 f$ z
  28. uint8_t RST_Transfer(uint32_t request, uint32_t data)
    5 w4 A( c  f) o: X8 M4 l) S
  29. {
    9 T5 l4 v$ P* w# Y/ u4 i& W9 I- K
  30.   uint32_t ack;                                                                 \$ e8 B2 F3 W' u
  31.   uint32_t bit;                                                                 \
    & V$ O& e4 }, `! k/ m
  32.   uint32_t val;                                                                 \
    7 b3 h8 B) c0 D! W- B  m
  33.   uint32_t parity;                                                              \7 ?7 V) ]9 i$ B4 {
  34.   uint32_t n;                                                                   \& n5 g0 m: {' T
  35.   \$ i; X6 p$ |+ g2 N
  36.   /* Packet Request */                                                          \
    ; z  y5 C, g0 I. n) Z7 a3 v3 A
  37.   parity = 0U;                                                                  \
    : f$ [1 s9 q. s$ ~
  38.   RST_WRITE_BIT(1U);                     /* Start Bit */                        \! t# h' a+ N( Y+ Z3 v
  39.   bit = request >> 0;                                                           \# r5 r  W0 S+ r+ X
  40.   RST_WRITE_BIT(bit);                    /* APnDP Bit */                        \
    + H1 @2 ~" x: L; b! S
  41.   parity += bit;                                                                \: v% X. I. r8 l( y- @; _+ W# e
  42.   bit = request >> 1;                                                           \
    ( _" ]0 g% j5 U7 \; ]  n
  43.   RST_WRITE_BIT(bit);                    /* RnW Bit */                          \
    , l6 o* A- v, j! T/ d
  44.   parity += bit;                                                                \- n5 F  v% Z* H6 o! Z. o2 v
  45.   bit = request >> 2;                                                           \( ^% s  T& S" i" y  z& T
  46.   RST_WRITE_BIT(bit);                    /* A2 Bit */                           \
    1 t& S% W0 z4 P* t. x
  47.   parity += bit;                                                                \- Q9 T) Y2 Q4 L( P
  48.   bit = request >> 3;                                                           \
    1 j0 t, w+ {8 L
  49.   RST_WRITE_BIT(bit);                    /* A3 Bit */                           \; a0 |( O3 _% U! r" e0 d
  50.   parity += bit;                                                                \+ B' e0 b- K" Y
  51.   RST_WRITE_BIT(parity);                 /* Parity Bit */                       \  w& v( J5 `5 |9 V2 ?" F% v6 r" @" N
  52.   RST_WRITE_BIT(0U);                     /* Stop Bit */                         \6 \) D. J' R. g; Z* l5 @& a9 i
  53.   RST_WRITE_BIT(1U);                     /* Park Bit */                         \- z( C+ i3 N/ ^7 Y, k& J( H  J7 N
  54.   \- I+ s- H1 E  g3 x
  55.   /* Turnaround */                                                              \
    & |, ]' T4 \! a
  56.   PIN_SWDIO_OUT_DISABLE();                                                      \
    0 T" Q" Z; I6 D% W: [) b. W  @
  57.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \
    8 e+ C$ ]/ b2 s; m6 A8 k3 ^
  58.     RST_CLOCK_CYCLE();                                                          \
    . D. I: `' @! R8 Z
  59.   }                                                                             \
    6 Z$ T  e  T0 t4 Y4 J/ Z! K
  60.   \/ b8 e4 k/ T- x
  61.   /* Acknowledge response */                                                    \
    ; y. w. [8 J" Z" ]" v
  62.   RST_READ_BIT(bit);                                                            \3 F% |5 f" q: U9 l6 d% `
  63.   ack  = bit << 0;                                                              \1 K) ]& M* M+ n8 \# V! l2 C
  64.   RST_READ_BIT(bit);                                                            \
    4 J. i& H0 m  w6 k- Y
  65.   ack |= bit << 1;                                                              \
    1 a; X2 H# Z5 W: D) B9 X3 m
  66.   RST_READ_BIT(bit);                                                            \- S. ]% ~* d" X: i1 t4 |- e
  67.   ack |= bit << 2;                                                              \3 j$ F1 X7 X. L
  68.   \: u7 ?" ^& p2 a& T  t% f
  69.   /* Data transfer */                                                           \
    9 O. K9 W3 j) q# F$ Q8 t
  70.   /* Turnaround */                                                              \
    " _" [7 l+ L' X
  71.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \' D! A+ Y' p: c; f
  72.     RST_CLOCK_CYCLE();                                                          \
    3 Y0 p9 m1 r( w5 n6 G! ]& t3 D
  73.   }                                                                             \
    0 R" m! ~+ D2 ]* R  z1 R; e' s' S
  74.   PIN_SWDIO_OUT_ENABLE();                                                       \, ~$ C' m- g) O$ _% x% V; v5 q
  75.   /* Write data */                                                              \# D( i5 ~. H$ s* I# u9 v
  76.   val = data;                                                                   \" i8 Q+ f7 c! S& M5 E
  77.   parity = 0U;                                                                  \+ T& s& b& c: N( {# k6 R9 r5 U' x
  78.   for (n = 32U; n; n--) {                                                       \" y0 i" |5 L0 X: E' G* E
  79.     RST_WRITE_BIT(val);              /* Write WDATA[0:31] */                    \  Y: [  X' G; X- N
  80.     parity += val;                                                              \
    7 ~9 ], n$ [8 s' t/ ?
  81.     val >>= 1;                                                                  \
    , W  Y  C, D2 q3 X( Q* }, p, R
  82.   }                                                                             \; S: k# i$ a% ~* ?$ a- N" z
  83.   RST_WRITE_BIT(parity);             /* Write Parity Bit */                     \
    + l7 n$ X4 Z7 u) `+ U, k% ~8 N
  84.   PIN_SWDIO_OUT_ENABLE();                                                       \
    7 I  a( t, B: i3 n# U5 i
  85.   PIN_SWDIO_OUT(1U);                                                            \
    ! E! }5 J) k) L2 V8 E. x9 D5 o% w+ v
  86.   return ((uint8_t)ack);                                                        \' x: W" y  J. v' [
  87. }
    . U4 T) w$ w7 ~. w8 O4 @

  88. & }9 K0 H( A7 J5 d
  89. void vResetTarget(uint8_t bit): d) `1 k6 r* v; q" T. @
  90. {
    7 a: v$ O$ @1 t3 L9 X; L" @$ U. A1 Z
  91.   uint32_t i;
    1 g2 T1 s0 K! ]  |6 F
  92.   //soft-reset for Cortex-M: Y' q, |% E  _2 x# M
  93.   RST_Transfer(0x00000CC5, 0xE000ED0C); //set AIRCR address# O. p0 C+ p! E, T; a
  94.   for (i=0; i<100; i++);
    ' {( d6 n' y& B1 N/ O9 K
  95.   RST_Transfer(0x00000CDD, 0x05FA0007); //set RESET data
    $ W/ c, A9 a: q
  96.   for (i=0; i<100; i++);. J, N2 q7 C4 F5 ^
  97.   RST_Transfer(0x00000CC5, 0xE000ED0C); //repeat5 O5 w/ Y7 E9 H  z9 D% b" Y
  98.   for (i=0; i<100; i++);
    # m8 q, S+ a8 j7 x  V. a
  99.   RST_Transfer(0x00000CDD, 0x05FA0007);$ p. }5 k1 g$ p) f0 A
  100.   
    2 p. V5 g+ ?  K- \
  101.   if (bit & 1)  PIN_nRESET_HIGH();
    * w% u" U/ N1 y1 q7 Q2 K0 f
  102.   else          PIN_nRESET_LOW();
    3 K$ A3 H5 \1 a# w( G) C( O
  103. }
    ) n6 P5 X) v4 V+ q1 `- F/ ]" G: j% d

  104. & a: |; W3 o. v6 O3 S- d, c+ o% e3 y
复制代码
# \: q, X$ k/ Q8 ~% J! S
$ M  M2 W% c* d" G4 W5 n+ i
您再看看,是哪里调用了vResetTarget(uint8_t bit)函数。
( e: c3 \8 Q$ Y0 V
  U: D5 U4 h5 `: U8 u* ?0 h6 X! YCDC的改进,我是仿造CubeMX的CDC user 样板文件,UART库函数换成ARM RTE的。 解决了原来的版本CDC操作会导致死机问题。- q; P3 [, B: P3 N$ _. S( Z4 \

8 i2 c3 e, r5 G. A( N  ^* e1 CUSB的底层没有动。我曾经尝试将USB库函数更换成CubeMX的,没有成功。* r5 a6 L! _  j) R' R3 \5 L0 I& W
也还发现,如果换成CubeMX的USB库,编译后代码文件会大了很多,很可能导致64KB不够用(我的F103C8只有64KB)。7 y( z$ a! p* q9 S, j

" u" {$ u6 G7 \+ P% K" w
wujique 回答时间:2018-7-25 15:00:55
radio2radio 发表于 2018-7-24 21:21
6 i( S8 r1 q0 h: q: D, p/ }这个简单,在main.c的最后面一段,我拷贝到这里:

! m! k1 U. t- S改好了,调试能复位。
0 v% K8 q( {4 _5 HMSD(U盘拖放)无法复位。。。
radio2radio 回答时间:2018-7-25 18:59:43
本帖最后由 radio2radio 于 2018-7-25 19:14 编辑 : A3 V1 e9 }2 |& C+ v6 w0 w
huangxuejia-292 发表于 2018-7-25 15:003 [& j" {0 U" ?7 P" i
改好了,调试能复位。, p* h2 Z6 z/ p& e  H
MSD(U盘拖放)无法复位。。。
4 ?( [; P" C+ o& {5 R" g. V8 C+ a9 N
你看看优盘拖放是不是后台运行的,要等优盘拖放完成之后,插入一个时延(100ms),调用一次vResetTarget,一定行。
; N' o, O0 f6 T5 Z9 t
dreamfly239 回答时间:2018-7-26 10:38:40
很受益啊,希望楼主继续分享有价值的资料
shanji 回答时间:2018-7-27 10:01:49
radio2radio 发表于 2018-7-17 17:20
0 L: k% k/ n/ u6 z搞定没有?
0 q! e; K# ?" {
还没有,不去折腾了
hi201803 回答时间:2018-7-27 17:01:25
radio2radio 发表于 2018-7-24 21:21
* [/ U! E4 B( K+ b4 A这个简单,在main.c的最后面一段,我拷贝到这里:
( Q9 C1 O! r0 z& g7 v) i- V4 R
看到,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! \* {; D* H- l) M( j
请问楼主是用哪个版本编译的?

& s: W, K8 L3 ]) e3 k9 _2 G  ]$ j5 SKeil 5.xx,留意第60楼,ARM CMSIS要升级到V5.3.0
radio2radio 回答时间:2018-8-7 14:32:12
本帖最后由 radio2radio 于 2018-10-27 12:29 编辑 0 g+ g, [/ u$ V/ u& X- x( s) D

5 Q; Z2 l) i+ T9 p' ~" q刚刚发现,一楼的原码包,USB文件夹里面,少了一个 “USB_CM3.lib” 的USB库文件。
5 g. X5 r7 W1 U. x+ U我自己的硬盘上面就有这个文件,但是上传github后,这个文件就是没有上传出去,我后加也不会加。
0 F- F3 v2 ?( _7 m( C3 g
% |) ?  M; y) D我不知道为什么,记得第一次上传时,*.hex固件文件就是不给上传,后来我压缩成rar文件才传上去的。
, D4 B6 @0 B/ c; @4 j哪位熟悉github的大侠,告诉我如何上传(.lib/.hex)等文件,谢谢。
8 `9 h1 D; M, C+ @& x" i, B5 d
  C( _  T* |1 O没有了USB_CM3.lib库文件,肯定不行,下面的3个方法都能解决:
% @6 }4 e9 I/ G5 O方法1,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。拷贝到.\USB文件夹。
+ m8 _8 S9 o, D) J( B6 z1 A* h方法2,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。将此文件添加到工程里面。
; A. x. f" w7 r: o- Z! x( W方法3,在其他地方拷贝一个,加到.\USB文件夹。本楼的附件就有一个,方便有需要的。
. G$ C5 m) m- ?+ N; I
) ~6 d# A: O2 @4 r0 h, W0 ^3 P(我的github已经更新,使用方法2)0 h7 o; I, P0 ?( o0 `8 B5 O
0 V! ~, [  v! m# T& }
这个问题已经解决,是我第一次使用github,还不熟悉,经过网友提醒,需要在github的上传过滤文件里面,修改容许.lib/.hex等文件的上传。
* z' E7 X- [0 j1 D7 Q+ |/ a* G7 R1 Q8 m3 J5 W* }. Z

( Y  _1 i8 G. G. O

USB_CM3.rar

下载

63.75 KB, 下载次数: 48

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版