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

【源代码】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. q8 r$ V9 M5 e8 B! p7 e& D9 l
看来要换个mdk版本了
, e& T+ i* H9 _2 Y) B
搞定没有?
hi201803 回答时间:2018-7-22 19:23:07
radio2radio 发表于 2018-7-17 17:20
0 S% ?/ N1 z$ v. F7 X" J/ l搞定没有?

% f. ]  T& }0 R: |8 Q# |在  MDK 4.xx  里面编译通过了。 # r% M! p& G' f- _4 Y( c+ }+ P2 l: b
只需要把 缺少的头文件复制过去就可以,大约3个,再改一下include 设置就可.
) _4 z) L  f& B( L, h- u5 @1 G
# y) B& J2 A; X( ~4 j缺少的头文件 在MDK 5.xx 下面目录里.( p9 c7 z5 x9 |+ P# u% ]
C:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Include/ N0 T4 c% u( Z3 h5 X( v2 p& B4 ]5 V' @
C:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Driver\Include
0 _# ]& o, |  B5 l* i" I( n
+ Q5 F( N" q* f1 q4 J* [9 O/ V: _* v缺少 的 usb库文件 也复制过去. 具体在哪里就不清楚了.
wujique 回答时间:2018-7-24 09:35:40
楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。
) t- l  }$ N: U( ]- T, K还有CDC不敢呢?不知道DAPLINK是否有这个BUG。
radio2radio 回答时间:2018-7-24 21:21:44
huangxuejia-292 发表于 2018-7-24 09:35
" k; z- [1 w8 j- o* }$ e0 ?+ F6 a楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。+ E. V% f( G$ |! R7 A& p
还有CDC不敢呢?不知道DAPLINK是否有这个BUG。 ...
5 a; j0 y1 i* N. Y) t" T
这个简单,在main.c的最后面一段,我拷贝到这里:: v  j. k1 Q4 k( w5 S, H

  1. : s2 @. B) j- X( ?2 Z
  2. //-----Soft reset + Hard reset-------------------------------------------------
    " Q- i: P$ l4 o# s0 p
  3. #define PIN_SWCLK_SET PIN_SWCLK_TCK_SET
    5 ]: o) w5 h1 P
  4. #define PIN_SWCLK_CLR PIN_SWCLK_TCK_CLR
    8 t% S; w+ q2 _* ~7 m& `6 Q% t* A
  5. 0 O4 D, L* a! Z' ~# j
  6. #define RST_CLOCK_CYCLE()                \
    ; ]0 q/ K  J8 E2 L1 V
  7.   PIN_SWCLK_CLR();                       \1 Y8 y3 v. f4 V$ w& q
  8.   PIN_DELAY();                           \
    $ T" J5 S3 O/ t/ V, O) q
  9.   PIN_SWCLK_SET();                       \7 G* W' ]* ~9 {: [* ?4 }$ R
  10.   PIN_DELAY()
    9 e2 [: B; f: t1 k. `# K) H5 |: s
  11. 9 D% W( q0 _, u0 C5 l
  12. #define RST_WRITE_BIT(bit)               \
    : Y# p1 E, W* l- \
  13.   PIN_SWDIO_OUT(bit);                    \* Z, ]3 c7 P, y! [
  14.   PIN_SWCLK_CLR();                       \
    5 j2 ~) ^0 _9 g& y
  15.   PIN_DELAY();                           \
    % t2 f  _( O0 H+ T' C" C( d# b
  16.   PIN_SWCLK_SET();                       \; A6 }; \* _7 U* i6 C  V
  17.   PIN_DELAY()0 x! b5 C0 T: s1 V% F

  18. ) `. a% W) \6 B! A5 I* z7 Q% m
  19. #define RST_READ_BIT(bit)                \
    ! y6 ?* s) ^. I7 W/ C" F  Q
  20.   PIN_SWCLK_CLR();                       \
    + b6 o! u. M  L: Q' R
  21.   PIN_DELAY();                           \: w1 U2 \3 f8 X' U' W. c+ m& ~) N( U
  22.   bit = PIN_SWDIO_IN();                  \
      w4 {3 ]; f9 b5 e. H4 N0 ^
  23.   PIN_SWCLK_SET();                       \
    7 |5 j4 k6 A: k: L/ R2 `! }9 h
  24.   PIN_DELAY()
    5 q1 ~( j8 }$ v3 x* L: @9 X

  25. 3 K8 j- W% [, Y! C1 Y" m* ~# `; Q
  26. #define PIN_DELAY() PIN_DELAY_SLOW(DAP_Data.clock_delay). I. R6 c( n/ \0 U+ W* l+ e

  27. & ]; u3 d# `  c3 P. `
  28. uint8_t RST_Transfer(uint32_t request, uint32_t data)
    ( s- u5 R, l8 o! H
  29. {$ ?4 t; G: a0 }: U
  30.   uint32_t ack;                                                                 \
    2 K  q7 F# `2 X: b2 T  G
  31.   uint32_t bit;                                                                 \3 k6 d: j" B# g/ t5 s$ @& ~% U" m
  32.   uint32_t val;                                                                 \
    3 N) \5 v: x- Z" ^" k
  33.   uint32_t parity;                                                              \7 x: {# f7 E0 S7 W  H! r+ j: R
  34.   uint32_t n;                                                                   \% g* U2 S' U& D: o0 p; Q
  35.   \0 t, f% K) @0 h) `
  36.   /* Packet Request */                                                          \
    ! t% T# D1 Z( ~3 Z& \% _* X
  37.   parity = 0U;                                                                  \
    / }( Q! n  v* t+ M$ @2 T! c
  38.   RST_WRITE_BIT(1U);                     /* Start Bit */                        \' W9 _2 d5 H. d8 A
  39.   bit = request >> 0;                                                           \
    6 R4 g& |+ C7 K, J
  40.   RST_WRITE_BIT(bit);                    /* APnDP Bit */                        \
    4 s5 |- C# b4 F9 \" J
  41.   parity += bit;                                                                \5 t! H7 ]3 E' q) e: P% M4 |2 W
  42.   bit = request >> 1;                                                           \6 g5 e6 D. D- ?4 F" f
  43.   RST_WRITE_BIT(bit);                    /* RnW Bit */                          \
    5 ]& @$ |5 M* P. ~
  44.   parity += bit;                                                                \
    % X* S# W6 D# @+ @
  45.   bit = request >> 2;                                                           \$ z9 ?# r% l( `0 x$ u% Z5 i
  46.   RST_WRITE_BIT(bit);                    /* A2 Bit */                           \
    $ i1 z$ O1 S# Z& l$ H' }2 ]+ J& m
  47.   parity += bit;                                                                \9 l+ w3 y( g- p# I0 B
  48.   bit = request >> 3;                                                           \
    ' ~3 ?/ Y) Z% _- K/ ]
  49.   RST_WRITE_BIT(bit);                    /* A3 Bit */                           \: S) }! R  i" N# T
  50.   parity += bit;                                                                \5 W# c0 b' P+ _* S$ G
  51.   RST_WRITE_BIT(parity);                 /* Parity Bit */                       \
    % a* p6 ^- O4 \, u
  52.   RST_WRITE_BIT(0U);                     /* Stop Bit */                         \
    / \- U) X* b. n/ I! _; z
  53.   RST_WRITE_BIT(1U);                     /* Park Bit */                         \3 z5 Y( U' c0 V( l- C+ V( Y
  54.   \
    2 j& g6 P0 i% U; q9 Y
  55.   /* Turnaround */                                                              \& z8 M) \* N7 g3 [
  56.   PIN_SWDIO_OUT_DISABLE();                                                      \
    3 Z7 U0 Z- o7 }, Y
  57.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \$ d( d% Z! b$ w  k' r
  58.     RST_CLOCK_CYCLE();                                                          \6 f. ^' a5 q' d2 U" j
  59.   }                                                                             \
    1 e* X! O7 Q; y, p
  60.   \
    ) w" d/ N; {0 b- A0 _3 K1 j
  61.   /* Acknowledge response */                                                    \
    8 t' P0 t" k* @0 ?
  62.   RST_READ_BIT(bit);                                                            \
    5 M$ o0 ?4 V" ?5 s0 e7 B0 g( ]) Z& E  I
  63.   ack  = bit << 0;                                                              \/ s# ~7 Z/ ?% w+ |  O
  64.   RST_READ_BIT(bit);                                                            \
    ! k5 o6 V/ b2 r9 t! o( C
  65.   ack |= bit << 1;                                                              \4 i) `; I$ V5 h$ r, \
  66.   RST_READ_BIT(bit);                                                            \/ h/ z* }# v/ F2 Q, w9 t* ^" g7 y
  67.   ack |= bit << 2;                                                              \
    + I+ `" f  N; u# J
  68.   \
    ' X/ ?/ l/ t: b9 }- E4 q
  69.   /* Data transfer */                                                           \
    ( [) O3 d! i# X
  70.   /* Turnaround */                                                              \
    1 Y9 D; V( S( A* m" p
  71.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \
    ) c5 O% X- F# t, O+ q' J. B
  72.     RST_CLOCK_CYCLE();                                                          \4 K) B- G: I( S% a: Q
  73.   }                                                                             \. u3 F+ R2 e) @) e  `" z
  74.   PIN_SWDIO_OUT_ENABLE();                                                       \
    & n' g2 G, q/ J) J( n
  75.   /* Write data */                                                              \
    ! C( l4 m) h" `# h5 U0 G
  76.   val = data;                                                                   \* m/ e- @  @  Y3 n* Y' _, @
  77.   parity = 0U;                                                                  \3 S+ Z, R5 v8 X: R5 b6 z; p$ n: D1 x/ @
  78.   for (n = 32U; n; n--) {                                                       \
    / \5 H1 y3 h8 L, @+ o
  79.     RST_WRITE_BIT(val);              /* Write WDATA[0:31] */                    \1 m3 Q- R0 Y0 a. b8 z
  80.     parity += val;                                                              \; T- }  \  z+ F. K! G0 K8 G
  81.     val >>= 1;                                                                  \
    - r0 ?7 t: X! N
  82.   }                                                                             \& g& `8 }( e+ w1 I  i( T& K7 }6 V
  83.   RST_WRITE_BIT(parity);             /* Write Parity Bit */                     \
    $ `; i( T% m/ v( s
  84.   PIN_SWDIO_OUT_ENABLE();                                                       \
    * |" `2 [3 N' X
  85.   PIN_SWDIO_OUT(1U);                                                            \
    , z9 }) @3 t; q+ H
  86.   return ((uint8_t)ack);                                                        \5 z( x9 n. n2 v& f3 Q/ ^
  87. }8 A- `# P8 [  {- u0 J$ O1 d

  88. $ N& d* B$ G7 D- M5 \
  89. void vResetTarget(uint8_t bit)
    % C  |$ O  c7 R% u0 K
  90. {
    : x& H" T7 `  {) r4 t( y
  91.   uint32_t i;
    * H( `/ i6 ~" H3 x2 y, b& O
  92.   //soft-reset for Cortex-M# @/ u9 Z$ C* `0 T  n& O
  93.   RST_Transfer(0x00000CC5, 0xE000ED0C); //set AIRCR address
    & i. l  v; M/ a* k* E2 q% E
  94.   for (i=0; i<100; i++);
    6 ^3 K# e2 U9 s1 g# h7 g# U# z$ V
  95.   RST_Transfer(0x00000CDD, 0x05FA0007); //set RESET data
    . e$ t' m: m6 v. x7 M
  96.   for (i=0; i<100; i++);, H# A- w5 g) i" K! n. X% A/ V
  97.   RST_Transfer(0x00000CC5, 0xE000ED0C); //repeat5 X+ u- g3 X9 {6 W; ]1 |+ P: @5 R
  98.   for (i=0; i<100; i++);
    ' A( Z) d; A% ~  S6 G% ~/ t3 `+ @
  99.   RST_Transfer(0x00000CDD, 0x05FA0007);
    & G9 G( X1 s, Q* k3 ?) U# d& {0 h
  100.   # i8 s& h1 E4 F* C: |3 U7 j$ R: r
  101.   if (bit & 1)  PIN_nRESET_HIGH();
    ! o8 @* C& v( _4 X, Q, l2 f$ t
  102.   else          PIN_nRESET_LOW();8 T; \& _6 ?8 M7 C! g
  103. }, ^6 x. l8 y2 ]8 @' Q

  104.   h9 u, {  D5 k' C# Q5 r! Z
复制代码

* P% Q) i) O4 M! C$ z" ?# U$ u0 z6 v
您再看看,是哪里调用了vResetTarget(uint8_t bit)函数。
: c: v3 z6 e% D6 P" y/ p; C1 [: m' v2 X& ]* z& X
CDC的改进,我是仿造CubeMX的CDC user 样板文件,UART库函数换成ARM RTE的。 解决了原来的版本CDC操作会导致死机问题。9 T; _' E6 h  K  }8 H1 J; B

6 X  h, ~* t7 qUSB的底层没有动。我曾经尝试将USB库函数更换成CubeMX的,没有成功。1 b$ ]& |; p8 s. I6 X
也还发现,如果换成CubeMX的USB库,编译后代码文件会大了很多,很可能导致64KB不够用(我的F103C8只有64KB)。
& N8 F1 ]9 X7 u
* P, c! D' A3 ^! q; F6 N- h! _
wujique 回答时间:2018-7-25 15:00:55
radio2radio 发表于 2018-7-24 21:21
! O9 Q; _0 h. U9 u+ D这个简单,在main.c的最后面一段,我拷贝到这里:

, Y$ [! N' d7 m8 n, e/ M5 S  @改好了,调试能复位。. |, h! d, B  v, ]
MSD(U盘拖放)无法复位。。。
radio2radio 回答时间:2018-7-25 18:59:43
本帖最后由 radio2radio 于 2018-7-25 19:14 编辑
& `8 X# ?/ l7 t8 v; _3 u0 M3 L: Q$ q4 ^
huangxuejia-292 发表于 2018-7-25 15:002 m; X, W5 b5 P. O2 ^' x5 s# W
改好了,调试能复位。4 R2 b* [8 h/ ]$ [* e
MSD(U盘拖放)无法复位。。。
3 s; V$ \: [( u/ v% G- r7 R4 _  X. ?
你看看优盘拖放是不是后台运行的,要等优盘拖放完成之后,插入一个时延(100ms),调用一次vResetTarget,一定行。
5 s8 F9 p+ F# g1 e$ A
dreamfly239 回答时间:2018-7-26 10:38:40
很受益啊,希望楼主继续分享有价值的资料
shanji 回答时间:2018-7-27 10:01:49
radio2radio 发表于 2018-7-17 17:20& {+ X; D2 h8 u" ?6 [  U: z2 \
搞定没有?

: t" C0 T- x" j- P" E还没有,不去折腾了
hi201803 回答时间:2018-7-27 17:01:25
radio2radio 发表于 2018-7-24 21:21
' S7 c6 q5 ^3 D/ j, g; r这个简单,在main.c的最后面一段,我拷贝到这里:
* d" |2 x$ b) X8 p/ U. v
看到,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* H8 L! M% q# o5 t: q
请问楼主是用哪个版本编译的?
# |% y& m2 @- U% W) d% T9 \
Keil 5.xx,留意第60楼,ARM CMSIS要升级到V5.3.0
radio2radio 回答时间:2018-8-7 14:32:12
本帖最后由 radio2radio 于 2018-10-27 12:29 编辑
1 S. p3 D5 c& Q! {8 h+ E/ p/ i5 r. M- b0 |
刚刚发现,一楼的原码包,USB文件夹里面,少了一个 “USB_CM3.lib” 的USB库文件。
- G0 r% V( ]- w8 O" X0 c我自己的硬盘上面就有这个文件,但是上传github后,这个文件就是没有上传出去,我后加也不会加。
$ @+ n5 j9 x7 n) N" f+ C. \5 m
* g8 L, d7 h7 M4 _5 R& Q, O, W我不知道为什么,记得第一次上传时,*.hex固件文件就是不给上传,后来我压缩成rar文件才传上去的。
/ `& \* c& o) y7 d0 [0 q) r哪位熟悉github的大侠,告诉我如何上传(.lib/.hex)等文件,谢谢。+ h- C5 K  C4 h: R1 {

) a8 T2 k5 B, V* t! _- |. n没有了USB_CM3.lib库文件,肯定不行,下面的3个方法都能解决:5 G2 b- \% G1 C3 ^4 {7 P
方法1,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。拷贝到.\USB文件夹。0 l) K) t* p, E8 i* v2 o
方法2,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。将此文件添加到工程里面。
0 c& s9 E: n0 h方法3,在其他地方拷贝一个,加到.\USB文件夹。本楼的附件就有一个,方便有需要的。( ^6 c1 Q3 l: t% q. n' F4 @- H
0 r5 R. I( v' n% [8 l( w
(我的github已经更新,使用方法2)1 N* h& _8 {* T4 ~' E% O: X! ~' V
/ Q5 |9 g! D- e
这个问题已经解决,是我第一次使用github,还不熟悉,经过网友提醒,需要在github的上传过滤文件里面,修改容许.lib/.hex等文件的上传。, n! D  J# n8 i: M3 W- ^
9 g7 E9 J4 i2 k% i, \  ?6 K" ]3 f* H$ H

5 T% t' u, {2 }5 r4 P( p

USB_CM3.rar

下载

63.75 KB, 下载次数: 48

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版