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

【源代码】STM32F103C8T6最小板搞定CMSIS-DAP和SWO功能  

[复制链接]
radio2radio 发布时间:2018-5-31 15:47
2018-06-30重要更新,附件换成了源代码。
, s* {  Z! ?" Q9 v0 H% R+ q2018-08-29附件更新,与github相同。
4 V  Q$ O: m- E: J3 `2019-12-24重要更新,速度提升,功能不变。6 c, g. s4 x% Q$ s. ~" k
; }0 y' P+ ^- s  B: ~' {, V9 Q0 {
github:http://github.com/RadioOperator/STM32F103C8T6_CMSIS-DAP_SWO
* X) f6 @( W" @  c3 @  f
3 X3 E- y6 j8 n' M% Y----------------------------------------------------------------
: v6 @; z% D  c1 f# L' k" `7 D; C2018-06-13更新,搞定Cortex-M的软启动,不用连接RESET线,下载后Cortex也能马上自动开始运行。# ~' [. W* G/ z9 W9 Y

' I% U+ C$ |! w! J7 R5 G10元钱能干什么?也许早餐都吃不饱。 可是10元钱在TB可以买到STM32F103C8T6的小板子,著名的BluePill。
( l8 R' \: N" ]

BluePill

BluePill
9 I% \, r- _. Y4 T1 U. b
几年前,X893大神就移植过了CMSIS-DAP到F103上面,我觉得这个很好玩!!!
& V! T5 j! z' `% A; f$ N3 S' B+ w  b' Q6 c% r# R
于是我就花了一些时间,在X893包的基础上,做了如下改进:
6 w+ Y5 {) J$ ^# O1. 升级到CMSIS-DAP v2.0最新版。- U+ G  e+ I7 Z( D1 Y& T8 w
2. 实现了SWO的主要功能,即printf转发至SWO口。
6 W4 f6 ]8 W; P' f# l: o3. JTAG功能正常。
8 O0 N3 V, o0 o8 D+ W* k8 }, {& ~4. CDC功能,使用串口2(PA2/PA3),已经改进。+ c4 ~6 d7 B( }4 y; c9 S8 n
5. 实现了软启动功能,使用时可能不需要Reset连线启动程序。3 o! ]9 j- r6 N$ L
6. 针对STLINK的廉价硬件,做出了改进版本,稳定。( O6 [' \5 p  J5 `

# I% P* H) q/ b* h$ i% I/ r HW_Connections.jpg ' W6 O1 {/ r- i- a

: z+ C+ z* ]& b) K9 v, G* q 1.SWD_Remapped.jpg , d6 m5 U' I" {# W

( Z' ]* |/ o& H/ C# {9 Q2 g# a" k1 }. {6 [  L- k1 ~
STLINK-01.jpg
5 z% h' D5 [* r3 [$ F; t* M; s" F7 e
STLINK-02.jpg % B/ i* E) v. _6 c; m3 }6 I& W

% ?2 H2 Y: m* y. k STLINK-03.jpg
! v! O3 U: e" X
' H: N- {& B2 X0 R7 p: H3 c Schematic(part) STLINK_V2A_V2B.jpg 6 z+ i- I' Y, ?0 l9 @; a
8 |' v! ^& k' }( a1 S) j3 c
Readme6.jpg ) ?# M: ~: K& Q  I! f! T; |
- N( m4 z/ g. m% v! f. {
4 Q( Q9 J% w( L$ w- s0 I% T4 w7 R
注意,现在原装ST的F103不好找了,市场出现大量使用山寨的F103的板子。; S% f/ ~" n$ e, b) @6 p& M
山寨的F103有几种,已知的一种是CS32F103xxxx,另一种是GD32F103xxxx,有的甚至直接打印成STM32F103xxxx冒充原装,无法分辨。

$ k7 ^5 m/ X' A% E: ]5 K& \即使卖家声称是ST原装的,也不能完全相信。7 X% p% Y2 z5 t0 i$ K, \2 |& t
, N3 N, v- o- o, D$ l& n" a1 n2 M
固件见附件,附件里面有两个LED的闪灯程序用来测试SWO功能用的。3 _/ d8 c1 Q* U( z' ~
使用SWO功能,需要启动内核的ITM功能。不同调试环境,启动ITM插入源代码的部分,可能有区别,我也不是很明白。
  A, X4 m* i* i% C: J
' s% F; d* j& @, M
; r* _+ V, @. B. l7 e, s8 ?& \
/ G! c5 Z3 n- e' C# }1 ^

STM32F103C8T6_CMSIS-DAP_SWO-master20200509.zip

下载

3.48 MB, 下载次数: 9661

评分

参与人数 7 ST金币 +40 收起 理由
迟到的梦想 + 1 很给力!
xiaoshen-372360 + 10
toofree + 10 很给力!
我的人生我迷茫 + 1 赞一个!
玉宇swh + 2 赞一个!
wofei1314 + 8 赞一个!
子曰好人 + 8 很给力!

查看全部评分

1 收藏 45 评论417 发布时间:2018-5-31 15:47

举报

417个回答
radio2radio 回答时间:2021-1-28 18:01:27
ricklou 发表于 2021-1-27 23:00
6 r- }. C0 y2 z" [2 u( j可以把nreset映射为dtr或rts吗,很多软件走的是com协议,或者告诉我如何触发复位信号 ...

- i5 Z4 e0 u9 W' _1 D9 s- knRESET是受使用CMSIS-DAP的IDE的逻辑控制的, 不能随便修改。
* H7 M* l+ R' u8 [3 ?6 s- [你要的功能应该不是一定需要走nRESET这条线, 随便找一条空闲的GPIO,模拟一下DTR/RTS,很容易的吧。
) x# f* L8 g7 `7 A( d# j0 G( B
1 D1 c- G8 Z/ J" p) L+ D8 t你用的功能好像只是用USB转串口,那么就应该使用USB-VCP的程序来改。
7 B4 V& R. ]8 e或者买一个有DTR/RTS线的USB转UART的小板, 便宜得很, 5~10元一个。
: {7 ~) W& L' S7 C; l# z7 d% e
3 h/ y% y/ l7 O5 X4 K* G% K  ~2 m# N! f
happyavr128 回答时间:2020-2-4 17:26:56
楼主大神啊!
kernerl 回答时间:2019-12-7 13:30:15
找到一个可以编译通过的文件,不过好像有个DAP_config.h这个文件的版本不一样。

CMSIS-DAP.zip

下载

1.6 MB, 下载次数: 129

radio2radio 回答时间:2018-10-14 02:01:43
FireHero 发表于 2018-10-9 17:18# J9 R1 \* ]' s5 p# X% ?. {
楼主你好,我下载了github上最新的代码,安装了Keil4兼容包之后,可以正常编译下载! [) G9 n( z+ A( i1 D8 H4 q; Y
+ P9 M9 M4 F5 v6 L- f
下载到板子上后,USB插 ...

* D4 T* R2 F! y( B7 U0 y不好意思,今天才看到,匆匆做了一个,您先试一试。可能问题多多。
5 p7 l1 B7 [% l: ?4 ]( F
% l9 P6 U) j' R1 \3 ~: |0 m- v我是用BOARD_V1的环境改出来的,发现原来的BOARD_V1就是一部分代码有问题,因为我没有这个硬件,没有办法验证,只能由它去了。 主要是这种板子占用了PA2/PA3的USART2,CDC只好搬到USART1,比较乱的说。您先用用看。
4 ~0 \+ p, x4 T$ X, |) v+ H附件的代码,我在SWD模式在F103目标板测试过,CDC测试过,都正常。
. u$ M- N: j5 e' s) {) v/ `/ lJTAG模式没有测试。! h  J1 t- n3 ~! M
, Z) o' s" J+ \! I

F103-DAP-SWO-CDC-BOARD_V1.rar

下载

29.59 KB, 下载次数: 257

点评

谢谢分享  发表于 2019-3-25 00:53
漫步云端-345339 回答时间:2018-8-8 10:58:03
huangxuejia-292 发表于 2018-7-25 15:00" Q# X- P3 i9 X1 J/ q; ?
改好了,调试能复位。
4 v9 W4 }, }& ]0 E2 fMSD(U盘拖放)无法复位。。。

! V$ @, B4 }! m6 a你是用的STM32做的DAPLINK吗
radio2radio 回答时间:2018-6-15 13:54:57
bjrzs 发表于 2018-6-15 13:40% s" O* a; {1 Q3 F( {; O- X
请问,这个最小系统板 通过USB 口接电脑,需要什么驱动程序呢?
9 A$ @! A1 ]- d" H; p5 q
通常不需要专门的驱动程序,CMSIS-DAP仿真器是使用Windows的HID接口,使用Windows自带的HID驱动程序。我试过Win10、Win7,没有问题。' d: _& c0 R) R) l2 C& b+ @& l
(留意USB的线缆要用质量好一些的,和短一些的,以免影响USB的信号质量,市面上太多廉价+缩水的USB线!)
0 r  Q" a6 C" h4 M5 p. t
0 w: t* C' `' z) v! pCDC功能,Win7需要安装一次驱动,文件在源码包里面有。5 L0 _' \/ f$ g3 U* R# r% g% u, m0 _

8 l* g$ }; j4 w( E
七哥 回答时间:2018-5-31 18:06:32
强力支持,楼主厉害
yangjiaxu 回答时间:2018-5-31 20:01:24
有点儿意思啊 支持楼主
radio2radio 回答时间:2018-5-31 22:18:42
使用SWD-SWO调试程序,是Cortex-M3/M4等高级ARM芯片特有的内核CoreSight独有的。) @6 R( Y4 Q# A. K9 X
优点:
. C5 F7 @0 d! e. F5 V) e# ]1. 对原来程序的时序影响很小。/ E" n, e) _2 O4 K
2. 仅多用了一条SWO线(JTAG的JTDO线,F103是PB3引脚)。% ]5 R0 Y1 o* Y, J* B6 y
3. 不占用串口,却可以方便地使用【printf】功能打印输出。% W" j, {; a  E" Y& X$ n7 s5 {
4. 速度快于串口,我测试过我这个SWO板子,500Kbps可以稳定输出,不丢数据。7 k( i6 u8 e1 O0 z
5. 其他SWD/JTAG的断点功能,查看内存/寄存器变量功能,都有。& |, t3 ?7 F* Y; W6 N# g
6. 烧录程序,和J-Link/ST-Link一样。
6 [& c- b: x+ }3 T# X7. 成本低,10元的小板子,烧入固件就成了。不用再便宜了,路费人工都远不止10元。
. |( P  p9 J% {% ?" ]# y- X8. ARM开源的,随便集成到你的开发板上面。
& ]! W/ ]0 u* X$ n8 O2 W8 `" Q6 G
( n8 ^* R3 t: {" n0 P! Y, n# I缺点:
, |- C. o+ R9 Q. H$ g" s1. 速度比J-Link慢,因为F103的这个小板内核速度不够快。下载速度不知多少,10元的能用已经很好。
* H9 t6 f# l0 F9 c/ I2. SWO功能只能用于Cortex-M3/M4/M7......,不能用于Cortex-M0/M0+(内核不支持),其他功能可以用。
2 r% \) m$ [; z6 |# H3. SWO功能只能用来单方向输出数据,不能像串口调试那样可以和上位机互动。
* y6 p8 F( I2 B7 c- ^  ?9 p4. SWO功能不支持目标程序中的DMA部分,估计是ARM的CoreSight有限制。3 ?2 _+ a, C3 K
5. 不支持软件复位。我改的软件,20180613版(见1楼)已经增加软件复位功能,只支持Cortex。
, q; h2 y- q: z& E! A! Y6. CMSIS-DAP的最高速度,还有功能,应该受限于ARM/KEIL的限制,不然商用的几千上万元专业仿真器还怎么卖?
. p4 b% ?0 x) |* A# N, m4 w8 k6 M
# J. m2 q& {- a3 e我的板子:4 F) j" [3 ]2 T4 t  A% l0 o, g7 I6 D
SWD mode:                                                        PortNo
" {7 ~' q4 @8 D: T5 c3 P1 e7 K7 D                                                SWDIO              PB9
: ]* _7 Q# }! m7 N0 B4 l/ y                                                SWCLK              PB8: |& }0 J) J7 G8 x8 n
                                                SWO                 PB76 N8 G* X, i( g% J
                                                nRESET             PB67 s' L, V/ X5 I1 s: j! O# x
JTAG mode:& B1 q4 O6 J7 [; D1 y
                                                JTMS                 PB9
# }2 T. K% _0 u+ J2 x2 ?; i                                                JTCK                  PB8! [" y3 k! j$ X3 f
                                                JTDO                 PB78 y! W& B2 p  ?* b% j) d# D# W- E
                                                nRESET              PB6
" k3 h$ g5 X: c; ^9 Q5 ~; l) R- [                                                JTDI                   PB56 d, F/ R9 Z4 ?) Z* v( R( G
                                                nTRST                not available/ r8 z+ o+ i- Q( D/ M& k8 s! V& t
                                                
7 r+ `  i/ N9 B# Y/ T5 Z- pCDC Function:4 j' f2 A! d7 p. X( A& s( M
                                                UART2-TX           PA2; }4 q5 n! c4 ]
                                                UART2-RX           PA3
; u: k- c: N- Y1 s3 {+ s                                                ' [! Q  ~" v' p! X9 I2 E( E
------------------------------------------" p5 x- f! f3 `9 L7 o- \: [
SWD Test passed!
  i' [; Q/ X+ fJTAG Test passed!( w& t% i  b6 s% O. N

" }* A* F2 x0 g# J" tIndividual test results:
/ h4 F: C" ~2 j; O4 F1 ~Execution breakpoint: passed
0 J* o: B! c: \* jBreakpoint on read:   passed
: D% G/ K' K* V; O: q/ L% Z* qBreakpoint on write:  passed
2 S: _" g; y$ ERegister read:        passed) B6 @* C/ c1 S1 t% V" \7 `
Register write:       passed
! W$ g4 V$ u/ i: zMemory read:          passed8 x8 {% i% x* {3 ^- `0 S
Memory write:         passed2 Y4 D* v+ s  ^: k
Control flow:         passed0 e0 ~6 t9 s) Y
: m8 `. n8 c4 D
CDC function:            OK+ ?: B7 R( V" n5 W* v6 a
SWO function:           OK for printf-to-SWO
! K8 Z( t- r  C0 ~8 k( Y+ D2 B' zSoft-Reset function:   OK for Cortex-M' {& J! Y8 k/ G4 O% ^  j' y; X$ m
-----------------------------------------------------------------------------------/ n3 _0 R9 J- A% M( w" z
+ u& d3 d+ ^. K# E7 Y
另外,安装时,HID不需要驱动。CDC功能,Win7需要安装1楼附件包里面的驱动程序。5 R5 p6 |& N5 }" T6 n6 G) a4 L2 d

5 z- A  o' u4 v% b3 N9 ?6 j
radio2radio 回答时间:2018-5-31 22:56:47
本帖最后由 radio2radio 于 2018-7-15 00:11 编辑 $ K( z5 D0 ^: b7 u

  W( t% p; K" g+ g8 v有关CMSIS-DAP的项目,在硬件成本超过20元的板子上面做没有实际意义,这也是我集中精力做F103小板的原因。
. Q# ?2 p0 f$ [2 M50-100元,可以买到A货的J-Link v9, 性能比CMSIS-DAP好。) [  ?# u( d* P- N
160元可以买到正宗的LPC-LINK2(CMSIS-DAP的高速USB版本,开源的)。
( {& K1 n% c2 d* `! r2 A  `8 P1 C5 v% C- f) `0 V8 x( \
1楼的附件里面的源代码,或者固件,也可以选择重定义SWD引脚的,这样用起来更像“真家伙”,特别是只用4个引脚的时候。3 t; h6 p6 y" `
(选择SWD_REMAP后缀的)& H2 x  s4 ?6 N6 b' |' h1 j) v
1.SWD_Remapped.jpg
9 S0 R1 ?7 u' Q
-- 回答时间:2018-6-1 17:38:58
厉害了,我现在用的一个dap,没有软件复位,必须接硬件复位,然而接上硬件复位,完全无法识别' X" K. R, \* F! ]% M; F5 \
CMSIS-DAP v2.0 有没有软件复位???
radio2radio 回答时间:2018-6-1 23:46:18
本帖最后由 radio2radio 于 2018-10-27 12:11 编辑
4 c; y5 n( `4 F5 q) Q% k+ Y
gzbkey 发表于 2018-6-1 17:38
1 }7 I/ R6 X+ ]' w0 T厉害了,我现在用的一个dap,没有软件复位,必须接硬件复位,然而接上硬件复位,完全无法识别
$ F4 p) D- X7 ]: I& t0 e  jCMSIS-DAP  ...

# }) o' o* p  |1楼的最新版,已经加入了软件复位功能,仅对Cortex的MCU有效。
5 m) P" B% k' h$ M. a4 J+ s( B
suncl110 回答时间:2018-6-3 08:54:11
楼主,这个只是HEX吧?有源程序,仰慕一下吗?
zwei99999999 回答时间:2018-6-3 10:08:35
wujique 回答时间:2018-6-3 12:18:09
百度或者淘宝反客科技,他们做的DAP,修改了固件,带软件复位,但是他说肯能只是针对特定内核,因为不同的内核软复位指令可能不一样。
wujique 回答时间:2018-6-3 12:44:55
官方的CMSIS DAP已经改名叫做DAPLink了,大牛可以将DAPLink移到SMT32,网络上已经有人移植,但是好像没有放出来。4 t6 H9 J' s* K
  ^6 v) e- H$ x. n% J7 T
DAPLink的硬件github仓库已经有STM32F103C8的原理图,但是固件仓库一直没有STM32版本。
% Z8 o0 W$ t# t8 d6 e! a0 @. `4 [0 Z( j* s6 m" m7 S
我觉得二三十块钱用DAP还是可以的,V9毕竟盗版,有时还丢固件。
" w0 M# s3 j1 _+ O0 W1 t! d  w2 U2 p9 N2 C$ B" s! X7 ?. P) @2 C
DAP现在一个比较大的问题就是MSD,一个目标文件一个固件,烦人。
1 d# e6 P- Z, C: B$ ~/ W& ]+ t0 j2 E0 H( Q8 N1 K% e0 g& o7 F8 \5 K4 k) P
实测KEIL下载一个2400K的axf文件,擦除,编程,校验,大概26秒,这个axf对应的bin大概297K。! H# r4 ]+ T$ S! \7 b
radio2radio 回答时间:2018-6-3 13:56:33
本帖最后由 radio2radio 于 2018-10-27 12:13 编辑 * `& U5 c. Q- z2 C- M: }
huangxuejia-292 发表于 2018-6-3 12:44
  }8 \3 c( Q  j) H官方的CMSIS DAP已经改名叫做DAPLink了,大牛可以将DAPLink移到SMT32,网络上已经有人移植,但是好像没有放 ...
2 u2 b- i1 h' S! I2 u0 N; Q* ]. ?8 ?2 X
我也看过DAPLink,它要求有较大的RAM/ROM来模拟U盘,STM32F103C8的资源有限,我估计github没有的原因是这个问题。
, }$ D1 ]8 j6 |8 M. z: zDAPLink的底层关键部分还是CMSIS-DAP,目前用v1.1.0。6 \1 y9 l/ t: {7 W. x
radio2radio 回答时间:2018-6-3 20:25:58
本帖最后由 radio2radio 于 2018-6-26 16:02 编辑 ; }& U9 q, _. M
* L& P. C6 S& J& z& r6 S5 N
今天测试过一些IC开发板,) V& D5 {1 K" w
! N2 M! \2 L* t$ G, [9 I
1. 两款STM32F407xx的板子,JTAG/SWD正常,SWO正常。
6 K) j6 M" r: o4 R7 g; |2. LPC824的,正常。3 \7 Y  l$ p, B+ {2 [0 [, z
3. nRF51xxx的一款,正常。' T. K% ?  B0 @1 b8 L$ _

( X, {& q& k# J8 R* d# {2 ~重要提示,由于这种F103最小板的GPIO脚,没有加任何抗干扰的退偶稳定元件,都是直接连接出来的,所以,高速运行时很容易被干扰。. |8 t) I' p; B
建议不要使用长线连接和排线连接,使用分开了的短线会效果更好。 如果直接应用到您的项目之中,建议几条数据连线外加退偶零件。
; p' ]) g) D: R3 p( p' J) f如果做成专用的成品小板,留意这一点,就不会有问题。; Z6 h+ v3 H, s+ D: U' {; Z

% i6 x: y6 F: `/ {' j简单的解决方法,* y8 B* {  Y! C
1. 在Keil里面设定低一些的速度,我测试过,设置速度10MHz与1MHz的下载速度差别只有20%,建议使用1MHz。* A3 h+ H2 J: @7 k
2. 在每一条数据线上面,串联一个47~100欧姆的电阻。
* H' M7 K5 v* x/ }8 F6 ^* T. R) J

: b3 F) u3 T7 S; o7 e& S
wujique 回答时间:2018-6-3 21:39:09
我做过X大神的DAP,也是103。用40cm的杜邦线,没有干扰。
) `2 D3 z* h3 b# ^2 x1 c上位机关闭串口或者关闭串口工具,不会出现死机啊?: _9 }/ x" V3 H3 {7 q+ b
CDC长期插在电脑上,串口确实会死掉,电脑收不到DAP发出来的数据。
* J- k8 {' y% L% [3 Q对了,X大神固件有个串口溢出的BUG。% `- O9 X- h  |" i4 U9 i/ y% q
我可以寄两个我的样品给你看看,不过我没有引出SWO。
radio2radio 回答时间:2018-6-3 21:59:24
huangxuejia-292 发表于 2018-6-3 21:39
' o5 S% W, r+ s我做过X大神的DAP,也是103。用40cm的杜邦线,没有干扰。
+ [& k  |2 P* H6 u上位机关闭串口或者关闭串口工具,不会出现死机啊 ...

6 C$ n: t5 R* }6 w, Z$ V谢谢,您再试一试,我用回X893的代码,CDC死机问题一样有,证明不是我改动后出的问题。$ c8 ?  v4 n  s6 O
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版