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

【源代码】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
: J: ]# w& @1 N6 r0 G$ [! y3 `看来要换个mdk版本了

+ _% p, E. o/ m' ~1 F1 ]! Q% O" `搞定没有?
hi201803 回答时间:2018-7-22 19:23:07
radio2radio 发表于 2018-7-17 17:20% B4 N' y9 o  _1 q: ?6 v6 p4 T
搞定没有?

5 |& C1 J' A3 x* E在  MDK 4.xx  里面编译通过了。
- a# x) G5 V( A+ g" k5 D只需要把 缺少的头文件复制过去就可以,大约3个,再改一下include 设置就可.
6 o, Z2 w" I$ e1 b3 J2 @' E7 c; W0 ~- J9 i5 M0 U  G. _
缺少的头文件 在MDK 5.xx 下面目录里.
1 A3 l( K* u  n# s; wC:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Include5 y+ ~1 B* m. e; ^' i. ~! Y- P
C:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Driver\Include
9 u1 Z; ?3 F7 ?6 C, x. X9 L
) C9 Y! w' h: U  G5 q! z缺少 的 usb库文件 也复制过去. 具体在哪里就不清楚了.
wujique 回答时间:2018-7-24 09:35:40
楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。1 J0 e' ]9 ~1 v" I* `  V' l
还有CDC不敢呢?不知道DAPLINK是否有这个BUG。
radio2radio 回答时间:2018-7-24 21:21:44
huangxuejia-292 发表于 2018-7-24 09:35
) J8 U: M% H$ f: p- ?: {楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。2 u5 y$ V1 D3 [" q- m% l
还有CDC不敢呢?不知道DAPLINK是否有这个BUG。 ...
# v/ R& n* g. v
这个简单,在main.c的最后面一段,我拷贝到这里:
7 W8 @  z/ z: I+ B
  1. % W9 c* m$ b7 Q% ^  z  ~
  2. //-----Soft reset + Hard reset-------------------------------------------------/ i$ j; }  R2 v3 P: h
  3. #define PIN_SWCLK_SET PIN_SWCLK_TCK_SET/ m3 I; `+ f1 \' U& h, I) U
  4. #define PIN_SWCLK_CLR PIN_SWCLK_TCK_CLR1 t" r& w: A- n! ~
  5. ! y- d7 I: Z# `3 |$ G
  6. #define RST_CLOCK_CYCLE()                \
    6 |; v8 ~2 Q8 T2 Y0 x3 w4 F& R
  7.   PIN_SWCLK_CLR();                       \
    , R7 \7 N$ O, ^+ {2 ~
  8.   PIN_DELAY();                           \& `( X# \& i) d2 k
  9.   PIN_SWCLK_SET();                       \
    / ^; w" m& m+ j- i
  10.   PIN_DELAY()4 i1 Y; h8 ]* @3 H

  11. * q1 j. A6 n, {3 H5 t9 T% I
  12. #define RST_WRITE_BIT(bit)               \  z4 E+ s. h- V. V7 ?; ?" l- P" K; C
  13.   PIN_SWDIO_OUT(bit);                    \  W8 W3 Y( @, e  B, K! l; ?: \
  14.   PIN_SWCLK_CLR();                       \/ ]% B: X  r5 g1 {- j
  15.   PIN_DELAY();                           \6 F, H8 c; M. Z( r1 E7 w
  16.   PIN_SWCLK_SET();                       \
    : x' \2 ^+ H( V7 w9 v3 ^
  17.   PIN_DELAY()
    * e% c/ [7 @9 J9 \/ O

  18. & X. c7 l5 W9 }4 c" J; o
  19. #define RST_READ_BIT(bit)                \
    6 h# c' B* }! `& |$ E
  20.   PIN_SWCLK_CLR();                       \1 v0 R' G4 ^1 L! P  c
  21.   PIN_DELAY();                           \8 @& X: m. U0 v9 \
  22.   bit = PIN_SWDIO_IN();                  \# P# l! X2 P2 N  b/ J
  23.   PIN_SWCLK_SET();                       \+ [. z) \' [/ q0 R" u
  24.   PIN_DELAY()( y. ~" i6 C& X' R) g, c

  25. % W& T( H4 z1 \: s: o
  26. #define PIN_DELAY() PIN_DELAY_SLOW(DAP_Data.clock_delay)- @  c/ Z1 i8 p/ B% ^; ]

  27. ' W7 C7 E. J8 F, k
  28. uint8_t RST_Transfer(uint32_t request, uint32_t data)
    4 i* d% n5 Z( \' ~* ?) r- x
  29. {
    8 p7 N! j% M3 \" N+ {4 d* L2 u; b
  30.   uint32_t ack;                                                                 \
      F/ F" B" \8 C. N- X5 a
  31.   uint32_t bit;                                                                 \+ Y& r1 Z/ C7 v2 b& s0 P
  32.   uint32_t val;                                                                 \
    4 F$ u. o# ^! w3 d+ {) P
  33.   uint32_t parity;                                                              \
    % w/ ^4 ^4 Q7 S- q( A' `
  34.   uint32_t n;                                                                   \- t: @6 d  E' a5 N. b
  35.   \
    . O: W6 b/ ]. B" A+ M9 d7 z
  36.   /* Packet Request */                                                          \
    9 b6 s, u9 ?) |4 ]6 U/ I: H
  37.   parity = 0U;                                                                  \, s+ M7 t7 t" B9 i4 F! p9 V, ~# a9 h
  38.   RST_WRITE_BIT(1U);                     /* Start Bit */                        \
    ' q  t3 V9 |5 E1 `  w, Y
  39.   bit = request >> 0;                                                           \( ~) q: Y- x7 T2 G2 l3 O
  40.   RST_WRITE_BIT(bit);                    /* APnDP Bit */                        \6 ]4 x; X: A$ \* s/ o5 ?; X# w9 e# m
  41.   parity += bit;                                                                \
    - x% G" N% N5 ?
  42.   bit = request >> 1;                                                           \5 _  S2 {& Y% G+ F7 U& l. e# x4 g& T
  43.   RST_WRITE_BIT(bit);                    /* RnW Bit */                          \5 ^3 v/ _  ~) O2 ~, K
  44.   parity += bit;                                                                \& @( R! E- i# V8 u' x5 R* K
  45.   bit = request >> 2;                                                           \/ m" ]& {# B6 T9 y1 V0 ^
  46.   RST_WRITE_BIT(bit);                    /* A2 Bit */                           \% B* Z$ J4 [% p8 B1 l- h
  47.   parity += bit;                                                                \
    5 c' l( T; j7 X3 o# B/ F
  48.   bit = request >> 3;                                                           \
    - t9 ^9 [/ g) F
  49.   RST_WRITE_BIT(bit);                    /* A3 Bit */                           \  ^  s- b# C+ R% P7 {
  50.   parity += bit;                                                                \
    7 X# b0 ]' M( c3 o0 ^
  51.   RST_WRITE_BIT(parity);                 /* Parity Bit */                       \4 Q. u; ~- d1 ^: ~7 ]# H3 v7 k
  52.   RST_WRITE_BIT(0U);                     /* Stop Bit */                         \" v' y7 {0 F7 ]( ^
  53.   RST_WRITE_BIT(1U);                     /* Park Bit */                         \
    2 K5 j# Z/ D' v" Q" A+ h+ T
  54.   \
    7 p* g1 r5 G0 ^2 w+ M
  55.   /* Turnaround */                                                              \. V2 \% m! A% Z6 G4 Q7 J+ m# d
  56.   PIN_SWDIO_OUT_DISABLE();                                                      \3 i5 N# b  `9 `5 u
  57.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \
    ! t8 L6 z4 H5 [9 h  U( X6 Y
  58.     RST_CLOCK_CYCLE();                                                          \$ Y) m. k, m. a, q5 p
  59.   }                                                                             \1 l) B, P6 Q" d$ @; [3 W% m" N7 R
  60.   \
    0 p- w/ S6 o' P# ~. X2 V' k/ _. E& o
  61.   /* Acknowledge response */                                                    \2 w5 C- Y) x5 @
  62.   RST_READ_BIT(bit);                                                            \
    / Z# k2 x/ |) N: H- \+ i: f
  63.   ack  = bit << 0;                                                              \- Q% F# y9 @4 }9 F9 |7 T
  64.   RST_READ_BIT(bit);                                                            \9 c4 r: N0 j! ~, v# u/ l. I
  65.   ack |= bit << 1;                                                              \3 P' Y9 }+ r, a; |
  66.   RST_READ_BIT(bit);                                                            \
    , S; w( r" S# }1 s2 j
  67.   ack |= bit << 2;                                                              \
    $ m# [4 g, H1 z1 V; o  p
  68.   \' T0 ^7 `- Z8 u# _! {
  69.   /* Data transfer */                                                           \  O) q  A$ v6 N) N+ M+ J- V
  70.   /* Turnaround */                                                              \
    1 Y, t# N0 r# o7 h
  71.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \
    * g! f' |; _( y! i
  72.     RST_CLOCK_CYCLE();                                                          \
    . ^, u6 V# G6 P* Z& M
  73.   }                                                                             \
    ( q, s% e, \' k; d
  74.   PIN_SWDIO_OUT_ENABLE();                                                       \7 ~& V! X1 H& d. s1 ?
  75.   /* Write data */                                                              \
    / x8 p" C" S) n5 ~1 x! I
  76.   val = data;                                                                   \( t  ?8 m; h2 c7 S
  77.   parity = 0U;                                                                  \& s' c9 x, j4 z4 D# i5 s- D. p
  78.   for (n = 32U; n; n--) {                                                       \! r6 |" Z  ~) F: C  ^+ O
  79.     RST_WRITE_BIT(val);              /* Write WDATA[0:31] */                    \0 ~6 K* W0 W, _( u- L
  80.     parity += val;                                                              \
    ! D4 w! I; S1 |9 R$ F0 R1 c, o
  81.     val >>= 1;                                                                  \
    " U8 f- b1 D* S0 J3 u
  82.   }                                                                             \
    6 V5 I: L. Q0 \& a
  83.   RST_WRITE_BIT(parity);             /* Write Parity Bit */                     \2 N( D- f' d) h. Q1 J! d
  84.   PIN_SWDIO_OUT_ENABLE();                                                       \
    8 l! V! C: z) t" d$ e/ W: b
  85.   PIN_SWDIO_OUT(1U);                                                            \
    ' K+ K2 r# p) P: _& }% u
  86.   return ((uint8_t)ack);                                                        \
    ( s3 k! B0 J5 t) r9 ?4 ]0 j+ Y( `
  87. }
    ) F4 f! k0 ^5 Q9 `  g

  88. : d4 \( d( \0 z$ \3 g
  89. void vResetTarget(uint8_t bit)" K# d6 f5 ~, U4 F0 t
  90. {
    ) L% D) W7 p% Q4 ?3 F
  91.   uint32_t i;
    9 f! u3 G# j6 U8 U
  92.   //soft-reset for Cortex-M+ A* u. T+ h) A# }* A* c( e- j8 H
  93.   RST_Transfer(0x00000CC5, 0xE000ED0C); //set AIRCR address/ G5 B2 \1 C9 I  x  W9 V. }
  94.   for (i=0; i<100; i++);
    . n" H* A. w0 q8 I- e1 {
  95.   RST_Transfer(0x00000CDD, 0x05FA0007); //set RESET data5 y3 J0 l/ X+ X. H( R9 U  {1 i
  96.   for (i=0; i<100; i++);& G1 q' ]' ?- M- {
  97.   RST_Transfer(0x00000CC5, 0xE000ED0C); //repeat+ X7 X, y, |' W3 b" k- E% J: [
  98.   for (i=0; i<100; i++);
    / L3 F( }% d( T) _3 h/ `
  99.   RST_Transfer(0x00000CDD, 0x05FA0007);- c" p& a/ Z2 G+ f! I
  100.   
    6 D& e! I; }  J
  101.   if (bit & 1)  PIN_nRESET_HIGH();
    & N; M3 f% r  _/ x: s4 K# U4 _
  102.   else          PIN_nRESET_LOW();" t# ]! M- [# s- Y5 h; v# u- N
  103. }
    $ x/ Z5 f9 s0 I9 E& l: M; |. ]

  104. 2 d+ A& W* e# ~& p) w
复制代码

6 [( F0 V5 J( `9 [  I5 m" j% @0 _+ K9 r) c1 |, K3 T2 R
您再看看,是哪里调用了vResetTarget(uint8_t bit)函数。! k8 }% R3 p/ F( C0 d+ j
( ^( I  R  G% s* x0 Q9 K/ g4 a
CDC的改进,我是仿造CubeMX的CDC user 样板文件,UART库函数换成ARM RTE的。 解决了原来的版本CDC操作会导致死机问题。
8 U: d& o' r2 q3 J; V2 D, F0 Y; t4 }6 H3 r1 G
USB的底层没有动。我曾经尝试将USB库函数更换成CubeMX的,没有成功。$ M8 [- @8 e8 a. L3 ?
也还发现,如果换成CubeMX的USB库,编译后代码文件会大了很多,很可能导致64KB不够用(我的F103C8只有64KB)。
3 F& X, m8 w+ a. b/ X, X/ u7 d2 L! M0 r" l; p: w6 `# W
wujique 回答时间:2018-7-25 15:00:55
radio2radio 发表于 2018-7-24 21:21
0 A1 S1 D& K9 f' j, c9 I* o3 U这个简单,在main.c的最后面一段,我拷贝到这里:
$ q& e- g7 f  |1 ]
改好了,调试能复位。) i; S' G7 J, N# Y+ X) W
MSD(U盘拖放)无法复位。。。
radio2radio 回答时间:2018-7-25 18:59:43
本帖最后由 radio2radio 于 2018-7-25 19:14 编辑 - |) k; ^4 g' r/ K: x% {0 Y6 I
huangxuejia-292 发表于 2018-7-25 15:00
: M& ]+ r4 n- Y& W9 J0 t改好了,调试能复位。
, v8 Q7 B9 ~+ TMSD(U盘拖放)无法复位。。。
+ E1 u6 h+ _' T' z1 P
你看看优盘拖放是不是后台运行的,要等优盘拖放完成之后,插入一个时延(100ms),调用一次vResetTarget,一定行。' }' `7 t+ ]' U0 x- D; H& V6 Y$ {; N
dreamfly239 回答时间:2018-7-26 10:38:40
很受益啊,希望楼主继续分享有价值的资料
shanji 回答时间:2018-7-27 10:01:49
radio2radio 发表于 2018-7-17 17:20
  K6 ~9 v$ V* Q9 d6 V1 L1 I搞定没有?
$ V, E0 E$ a3 v' E
还没有,不去折腾了
hi201803 回答时间:2018-7-27 17:01:25
radio2radio 发表于 2018-7-24 21:21" i1 ~7 n3 S- M4 G
这个简单,在main.c的最后面一段,我拷贝到这里:

$ S0 P6 n- J  m; i: O0 D看到,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( i! f8 l  D# ?5 D/ x
请问楼主是用哪个版本编译的?
$ a- y$ `% B) ~$ m& f
Keil 5.xx,留意第60楼,ARM CMSIS要升级到V5.3.0
radio2radio 回答时间:2018-8-7 14:32:12
本帖最后由 radio2radio 于 2018-10-27 12:29 编辑 6 b- |0 g) e$ Y4 }

/ G$ i0 d' V8 P3 q7 ^' G刚刚发现,一楼的原码包,USB文件夹里面,少了一个 “USB_CM3.lib” 的USB库文件。
2 o0 m( z) A( ^% Y5 ^我自己的硬盘上面就有这个文件,但是上传github后,这个文件就是没有上传出去,我后加也不会加。" f8 F$ ?, ]( V* b+ b$ n

; U$ T0 t6 O+ e- f2 o我不知道为什么,记得第一次上传时,*.hex固件文件就是不给上传,后来我压缩成rar文件才传上去的。
9 K' u: B1 j' @/ C; `; M) n哪位熟悉github的大侠,告诉我如何上传(.lib/.hex)等文件,谢谢。
0 m' F* z9 J( U+ L3 ?
: E# _/ z5 J$ {- Y- S; Y没有了USB_CM3.lib库文件,肯定不行,下面的3个方法都能解决:0 ~( K0 c" a0 T4 E
方法1,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。拷贝到.\USB文件夹。
, X9 h0 ?/ {4 m1 \方法2,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。将此文件添加到工程里面。
. S, D! V6 C8 S' R/ t- `方法3,在其他地方拷贝一个,加到.\USB文件夹。本楼的附件就有一个,方便有需要的。; ~: Q8 D: q0 Y4 B, C0 @/ r

7 }( G0 n) f3 ~* I# v' `& M$ F(我的github已经更新,使用方法2)
! E' }7 Z' X3 |6 S
) \  k, r! ]; z/ O这个问题已经解决,是我第一次使用github,还不熟悉,经过网友提醒,需要在github的上传过滤文件里面,修改容许.lib/.hex等文件的上传。
. E0 S4 h8 O, T9 V$ ~* d
5 F) T7 h! t' T& L8 o: y- C! H# p( _! X# E# M2 R& S

USB_CM3.rar

下载

63.75 KB, 下载次数: 50

所属标签

相似技术帖

官网相关资源

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