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

【源代码】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' P  o5 q3 a6 S0 B1 _4 A( w
看来要换个mdk版本了
% C* D7 g, N) `1 a3 r
搞定没有?
hi201803 回答时间:2018-7-22 19:23:07
radio2radio 发表于 2018-7-17 17:20
) }4 j4 C8 u, e0 E搞定没有?
3 @; R9 J: k& P6 R: B
在  MDK 4.xx  里面编译通过了。
' n/ q4 }2 o/ g" ~' E- R只需要把 缺少的头文件复制过去就可以,大约3个,再改一下include 设置就可.
1 I" S2 z- u4 \# o, X
' [/ I2 F0 W$ u: T; P- w; ?! ]$ `缺少的头文件 在MDK 5.xx 下面目录里.- y7 \  F/ E9 f, k8 Q5 c
C:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Include
' l$ `# S% g# y% FC:\Keil\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Driver\Include
/ ?6 E! V  i# g: _: Z) Q4 n$ s4 J) }( w  p$ H, F+ J7 d
缺少 的 usb库文件 也复制过去. 具体在哪里就不清楚了.
wujique 回答时间:2018-7-24 09:35:40
楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。
/ L3 ?* g% ?+ ]* X, J0 _还有CDC不敢呢?不知道DAPLINK是否有这个BUG。
radio2radio 回答时间:2018-7-24 21:21:44
huangxuejia-292 发表于 2018-7-24 09:352 R- [+ m4 J" @+ @2 f
楼主能否说下软复位具体如何做的?我想改改改DAPLINK固件。
  i* H+ I0 q4 b1 u8 }) c5 h还有CDC不敢呢?不知道DAPLINK是否有这个BUG。 ...
- l* Q3 x; Q( K# d: H' {
这个简单,在main.c的最后面一段,我拷贝到这里:
9 s6 n$ P& |( ?5 _- S: _4 ^

  1. 9 A# P0 {! D) @/ z" [. `% }% e" s. ?5 X8 \
  2. //-----Soft reset + Hard reset-------------------------------------------------% U$ h& [# ~% f) R! E( x( ^
  3. #define PIN_SWCLK_SET PIN_SWCLK_TCK_SET
    ! Q& P( L: F1 V; b5 Y2 ?# f$ e1 h
  4. #define PIN_SWCLK_CLR PIN_SWCLK_TCK_CLR- d5 W' w, N: C( p7 F. f$ }4 Q. a
  5. 3 x) D! n$ e% A# G2 E9 `5 N
  6. #define RST_CLOCK_CYCLE()                \
    . Y7 a5 h  L+ z" i0 R& C" J; O
  7.   PIN_SWCLK_CLR();                       \# H, c" y# ]. n) V2 U+ H  K
  8.   PIN_DELAY();                           \
    # I/ Y; g& C/ ]
  9.   PIN_SWCLK_SET();                       \" d; K" b' T, ?4 J
  10.   PIN_DELAY()
    ; ~# U: s- G' g" U4 e4 M

  11. . }) I( h( h" ~: Y9 Q! l
  12. #define RST_WRITE_BIT(bit)               \
    4 [# \1 G# Z4 X9 z
  13.   PIN_SWDIO_OUT(bit);                    \
    " |7 N; g$ L: K/ H: w" s
  14.   PIN_SWCLK_CLR();                       \
    % _) ~* h  a3 M/ C
  15.   PIN_DELAY();                           \4 o" u' h- a% C! E- J$ a
  16.   PIN_SWCLK_SET();                       \
    . v9 c; F0 r! z* x7 f& Z  N7 ?
  17.   PIN_DELAY()
    7 o3 H# q  i6 ~0 z) Z7 s

  18. 4 q0 Y  ?$ B& j/ e5 V- z* _
  19. #define RST_READ_BIT(bit)                \) B, ~' p' `) h! [! z6 }7 U
  20.   PIN_SWCLK_CLR();                       \1 t: v5 k# p5 S1 t! z
  21.   PIN_DELAY();                           \$ V6 c+ D0 o( u' w+ i* H
  22.   bit = PIN_SWDIO_IN();                  \* t! _- t# L! T* ^8 @& x
  23.   PIN_SWCLK_SET();                       \
      l% F! j3 K9 H
  24.   PIN_DELAY()8 d/ b, s! `5 P; q, }( Q
  25. : d. `, t! ?$ l
  26. #define PIN_DELAY() PIN_DELAY_SLOW(DAP_Data.clock_delay)5 m/ y; u/ d5 k* d* S2 r/ H; b! h  r

  27. ( q' k8 \0 W1 v+ R/ w) p
  28. uint8_t RST_Transfer(uint32_t request, uint32_t data)
    ; T" I5 c: j2 s
  29. {
    6 C* X. x% R4 C1 }
  30.   uint32_t ack;                                                                 \' g8 a" E5 d1 x3 t9 o, j
  31.   uint32_t bit;                                                                 \; N! d3 P% j" ~( i1 Y* _
  32.   uint32_t val;                                                                 \) Q7 N; k* H. O4 B# [9 x
  33.   uint32_t parity;                                                              \- K/ S/ a9 P" z: P5 O
  34.   uint32_t n;                                                                   \
    1 v5 Y* f2 ?) s& i
  35.   \
    % c) ~9 S" J+ W9 M/ N
  36.   /* Packet Request */                                                          \
    / {5 t( V7 Y# w. Z5 m+ F
  37.   parity = 0U;                                                                  \0 L# d: G; n# z  _1 v
  38.   RST_WRITE_BIT(1U);                     /* Start Bit */                        \; R' h9 [- p' s2 e% \2 x0 W
  39.   bit = request >> 0;                                                           \7 P& {  J* F7 h( P0 h4 n2 g  Q
  40.   RST_WRITE_BIT(bit);                    /* APnDP Bit */                        \4 e2 x% V3 }) A" G7 B% W
  41.   parity += bit;                                                                \; n' E! E/ N, E# Z% e
  42.   bit = request >> 1;                                                           \
    8 u8 s, c1 B5 X) U, ^/ k3 V) u
  43.   RST_WRITE_BIT(bit);                    /* RnW Bit */                          \
    6 i, v4 j* O% ~
  44.   parity += bit;                                                                \) m; R$ l# o; z
  45.   bit = request >> 2;                                                           \$ r( T: C" O+ z% Q( f
  46.   RST_WRITE_BIT(bit);                    /* A2 Bit */                           \. G& t7 r) p* R7 }, }! U
  47.   parity += bit;                                                                \
    6 Y0 ]2 d; F9 K; ?
  48.   bit = request >> 3;                                                           \  ^& R) ]' g. ~" ^+ j
  49.   RST_WRITE_BIT(bit);                    /* A3 Bit */                           \
    ( O$ @: @( d) U) M; h0 q
  50.   parity += bit;                                                                \7 D; S; g* h$ D2 {) g% ~8 n
  51.   RST_WRITE_BIT(parity);                 /* Parity Bit */                       \
    9 R+ d' Z) s0 W3 o
  52.   RST_WRITE_BIT(0U);                     /* Stop Bit */                         \4 W& B! F# s: X( m6 N+ d, J
  53.   RST_WRITE_BIT(1U);                     /* Park Bit */                         \! `- E$ p) M' M& I( Z
  54.   \
    8 c& W/ y7 a' t1 n2 G
  55.   /* Turnaround */                                                              \
    7 L1 `$ A# x& `& e, A# p
  56.   PIN_SWDIO_OUT_DISABLE();                                                      \
    : E; {9 t- }* n# |& v: B) G# Q& Q3 M
  57.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \
    1 |) M3 m1 ^2 g5 R* X' R
  58.     RST_CLOCK_CYCLE();                                                          \: O  M. s: }: ]# C/ f3 o+ G
  59.   }                                                                             \
    ; D" a7 Q' E# ^9 b, z
  60.   \
    1 {7 p# V9 Z) b- ]
  61.   /* Acknowledge response */                                                    \
    4 n" n" f( H% V8 v# {
  62.   RST_READ_BIT(bit);                                                            \! o1 j( U" G& u1 N# _
  63.   ack  = bit << 0;                                                              \) s' y3 H5 G+ J% {/ f. V! Z
  64.   RST_READ_BIT(bit);                                                            \& X9 A/ B4 T! [+ Y/ t
  65.   ack |= bit << 1;                                                              \
    ) Q* g( c- k5 Q6 k. e: r
  66.   RST_READ_BIT(bit);                                                            \6 T" K3 d+ ~! h/ p5 u. l
  67.   ack |= bit << 2;                                                              \
    8 i/ ^" `, D" ^! o$ ^
  68.   \
    / \& l) z& l: p9 f  d
  69.   /* Data transfer */                                                           \
    3 _& n. ~+ f$ Z& E4 I$ y; U& u% X
  70.   /* Turnaround */                                                              \
    0 t  s# |; `4 N9 S
  71.   for (n = DAP_Data.swd_conf.turnaround; n; n--) {                              \4 p; B3 z) m$ w8 c8 J) q$ o. X2 v
  72.     RST_CLOCK_CYCLE();                                                          \
    ! B0 @& z  w; V7 n
  73.   }                                                                             \, Y, X1 W  c  ^9 n. r; c# J. [  G& M
  74.   PIN_SWDIO_OUT_ENABLE();                                                       \
    3 G- a, E# k$ G. f- C! T! ?
  75.   /* Write data */                                                              \4 A; K( g8 [- w) Q1 h
  76.   val = data;                                                                   \2 g% N, |' K3 C. A
  77.   parity = 0U;                                                                  \
    - A  r7 i, o0 Q8 ^4 E
  78.   for (n = 32U; n; n--) {                                                       \
    7 Y0 t! L, s% d
  79.     RST_WRITE_BIT(val);              /* Write WDATA[0:31] */                    \
    " e2 N# `8 E2 B6 A9 ~2 L
  80.     parity += val;                                                              \1 Y( }- O- `7 ~( j% x% n
  81.     val >>= 1;                                                                  \
    ) }) Z: N3 |; b
  82.   }                                                                             \$ D7 o3 r9 ~& J
  83.   RST_WRITE_BIT(parity);             /* Write Parity Bit */                     \6 _& T) d4 k5 _# m" |0 j2 d
  84.   PIN_SWDIO_OUT_ENABLE();                                                       \7 G: K* z& O0 I4 v% U5 E& m
  85.   PIN_SWDIO_OUT(1U);                                                            \
    * @! j4 B# c. \$ h/ W
  86.   return ((uint8_t)ack);                                                        \
    $ C5 D4 A" W( C1 Z/ V' e# q" B9 x
  87. }& t) W5 u6 R% W* u/ h

  88. 7 G& W+ w0 Y- M( E) H
  89. void vResetTarget(uint8_t bit); }& ]4 ]* l1 p6 k% Z2 N
  90. {" }0 {4 L+ h/ _0 x( y7 r6 t
  91.   uint32_t i;
    8 u; B6 N8 ^: v1 x5 o: H4 }
  92.   //soft-reset for Cortex-M, I( x; c9 N, e
  93.   RST_Transfer(0x00000CC5, 0xE000ED0C); //set AIRCR address, ~: L* B6 i0 x. t3 i! X
  94.   for (i=0; i<100; i++);8 a7 N3 V( V. L" E
  95.   RST_Transfer(0x00000CDD, 0x05FA0007); //set RESET data" U0 F% O/ d, y  h
  96.   for (i=0; i<100; i++);. w+ R6 D/ O" V6 ?) m7 c( @
  97.   RST_Transfer(0x00000CC5, 0xE000ED0C); //repeat! Q9 A6 h2 {* R2 A1 _9 F  a
  98.   for (i=0; i<100; i++);8 o0 a! }' l( s: z2 @' x
  99.   RST_Transfer(0x00000CDD, 0x05FA0007);
    1 q8 C; E3 B0 u& a  A& u" S
  100.   % f. c. H2 x: N
  101.   if (bit & 1)  PIN_nRESET_HIGH();7 P. s, O2 s8 R. d6 E
  102.   else          PIN_nRESET_LOW();
    . c8 c# E) P9 S, R
  103. }
    . p/ d% T# \% z" t$ w

  104. 7 n. Q% C6 U& ^1 g7 B, q. \3 w- F
复制代码

* B! g; r# x2 V% w6 ?5 o- x4 E
( p7 w& a$ B- G9 r; t8 W0 W您再看看,是哪里调用了vResetTarget(uint8_t bit)函数。
: d1 J# [7 R" v& T; S6 j! s
" B7 m3 x4 o7 D; N. \, mCDC的改进,我是仿造CubeMX的CDC user 样板文件,UART库函数换成ARM RTE的。 解决了原来的版本CDC操作会导致死机问题。% [2 R! h8 C! Y4 J, z

( [/ b2 n* k  _; \; u% DUSB的底层没有动。我曾经尝试将USB库函数更换成CubeMX的,没有成功。
- L( P$ k* l/ C: m0 b也还发现,如果换成CubeMX的USB库,编译后代码文件会大了很多,很可能导致64KB不够用(我的F103C8只有64KB)。8 _3 ~7 s! x' U! d+ \

0 i2 g. c8 ^" x
wujique 回答时间:2018-7-25 15:00:55
radio2radio 发表于 2018-7-24 21:218 P) t) t8 l4 f7 J( A4 R) ]
这个简单,在main.c的最后面一段,我拷贝到这里:
+ g6 V9 q$ g( _7 K& x% S
改好了,调试能复位。2 f% a' [4 p5 R- W# z, f& x
MSD(U盘拖放)无法复位。。。
radio2radio 回答时间:2018-7-25 18:59:43
本帖最后由 radio2radio 于 2018-7-25 19:14 编辑 ! ], ]% L) W2 K( B$ g. {
huangxuejia-292 发表于 2018-7-25 15:004 r0 {2 \0 C; x& T) `
改好了,调试能复位。
6 Q& Z# \7 w" AMSD(U盘拖放)无法复位。。。

0 G* j* V/ d; F+ ~0 h, t你看看优盘拖放是不是后台运行的,要等优盘拖放完成之后,插入一个时延(100ms),调用一次vResetTarget,一定行。, H7 j2 x7 y% G" a
dreamfly239 回答时间:2018-7-26 10:38:40
很受益啊,希望楼主继续分享有价值的资料
shanji 回答时间:2018-7-27 10:01:49
radio2radio 发表于 2018-7-17 17:20; F2 R: y$ u. ^
搞定没有?

- r* Z3 Z( p* [, r* q% ^还没有,不去折腾了
hi201803 回答时间:2018-7-27 17:01:25
radio2radio 发表于 2018-7-24 21:21
( Q8 c/ F0 K/ r; W$ f这个简单,在main.c的最后面一段,我拷贝到这里:
. I. |0 b2 q% x: i! ?8 s' q% ~! 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
  Q7 f/ U4 o" s! a4 b8 g7 V请问楼主是用哪个版本编译的?

  \9 w- R4 e! k- X  ?$ jKeil 5.xx,留意第60楼,ARM CMSIS要升级到V5.3.0
radio2radio 回答时间:2018-8-7 14:32:12
本帖最后由 radio2radio 于 2018-10-27 12:29 编辑 4 X; ^) C9 p$ ^) z4 k& R- Y

% _0 g& N; p/ ]9 ?7 i, _0 ^) k刚刚发现,一楼的原码包,USB文件夹里面,少了一个 “USB_CM3.lib” 的USB库文件。
$ `5 l# J4 e0 z: m' g我自己的硬盘上面就有这个文件,但是上传github后,这个文件就是没有上传出去,我后加也不会加。4 h' l/ O" K6 P$ c2 [

0 ~; s: j7 Y+ ~$ u/ q$ }5 |我不知道为什么,记得第一次上传时,*.hex固件文件就是不给上传,后来我压缩成rar文件才传上去的。6 m: T1 D7 l' B
哪位熟悉github的大侠,告诉我如何上传(.lib/.hex)等文件,谢谢。
5 d% G4 P4 y: j
3 u: I: r2 Z- H" U$ i. J* U# X没有了USB_CM3.lib库文件,肯定不行,下面的3个方法都能解决:
& T% r( Q/ K$ i! N/ \3 f0 W方法1,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。拷贝到.\USB文件夹。
' g8 o; }* O, P6 D方法2,在C:\Keil\ARM\RV31\LIB目录里面,可以找到此文件,2016年的,248KB左右。将此文件添加到工程里面。' K  w5 U; E/ v+ j
方法3,在其他地方拷贝一个,加到.\USB文件夹。本楼的附件就有一个,方便有需要的。
/ Z/ G3 T- S1 w5 F% a
& K: K' L* i% u4 t! Q: }4 a6 d(我的github已经更新,使用方法2)! Q) n3 W3 i8 e0 D
4 j7 n% d- i. ]8 E
这个问题已经解决,是我第一次使用github,还不熟悉,经过网友提醒,需要在github的上传过滤文件里面,修改容许.lib/.hex等文件的上传。
! Y; m' v( W" ?* r: [, S$ ?( u6 G6 z) ]8 A  f% W
1 N! Q5 C' N8 z2 x& ^0 S: Q1 c

USB_CM3.rar

下载

63.75 KB, 下载次数: 48

所属标签

相似分享

官网相关资源

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