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

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

[复制链接]
radio2radio 发布时间:2018-5-31 15:47
2018-06-30重要更新,附件换成了源代码。# z  m' r# Z3 _" ~  H1 ~
2018-08-29附件更新,与github相同。! l; D; ~5 h0 z7 Q0 K6 y
2019-12-24重要更新,速度提升,功能不变。
  i0 B3 E7 t2 p% q$ p9 D( I/ e$ P) i8 D# X
github:http://github.com/RadioOperator/STM32F103C8T6_CMSIS-DAP_SWO
. r9 e$ a& i' q: l) X- u
( J+ l* y/ _* W----------------------------------------------------------------
* o; Y& _+ H6 ~; K2018-06-13更新,搞定Cortex-M的软启动,不用连接RESET线,下载后Cortex也能马上自动开始运行。# g4 ?# G  I& }- z0 ?5 c
. h. y9 f4 u, K0 N7 X0 ?
10元钱能干什么?也许早餐都吃不饱。 可是10元钱在TB可以买到STM32F103C8T6的小板子,著名的BluePill。
4 B) l/ b( n7 {- b5 q  f

BluePill

BluePill
" @! M1 F8 W' N6 [9 R, _/ H: s& _' M
几年前,X893大神就移植过了CMSIS-DAP到F103上面,我觉得这个很好玩!!!3 D+ q" B- {3 W
9 p' G. n( g, c8 W0 k( _. z
于是我就花了一些时间,在X893包的基础上,做了如下改进:
/ U/ {* b5 |- o0 {1. 升级到CMSIS-DAP v2.0最新版。
, u6 d$ h4 k: I7 ~2. 实现了SWO的主要功能,即printf转发至SWO口。7 F! a- Z0 O! z) |  @1 n# n
3. JTAG功能正常。
7 C1 @* w9 f7 d1 l: s4. CDC功能,使用串口2(PA2/PA3),已经改进。- _* d9 q* w1 U* n) U
5. 实现了软启动功能,使用时可能不需要Reset连线启动程序。  h  `7 I# X" j7 G
6. 针对STLINK的廉价硬件,做出了改进版本,稳定。
0 |# N2 f% S9 y0 J" o: L" D5 T
. e6 D; i8 _. v. s& \9 Y8 u HW_Connections.jpg + B) P% Q8 R$ j+ w! h* k  h  U4 {
/ B8 k1 n3 D$ l% N2 b4 V) Q  k
1.SWD_Remapped.jpg
) f, M: }9 t# N3 ]! |
' K) K/ w) t3 S! Y$ B5 s; o1 g  {+ r; F9 T
STLINK-01.jpg
0 f, z% l7 \/ Q+ p# _! L' r) M5 q! _
! V+ _( x3 `! G STLINK-02.jpg
/ O" U' p8 R: p" S! S; W! D$ A
0 L- r; F( M7 L3 G" h' I( v STLINK-03.jpg 3 P( _0 s- S. ?# q

5 `6 R  [& M+ B& Y. n Schematic(part) STLINK_V2A_V2B.jpg * t/ U: R! x0 n. j, H

7 t4 f: q0 U, h0 ^) T- H, D5 [- c Readme6.jpg
4 n' C( P; w  g, o' z5 ~! \1 f
; x3 y; W) g$ y. p9 o  Z- P( ~
: k6 P* B+ M( A( V3 x注意,现在原装ST的F103不好找了,市场出现大量使用山寨的F103的板子。; @5 w5 O$ B2 q6 X/ m3 C) c& f
山寨的F103有几种,已知的一种是CS32F103xxxx,另一种是GD32F103xxxx,有的甚至直接打印成STM32F103xxxx冒充原装,无法分辨。
2 y5 m' z4 P( T  Z1 V: O
即使卖家声称是ST原装的,也不能完全相信。+ O7 Q5 D0 G! O* f3 W9 D
0 i  `4 Q% C+ o" @  Y: T6 p. ~$ ?
固件见附件,附件里面有两个LED的闪灯程序用来测试SWO功能用的。) p3 f( [3 }8 E: Z! H
使用SWO功能,需要启动内核的ITM功能。不同调试环境,启动ITM插入源代码的部分,可能有区别,我也不是很明白。
0 F+ t. ^1 I  N5 Q6 L. l& [9 ~/ n/ C( [

; l3 e( v( d9 N3 c
' p* h! w1 m3 k' q3 M; w

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
' j4 ~9 c% z; }* c9 Q* D可以把nreset映射为dtr或rts吗,很多软件走的是com协议,或者告诉我如何触发复位信号 ...
, |% ^8 \6 F* `; h( E# q
nRESET是受使用CMSIS-DAP的IDE的逻辑控制的, 不能随便修改。
8 a! m4 M" a1 \+ z0 s1 E你要的功能应该不是一定需要走nRESET这条线, 随便找一条空闲的GPIO,模拟一下DTR/RTS,很容易的吧。
+ r4 C6 u$ R: S8 z* Z: R- n8 E1 w* j3 T) _* i( ?6 _% G6 J" i
你用的功能好像只是用USB转串口,那么就应该使用USB-VCP的程序来改。
- ~6 b0 ?- R" Q. V2 S" T: l或者买一个有DTR/RTS线的USB转UART的小板, 便宜得很, 5~10元一个。
' N4 E8 h5 I7 @* J2 U+ V) ~  k) b6 {9 E& c# p/ p

. T/ u; G/ q! B- z
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
# q! N' E: V5 m' S" G3 _4 r楼主你好,我下载了github上最新的代码,安装了Keil4兼容包之后,可以正常编译下载
2 L# h2 b, J/ T, Z& b5 u/ N2 |7 m# t" @0 n3 q' r' d
下载到板子上后,USB插 ...

1 M. c6 k; E; `# q1 K, K不好意思,今天才看到,匆匆做了一个,您先试一试。可能问题多多。
- ~: P% R8 L; U; T) u' a  R+ S% w& t! O; R" b# B! k
我是用BOARD_V1的环境改出来的,发现原来的BOARD_V1就是一部分代码有问题,因为我没有这个硬件,没有办法验证,只能由它去了。 主要是这种板子占用了PA2/PA3的USART2,CDC只好搬到USART1,比较乱的说。您先用用看。
4 v8 `' C. }5 Y& x8 x6 I4 a附件的代码,我在SWD模式在F103目标板测试过,CDC测试过,都正常。
) @4 u) v$ h; c& K  N7 b$ ?JTAG模式没有测试。, B: b; N4 {& W' C0 l4 i, _3 f

1 U$ C! L/ X- X' a$ l

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
4 E9 t2 ]/ k  Z( E2 h改好了,调试能复位。+ s  @1 S: C/ z+ O5 P
MSD(U盘拖放)无法复位。。。

" p: \" t: {6 b+ R' a你是用的STM32做的DAPLINK吗
radio2radio 回答时间:2018-6-15 13:54:57
bjrzs 发表于 2018-6-15 13:40- S! {! H( O. ~6 h7 J. c) }* ~
请问,这个最小系统板 通过USB 口接电脑,需要什么驱动程序呢?
' D* ]  @/ M) Y6 T/ l+ o$ K5 p# b
通常不需要专门的驱动程序,CMSIS-DAP仿真器是使用Windows的HID接口,使用Windows自带的HID驱动程序。我试过Win10、Win7,没有问题。
" {8 T2 k7 t3 R) Y  Q(留意USB的线缆要用质量好一些的,和短一些的,以免影响USB的信号质量,市面上太多廉价+缩水的USB线!)7 }7 S" x0 l( F, }" h

) b9 k: z( |" E' e* O1 [  |' JCDC功能,Win7需要安装一次驱动,文件在源码包里面有。2 V7 H" p0 V- ~

! k- T. t& x  ^5 j+ z
七哥 回答时间: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独有的。; G) P* B; _' {/ ?9 {" l) T! K! Z
优点:
1 i( {& e1 Z) v. }; s6 X1. 对原来程序的时序影响很小。
8 p# ]* W5 Y& B5 T! p2. 仅多用了一条SWO线(JTAG的JTDO线,F103是PB3引脚)。2 \6 u8 {4 G/ ~# u, K- k
3. 不占用串口,却可以方便地使用【printf】功能打印输出。
$ i* H: `. A/ a' l# K% t5 ]; {. {4. 速度快于串口,我测试过我这个SWO板子,500Kbps可以稳定输出,不丢数据。
4 ^9 I# F/ e# ?) W$ ~# X5 e5. 其他SWD/JTAG的断点功能,查看内存/寄存器变量功能,都有。
' J* L4 N, L* P4 F, l# g& e1 c+ o6. 烧录程序,和J-Link/ST-Link一样。
/ Y/ {' A9 {# w2 F7. 成本低,10元的小板子,烧入固件就成了。不用再便宜了,路费人工都远不止10元。, x6 r$ u& n# C
8. ARM开源的,随便集成到你的开发板上面。
3 t  w/ x+ }# {9 w( D& k
5 r5 M* R" W+ H" U/ m缺点:  f" s  o8 P; V9 l4 G2 x. E
1. 速度比J-Link慢,因为F103的这个小板内核速度不够快。下载速度不知多少,10元的能用已经很好。' I" _- X) F) N+ i7 }
2. SWO功能只能用于Cortex-M3/M4/M7......,不能用于Cortex-M0/M0+(内核不支持),其他功能可以用。, t  E& V' J2 [7 {. T% W" C- M) N
3. SWO功能只能用来单方向输出数据,不能像串口调试那样可以和上位机互动。5 f3 {3 T/ U9 o& p0 l' y
4. SWO功能不支持目标程序中的DMA部分,估计是ARM的CoreSight有限制。- L0 p" _' K* u& O* L
5. 不支持软件复位。我改的软件,20180613版(见1楼)已经增加软件复位功能,只支持Cortex。! b9 f7 C9 O* _7 t6 |
6. CMSIS-DAP的最高速度,还有功能,应该受限于ARM/KEIL的限制,不然商用的几千上万元专业仿真器还怎么卖?7 }5 N& D9 o9 J8 K3 u

) A! e/ ~  s0 C5 s' L& v我的板子:
$ M- w% n& K) Y& c- B. S) F0 ~' FSWD mode:                                                        PortNo
& T2 B0 X6 k+ O+ a                                                SWDIO              PB9
  {& @( X; n2 ?, o# G                                                SWCLK              PB89 V7 k8 D+ `# B/ |) n$ ~7 [
                                                SWO                 PB7/ s8 V$ U% {" h0 u( M
                                                nRESET             PB6
) a0 z& A  X+ R1 t+ J' W. U" s* J/ RJTAG mode:* [9 r7 W* T7 [" f+ D
                                                JTMS                 PB9
4 t! X5 S. b9 ~7 P* s* O3 X                                                JTCK                  PB8
2 e# h7 x$ R0 P2 ], R+ f, q                                                JTDO                 PB7- [3 S; s2 D) ?6 ~6 w
                                                nRESET              PB6" y' }) }  @# r5 G
                                                JTDI                   PB5
0 B1 f0 w7 [7 h' Q& R                                                nTRST                not available
5 Z- a7 ^$ a6 Y9 O% N                                                4 N% u% F0 D3 U2 T1 ^" A1 q/ U+ Y
CDC Function:. \2 Z" l% n9 d  {# d9 h  ?3 T& b
                                                UART2-TX           PA2, \. t2 `/ y, e1 E
                                                UART2-RX           PA35 W9 t# K/ E) I% I0 t: O
                                                
7 ]7 k) s, }2 E0 o. h8 D$ e' [------------------------------------------$ |" L! n: G' G* g6 ^
SWD Test passed!: I. i; l/ V7 b4 g; M+ [: B
JTAG Test passed!
: j3 }5 U* Y$ v0 R* Q% ?$ J9 o6 m4 V' d9 p' [" Z- B* B
Individual test results:
! h/ N* \& `, e# L* R& R' B! V) o5 bExecution breakpoint: passed7 m: F. W: Q2 Q3 A3 V& s* }
Breakpoint on read:   passed
& `6 ^/ \; s, f( F' n  jBreakpoint on write:  passed
# Y: ~* u+ S) O5 g) l7 KRegister read:        passed
+ N! C9 ~0 w7 B5 J8 ]7 {+ [$ n: xRegister write:       passed
% a$ r6 `3 ~2 I1 [, a# eMemory read:          passed, n; D, S/ k) p% l
Memory write:         passed5 }3 l: [! r: A* v. b0 M! Y
Control flow:         passed3 R4 U4 S  o3 k( N. b
! k8 V& X; O6 F
CDC function:            OK# M1 B& Y8 t9 C0 v) _- h
SWO function:           OK for printf-to-SWO% A: D: f7 ~+ e, ~5 C% Q
Soft-Reset function:   OK for Cortex-M
6 `: ]( B) E' S$ _8 |3 J-----------------------------------------------------------------------------------7 s8 L( v6 B# C9 X# ^; Q

2 a! D- X3 o2 [# E& I另外,安装时,HID不需要驱动。CDC功能,Win7需要安装1楼附件包里面的驱动程序。  |% @! U2 i1 ^5 v3 z

! S# e9 H6 s7 J% J4 a
radio2radio 回答时间:2018-5-31 22:56:47
本帖最后由 radio2radio 于 2018-7-15 00:11 编辑 & m$ D% S4 L, V. |, T3 ^$ f( z$ O
* e* T! x* O) f
有关CMSIS-DAP的项目,在硬件成本超过20元的板子上面做没有实际意义,这也是我集中精力做F103小板的原因。* E% X# P4 n! n9 j% o  Q
50-100元,可以买到A货的J-Link v9, 性能比CMSIS-DAP好。9 s* Z% s/ K; D" ?% f# G; a
160元可以买到正宗的LPC-LINK2(CMSIS-DAP的高速USB版本,开源的)。
% c& u& N6 Q! [  j5 G" H
1 I5 z1 B& t" t& W1楼的附件里面的源代码,或者固件,也可以选择重定义SWD引脚的,这样用起来更像“真家伙”,特别是只用4个引脚的时候。
- F" j8 u! q1 Z1 @(选择SWD_REMAP后缀的)3 P; O/ U8 _6 h" D: T
1.SWD_Remapped.jpg
! w. C  t& D, u" t+ W
-- 回答时间:2018-6-1 17:38:58
厉害了,我现在用的一个dap,没有软件复位,必须接硬件复位,然而接上硬件复位,完全无法识别" V; L  h. X5 g! W  ?. u2 p: y
CMSIS-DAP v2.0 有没有软件复位???
radio2radio 回答时间:2018-6-1 23:46:18
本帖最后由 radio2radio 于 2018-10-27 12:11 编辑 7 a7 K& `# r/ d2 W) P2 C$ t. f
gzbkey 发表于 2018-6-1 17:38
- C1 W' z# c# X4 [3 a, y- J厉害了,我现在用的一个dap,没有软件复位,必须接硬件复位,然而接上硬件复位,完全无法识别
6 e) X6 D6 l5 z# u, u' e1 U5 {CMSIS-DAP  ...
$ l$ S  W  @' M$ ~' t, f( S
1楼的最新版,已经加入了软件复位功能,仅对Cortex的MCU有效。0 v) Y0 R7 `* r
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,网络上已经有人移植,但是好像没有放出来。
# C9 D; n# e) Z" J! K0 q  ^; G# E9 j+ a' M. Q; |7 \
DAPLink的硬件github仓库已经有STM32F103C8的原理图,但是固件仓库一直没有STM32版本。
% X" e( b6 _# w* q* Y+ k, A, k( q8 f0 b: R6 X; e: O( e
我觉得二三十块钱用DAP还是可以的,V9毕竟盗版,有时还丢固件。- N7 G( x- |9 }8 v* n' C

6 G+ j: F8 J1 UDAP现在一个比较大的问题就是MSD,一个目标文件一个固件,烦人。
+ L7 Z) Z) u0 M% p3 R& U1 T: a8 `. o' y8 I) _
实测KEIL下载一个2400K的axf文件,擦除,编程,校验,大概26秒,这个axf对应的bin大概297K。
# O6 y* u- l9 L% U2 d
radio2radio 回答时间:2018-6-3 13:56:33
本帖最后由 radio2radio 于 2018-10-27 12:13 编辑
& I2 `, ^8 k! u- e: |
huangxuejia-292 发表于 2018-6-3 12:44
4 I5 i# w1 G9 V0 B" [8 F官方的CMSIS DAP已经改名叫做DAPLink了,大牛可以将DAPLink移到SMT32,网络上已经有人移植,但是好像没有放 ...
( N+ ^9 G' i: i
我也看过DAPLink,它要求有较大的RAM/ROM来模拟U盘,STM32F103C8的资源有限,我估计github没有的原因是这个问题。
3 ~, K; g. Z% d6 x" b' KDAPLink的底层关键部分还是CMSIS-DAP,目前用v1.1.0。/ h0 H: h6 e+ ~' d
radio2radio 回答时间:2018-6-3 20:25:58
本帖最后由 radio2radio 于 2018-6-26 16:02 编辑
: v1 x. _2 G4 ^9 {5 P2 l, O
. G" z; G( u8 K1 p今天测试过一些IC开发板,
9 |9 p* j  Y8 ]( R) U
6 v0 R7 w5 l) i6 w1. 两款STM32F407xx的板子,JTAG/SWD正常,SWO正常。
3 N0 E+ t* B0 q, h2. LPC824的,正常。
" y7 w; E* g. \3. nRF51xxx的一款,正常。
" _3 ]9 ?) R0 {9 I) t! F; M& N6 U, U* p& z* h- ^/ E/ w+ J
重要提示,由于这种F103最小板的GPIO脚,没有加任何抗干扰的退偶稳定元件,都是直接连接出来的,所以,高速运行时很容易被干扰。
. ]9 [" w% z; ~: l  Y: Q# q0 y$ ~建议不要使用长线连接和排线连接,使用分开了的短线会效果更好。 如果直接应用到您的项目之中,建议几条数据连线外加退偶零件。% g/ u2 }1 R- u- M: }3 A
如果做成专用的成品小板,留意这一点,就不会有问题。  i/ r0 b& _( p* i& R8 N# m
8 u9 ]' d5 h' k7 t% @: ?8 j/ @
简单的解决方法,
9 s5 h0 M, t0 T% p* W; H5 S( V1. 在Keil里面设定低一些的速度,我测试过,设置速度10MHz与1MHz的下载速度差别只有20%,建议使用1MHz。
* D* W# G* H: Q( ]; H2. 在每一条数据线上面,串联一个47~100欧姆的电阻。8 W9 C- ]- |3 ?' L5 w- ^' E7 |
( f- y, y; [9 e& @/ V% m9 n

% g5 B, }4 F2 [5 P
wujique 回答时间:2018-6-3 21:39:09
我做过X大神的DAP,也是103。用40cm的杜邦线,没有干扰。
$ \. ~. [; [2 \8 K0 _8 x上位机关闭串口或者关闭串口工具,不会出现死机啊?
" `+ _* o: f% w& f/ z4 sCDC长期插在电脑上,串口确实会死掉,电脑收不到DAP发出来的数据。& S. Z- c: ^/ [! |1 }/ n
对了,X大神固件有个串口溢出的BUG。
/ v9 I( E/ L3 S( v: N我可以寄两个我的样品给你看看,不过我没有引出SWO。
radio2radio 回答时间:2018-6-3 21:59:24
huangxuejia-292 发表于 2018-6-3 21:39" Q/ X' H# ~) o' F( F: C
我做过X大神的DAP,也是103。用40cm的杜邦线,没有干扰。( Q2 c2 v0 I; C8 \1 i+ R& L7 z
上位机关闭串口或者关闭串口工具,不会出现死机啊 ...

4 Z0 S, W' s" _+ E: Q+ c: h" t7 g谢谢,您再试一试,我用回X893的代码,CDC死机问题一样有,证明不是我改动后出的问题。
' C" Q$ Y% H3 d; K6 D; _9 y
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版