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

【源代码】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. C: M1 _5 q$ o8 l7 ?# w5 }
看来要换个mdk版本了
- I0 I. A5 j0 K5 R; b, C
搞定没有?
hi201803 回答时间:2018-7-22 19:23:07
radio2radio 发表于 2018-7-17 17:20, I0 @; w" }1 z
搞定没有?

; j5 {3 g" J1 @8 K5 v在  MDK 4.xx  里面编译通过了。
  ~# X% E* w/ |" E" Y) J% x1 \只需要把 缺少的头文件复制过去就可以,大约3个,再改一下include 设置就可." v  z5 [2 [- c" d* j$ Y8 E1 L# L
) A9 G! e9 ~0 K
缺少的头文件 在MDK 5.xx 下面目录里.
; R; t! T; H9 p2 `2 wC:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Include
' U1 f0 F- [- S! `, ~7 eC:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Driver\Include4 S" d$ U! |) a  y9 P

; L3 {- o. Z8 [. l# @2 F# o4 n缺少 的 usb库文件 也复制过去. 具体在哪里就不清楚了.
wujique 回答时间:2018-7-24 09:35:40
楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。
7 H# k. O0 v/ @  p+ z还有CDC不敢呢?不知道DAPLINK是否有这个BUG。
radio2radio 回答时间:2018-7-24 21:21:44
huangxuejia-292 发表于 2018-7-24 09:35
8 g0 Z) a7 M2 t5 \1 D) s( D楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。
" V  ?5 O: F& x( Z8 Y' X还有CDC不敢呢?不知道DAPLINK是否有这个BUG。 ...

4 A8 C+ i( }$ U4 p& }) h这个简单,在main.c的最后面一段,我拷贝到这里:
6 m! c; n! c: w

  1. ' ]; b) z  Z% g  c& X1 k8 \" c* i, Q
  2. //-----Soft reset + Hard reset-------------------------------------------------
    9 G; v5 r1 W2 |! ?' x
  3. #define PIN_SWCLK_SET PIN_SWCLK_TCK_SET
    3 t  d1 x" `7 n  d
  4. #define PIN_SWCLK_CLR PIN_SWCLK_TCK_CLR5 ]  d& ^, q- V- @. o7 `6 a

  5. . B) P, \4 I8 F/ [" u6 d
  6. #define RST_CLOCK_CYCLE()                \( K( V" _/ j. c" W. I
  7.   PIN_SWCLK_CLR();                       \
    2 O9 G* M: }8 i: V" `9 M
  8.   PIN_DELAY();                           \. |- ]' T! C; n* _6 |
  9.   PIN_SWCLK_SET();                       \+ O) a( i  g* d2 h
  10.   PIN_DELAY()/ V2 j0 D  N$ u* a5 J

  11. - t' S; {2 ~8 G  m' U
  12. #define RST_WRITE_BIT(bit)               \
    8 U' Y  Q; u9 s3 p9 w. L0 `
  13.   PIN_SWDIO_OUT(bit);                    \. {9 n7 x1 }& F- I% F  l" l6 d
  14.   PIN_SWCLK_CLR();                       \8 Y2 U  h  K8 n  V/ k, o
  15.   PIN_DELAY();                           \* o0 G  g+ n- p1 }! s& ]
  16.   PIN_SWCLK_SET();                       \
    ' ^3 O% ~( f% c1 T* c; v
  17.   PIN_DELAY()1 ]6 r2 v) r) w5 @$ S' l: V0 c6 G; i

  18. 9 r4 Z! t/ s1 e/ \  h
  19. #define RST_READ_BIT(bit)                \4 d. P' A% ~% x7 N, x% ~
  20.   PIN_SWCLK_CLR();                       \
    " _* A7 U. O6 n% q  \- U
  21.   PIN_DELAY();                           \
    0 Y" h% \2 X$ q7 B
  22.   bit = PIN_SWDIO_IN();                  \
    * \7 `) [, l2 ^. Y+ y2 C! J' A
  23.   PIN_SWCLK_SET();                       \9 L% w+ s4 Y- o. J
  24.   PIN_DELAY()
    # }) z3 S" h  l
  25. ) M" [* C1 m. \- h6 i) Q) h& J
  26. #define PIN_DELAY() PIN_DELAY_SLOW(DAP_Data.clock_delay)
    " U: }7 D/ o0 k

  27. - y2 ?9 I' X) e# l5 \+ S
  28. uint8_t RST_Transfer(uint32_t request, uint32_t data)3 |* x4 M5 n5 F/ [3 O8 P" P/ ?
  29. {: Y$ o+ l( _1 @% Y+ i' T
  30.   uint32_t ack;                                                                 \; I! C& F4 ?9 f/ E1 C+ s
  31.   uint32_t bit;                                                                 \. k  C1 O" e* \. {" n, G2 s
  32.   uint32_t val;                                                                 \
    / \+ x  n  _, ]$ j
  33.   uint32_t parity;                                                              \$ d, G1 H4 z4 M' Q: o5 h
  34.   uint32_t n;                                                                   \9 e6 @4 I. Y# Z. M7 t
  35.   \, }4 d* s& Z# r
  36.   /* Packet Request */                                                          \* G" v$ m0 z0 b; s4 H/ B
  37.   parity = 0U;                                                                  \5 S/ D8 [( `4 ?. m, k5 y, G0 z
  38.   RST_WRITE_BIT(1U);                     /* Start Bit */                        \
    ) L/ K2 O/ K& h3 n2 }! G
  39.   bit = request >> 0;                                                           \3 A1 E& v+ y6 Q4 b: S% t8 U
  40.   RST_WRITE_BIT(bit);                    /* APnDP Bit */                        \4 l5 `3 @; Y0 z* R" ]. C9 e
  41.   parity += bit;                                                                \
    1 j7 q! C2 o- q  w
  42.   bit = request >> 1;                                                           \
    3 n6 G0 F1 O7 Q& f
  43.   RST_WRITE_BIT(bit);                    /* RnW Bit */                          \) C$ x- W% \5 ^# l
  44.   parity += bit;                                                                \
    3 [" Y& q6 o% r2 d- _. f
  45.   bit = request >> 2;                                                           \
    & x8 f1 F; s% i
  46.   RST_WRITE_BIT(bit);                    /* A2 Bit */                           \
    5 l/ {4 w3 B# c+ O1 J
  47.   parity += bit;                                                                \
    4 ?: B& {2 M1 c) n" @6 ?
  48.   bit = request >> 3;                                                           \
    % P' V# @6 |& M8 Y4 x
  49.   RST_WRITE_BIT(bit);                    /* A3 Bit */                           \
    9 E% W: V/ U0 j0 u
  50.   parity += bit;                                                                \8 y- U) e' X* {# w
  51.   RST_WRITE_BIT(parity);                 /* Parity Bit */                       \
    6 R( n" S2 |- M" I$ d0 @
  52.   RST_WRITE_BIT(0U);                     /* Stop Bit */                         \% r+ a% Y. p* I
  53.   RST_WRITE_BIT(1U);                     /* Park Bit */                         \
    7 R" x/ Q+ P# a
  54.   \
    , [; u4 R) u& ?
  55.   /* Turnaround */                                                              \
    1 O6 L! H/ V& X
  56.   PIN_SWDIO_OUT_DISABLE();                                                      \/ [) ]2 H  T9 h, y: j, x
  57.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \
    & o3 F% N1 j" L- b' l- i" [
  58.     RST_CLOCK_CYCLE();                                                          \
    9 x- u6 |7 j+ e; A  w1 z4 m# z
  59.   }                                                                             \# C7 Z. m, c* s' `
  60.   \
    & b8 M# L: c. |. W0 r3 y
  61.   /* Acknowledge response */                                                    \! n7 R1 ^1 F5 E0 g9 |+ Q
  62.   RST_READ_BIT(bit);                                                            \
    ! Q6 T7 W) C5 s
  63.   ack  = bit << 0;                                                              \
    % d3 K" W* z8 Z2 k
  64.   RST_READ_BIT(bit);                                                            \
    6 |+ G5 z' Y  }. w  T, J3 d) m
  65.   ack |= bit << 1;                                                              \
    5 \* h; z; n" W
  66.   RST_READ_BIT(bit);                                                            \
    - y+ l$ C  C- K+ X8 r
  67.   ack |= bit << 2;                                                              \
    5 H9 i- a1 F* R( T. O
  68.   \1 I, d: x0 Y( g+ b4 a* F2 ]+ T
  69.   /* Data transfer */                                                           \7 @5 o0 r7 r. ~3 g
  70.   /* Turnaround */                                                              \
    7 j- \. H4 b9 V& ^2 |
  71.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \# {6 l, F9 f, S( l( I6 \6 p( w' }
  72.     RST_CLOCK_CYCLE();                                                          \- q1 @  Y& S: M8 c/ L  q  d% e
  73.   }                                                                             \; e9 q' H, J# b8 g& u7 U
  74.   PIN_SWDIO_OUT_ENABLE();                                                       \5 c" n* N) P/ q' o5 A: J
  75.   /* Write data */                                                              \
    & B+ P' o7 R' a  H6 X; q; G0 B' l% m
  76.   val = data;                                                                   \
    / X# W; J  Q3 v9 z, l4 r' B2 ?
  77.   parity = 0U;                                                                  \2 w1 o! }% F: `. D
  78.   for (n = 32U; n; n--) {                                                       \
    0 C: i9 n& N& F  h
  79.     RST_WRITE_BIT(val);              /* Write WDATA[0:31] */                    \# H1 {" O0 Q4 d; L5 q( n$ v
  80.     parity += val;                                                              \4 V" U( P- S! o# M# s$ }$ l; x
  81.     val >>= 1;                                                                  \+ O( A5 ^) z) q  c$ V! U# S" R
  82.   }                                                                             \
    7 `: ?, P( a# T8 R0 a3 R
  83.   RST_WRITE_BIT(parity);             /* Write Parity Bit */                     \. G5 Z# }' f. m! q, g
  84.   PIN_SWDIO_OUT_ENABLE();                                                       \
    : X4 K0 l8 G% R6 M/ S8 m- v
  85.   PIN_SWDIO_OUT(1U);                                                            \( G8 U% J& I- @6 ]
  86.   return ((uint8_t)ack);                                                        \) @+ \% h: r2 \
  87. }, a; {2 m! f& r! s

  88. ( Q7 s: V' c- ^4 z! J+ h: B
  89. void vResetTarget(uint8_t bit)
    - v7 N( h: O1 k& I) r8 N4 S; W
  90. {
    % h7 Q( k% B  O2 j5 q: H% @- S
  91.   uint32_t i;
    0 ^; U) X( l/ V  u9 u% n
  92.   //soft-reset for Cortex-M
    ' f% v) r$ A- b: I
  93.   RST_Transfer(0x00000CC5, 0xE000ED0C); //set AIRCR address
    # F2 {$ [2 j/ ]# f& E; B  S
  94.   for (i=0; i<100; i++);
    ( x& W5 e5 A; S3 t+ a% z
  95.   RST_Transfer(0x00000CDD, 0x05FA0007); //set RESET data/ T; P# @, t6 L
  96.   for (i=0; i<100; i++);. N  ~0 v- N1 b% `" z
  97.   RST_Transfer(0x00000CC5, 0xE000ED0C); //repeat% I+ P; N  n" u% i% a, e) k0 J
  98.   for (i=0; i<100; i++);, f9 R* [5 Q2 d" V7 d
  99.   RST_Transfer(0x00000CDD, 0x05FA0007);6 H; @6 i; l& g$ B
  100.   
    : A" g" {: e" S5 Z: C7 i0 j
  101.   if (bit & 1)  PIN_nRESET_HIGH();" I7 j6 w& K$ ?) F- m; E7 l
  102.   else          PIN_nRESET_LOW();1 m$ p, X7 A1 I: |) d, \/ u' K
  103. }) s  _: A& B: V) k0 V+ R4 |3 j

  104. % u7 @# I, Z/ [
复制代码
/ }1 x, |) g4 i; g. u: W
, ?6 n- B# R) Y0 h" I6 ]
您再看看,是哪里调用了vResetTarget(uint8_t bit)函数。
+ N" _+ d/ O! t0 @0 d$ j( A# `9 _. C. y& R) O
CDC的改进,我是仿造CubeMX的CDC user 样板文件,UART库函数换成ARM RTE的。 解决了原来的版本CDC操作会导致死机问题。/ P' |$ {5 h% B# @

  Q: R3 ]+ u% ?8 h$ v+ h7 kUSB的底层没有动。我曾经尝试将USB库函数更换成CubeMX的,没有成功。; |2 p& i8 c# ?5 A3 X4 d# s
也还发现,如果换成CubeMX的USB库,编译后代码文件会大了很多,很可能导致64KB不够用(我的F103C8只有64KB)。% C' R# g  B2 }5 n) L$ B1 f5 V$ `

5 K2 q) D! J* ~) Y! o$ X+ c
wujique 回答时间:2018-7-25 15:00:55
radio2radio 发表于 2018-7-24 21:21- _/ E9 b( z8 d) O
这个简单,在main.c的最后面一段,我拷贝到这里:
- o8 b4 i. S. m- Y
改好了,调试能复位。
) X) D( w/ n  O6 u1 Q$ o8 NMSD(U盘拖放)无法复位。。。
radio2radio 回答时间:2018-7-25 18:59:43
本帖最后由 radio2radio 于 2018-7-25 19:14 编辑
0 d, J$ G0 c9 O9 W6 Z  h
huangxuejia-292 发表于 2018-7-25 15:00
" ]. J! l! P- m" c+ P/ Q改好了,调试能复位。! U4 l6 R3 h. n( z* J( X7 H  x
MSD(U盘拖放)无法复位。。。

% t- t' M  p" r- t- w你看看优盘拖放是不是后台运行的,要等优盘拖放完成之后,插入一个时延(100ms),调用一次vResetTarget,一定行。
: x  [4 q8 }6 D2 b, V( S
dreamfly239 回答时间:2018-7-26 10:38:40
很受益啊,希望楼主继续分享有价值的资料
shanji 回答时间:2018-7-27 10:01:49
radio2radio 发表于 2018-7-17 17:20+ e9 ]. b) B* P; R% `
搞定没有?
2 ?* s! k9 a* F8 z( a
还没有,不去折腾了
hi201803 回答时间:2018-7-27 17:01:25
radio2radio 发表于 2018-7-24 21:21/ ?7 ?* X& R: x- @( t
这个简单,在main.c的最后面一段,我拷贝到这里:

) M5 h$ o, C7 T" M看到,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
1 J/ B0 Q) o6 p% h3 x请问楼主是用哪个版本编译的?
/ n) v$ t( }; K
Keil 5.xx,留意第60楼,ARM CMSIS要升级到V5.3.0
radio2radio 回答时间:2018-8-7 14:32:12
本帖最后由 radio2radio 于 2018-10-27 12:29 编辑 2 ^* ]8 [( e: \- q# o( E
# X) W6 O( ]9 l2 l
刚刚发现,一楼的原码包,USB文件夹里面,少了一个 “USB_CM3.lib” 的USB库文件。5 [* _! R( e2 z* w: m
我自己的硬盘上面就有这个文件,但是上传github后,这个文件就是没有上传出去,我后加也不会加。2 {5 h3 w/ {- j" R1 F! d& C

3 X; g; S' c* ~" o我不知道为什么,记得第一次上传时,*.hex固件文件就是不给上传,后来我压缩成rar文件才传上去的。
% G! C  Y3 j" p哪位熟悉github的大侠,告诉我如何上传(.lib/.hex)等文件,谢谢。
% E. m6 E; K/ a! _5 P5 u' p  l) E" P5 F  m7 e
没有了USB_CM3.lib库文件,肯定不行,下面的3个方法都能解决:
6 n$ r/ `5 Y( W/ y. @方法1,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。拷贝到.\USB文件夹。
. y& Y$ m1 W' M3 B) b0 v方法2,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。将此文件添加到工程里面。6 U9 Z2 j: y$ j5 h, x. v# e- Q( P
方法3,在其他地方拷贝一个,加到.\USB文件夹。本楼的附件就有一个,方便有需要的。
' t; i+ X, L+ |+ D# R) I6 {
$ o7 L: p$ Y1 ]' E) L' v* Y(我的github已经更新,使用方法2)
$ Z. G! X: c' d  I  `/ h$ v9 h1 M6 N
这个问题已经解决,是我第一次使用github,还不熟悉,经过网友提醒,需要在github的上传过滤文件里面,修改容许.lib/.hex等文件的上传。& m& z  Q9 T& `3 r  }* k1 l

/ L8 `. z# R: O4 g$ [# X& G3 D
4 R( X  F) C' N1 t1 _% s/ z

USB_CM3.rar

下载

63.75 KB, 下载次数: 48

所属标签

相似分享

官网相关资源

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