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

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

[复制链接]
radio2radio 发布时间:2018-5-31 15:47
2018-06-30重要更新,附件换成了源代码。
/ d2 N1 D5 N! ~" `3 Z% @5 _: t2018-08-29附件更新,与github相同。
0 Z0 g  g! E5 ~2019-12-24重要更新,速度提升,功能不变。: ~3 j& P5 }2 z* x$ t$ t7 i2 F9 |

) k# N" u$ u) V# Q4 mgithub:http://github.com/RadioOperator/STM32F103C8T6_CMSIS-DAP_SWO$ D# d  Q- V8 w( P+ v9 A) y
  t8 n- @* Z) I; A
----------------------------------------------------------------; h4 j+ u+ i% I: @' A5 w
2018-06-13更新,搞定Cortex-M的软启动,不用连接RESET线,下载后Cortex也能马上自动开始运行。  [$ X8 ^  ?$ v* q4 Z9 N" k6 P( N* V
7 l  O$ a3 @1 x0 c& Y1 ]
10元钱能干什么?也许早餐都吃不饱。 可是10元钱在TB可以买到STM32F103C8T6的小板子,著名的BluePill。, I3 Q. z2 {  i+ D" u

BluePill

BluePill
0 V5 Q5 U  s0 T. f1 b7 ?3 W1 f
几年前,X893大神就移植过了CMSIS-DAP到F103上面,我觉得这个很好玩!!!$ h  t4 U  Z$ y$ I

: g# N* n4 w8 b于是我就花了一些时间,在X893包的基础上,做了如下改进:
$ V+ c6 j, T5 ~* _1. 升级到CMSIS-DAP v2.0最新版。4 c1 \& R$ ^6 F( e' Z9 U7 J1 b
2. 实现了SWO的主要功能,即printf转发至SWO口。
9 V/ f- a  z1 h7 g3. JTAG功能正常。
' z7 Q& f) A( s; \+ A" x4. CDC功能,使用串口2(PA2/PA3),已经改进。
0 C( R2 i! I  M2 m5. 实现了软启动功能,使用时可能不需要Reset连线启动程序。: Y* O8 N" u  N, `# _& _' w$ }1 M( `
6. 针对STLINK的廉价硬件,做出了改进版本,稳定。
+ N4 c; \3 Z8 r+ e  p7 J% O/ C6 H  U2 g/ U
HW_Connections.jpg
$ @$ p* L% d* s+ r
8 j- |# O- W1 Y! S! i9 K9 _ 1.SWD_Remapped.jpg 4 D% Z3 X; T0 S4 C

$ O( c0 J& Z$ C9 M
+ d& V1 c! G9 x. ~8 j: Y  k. G' j STLINK-01.jpg # i+ ~% k, ]. Y) q; o. y

' U* C8 Z; V) ~' _4 @; _ STLINK-02.jpg 9 K) h- ]6 U2 M3 L! ?6 `

" `/ I; F+ b3 k STLINK-03.jpg . G5 V+ h) k9 ?4 D  O" d

" w4 f. L3 {& ?, V. n8 `3 E0 R Schematic(part) STLINK_V2A_V2B.jpg * `0 \# s* m0 a! A% S

: \* r8 H4 I% I* Q: M Readme6.jpg : Y/ A7 x5 u9 D6 M

3 l# q! Z. o% x% ^* Z2 q: |& ?
; `+ y# e9 X$ r# G! f3 f8 [* f1 w2 o注意,现在原装ST的F103不好找了,市场出现大量使用山寨的F103的板子。4 `* Q; d# V, H7 D3 h3 }3 j; s: [
山寨的F103有几种,已知的一种是CS32F103xxxx,另一种是GD32F103xxxx,有的甚至直接打印成STM32F103xxxx冒充原装,无法分辨。

' O! A5 p6 V7 m! i' p, A( ~& y5 d即使卖家声称是ST原装的,也不能完全相信。  _, r! g" `1 F- _) h& b, D% d* [

+ R1 T. {5 Z- A2 E" Y+ x) X固件见附件,附件里面有两个LED的闪灯程序用来测试SWO功能用的。/ ~3 k: a3 s2 V% G6 Y4 E
使用SWO功能,需要启动内核的ITM功能。不同调试环境,启动ITM插入源代码的部分,可能有区别,我也不是很明白。4 F' ?) f5 H2 i3 j" ^- r" E
& I) a9 e4 Z6 L% p  `4 W! }. \
7 M% H5 c  l, S; h. O3 l

" X. t) `9 J- ]( F8 \+ b

STM32F103C8T6_CMSIS-DAP_SWO-master20200509.zip

下载

3.48 MB, 下载次数: 9663

评分

参与人数 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:005 b" o/ T: H% W  A$ U. W0 |
可以把nreset映射为dtr或rts吗,很多软件走的是com协议,或者告诉我如何触发复位信号 ...
$ b9 m9 m! R& k' r7 S4 W
nRESET是受使用CMSIS-DAP的IDE的逻辑控制的, 不能随便修改。
  \, a2 G7 f+ q  ~0 e你要的功能应该不是一定需要走nRESET这条线, 随便找一条空闲的GPIO,模拟一下DTR/RTS,很容易的吧。
/ g, F2 p; }' B3 o+ N9 x4 K+ F8 v) t! a7 R
你用的功能好像只是用USB转串口,那么就应该使用USB-VCP的程序来改。 " O) y9 ^: [* [% w
或者买一个有DTR/RTS线的USB转UART的小板, 便宜得很, 5~10元一个。
3 `$ S7 Q& V; S, G% K* ^4 R+ U) d) v4 b3 K, n2 U* Z8 s) h+ z

# c& a  n, V& y* F* o2 V8 b
happyavr128 回答时间:2020-2-4 17:26:56
楼主大神啊!
kernerl 回答时间:2019-12-7 13:30:15
找到一个可以编译通过的文件,不过好像有个DAP_config.h这个文件的版本不一样。

CMSIS-DAP.zip

下载

1.6 MB, 下载次数: 131

radio2radio 回答时间:2018-10-14 02:01:43
FireHero 发表于 2018-10-9 17:18
0 b; O6 x% S, b! D: o! S- N# U! a6 L楼主你好,我下载了github上最新的代码,安装了Keil4兼容包之后,可以正常编译下载# ?3 j! H9 D* b3 n  u/ j

' j% ]: K4 B$ V% e下载到板子上后,USB插 ...

: g& O/ m& U+ q: }) F  m' I不好意思,今天才看到,匆匆做了一个,您先试一试。可能问题多多。
; y4 c. S; R" R  ~# c" J1 b4 q5 r) P2 \8 y" v/ y% D
我是用BOARD_V1的环境改出来的,发现原来的BOARD_V1就是一部分代码有问题,因为我没有这个硬件,没有办法验证,只能由它去了。 主要是这种板子占用了PA2/PA3的USART2,CDC只好搬到USART1,比较乱的说。您先用用看。/ b" Q* O2 ?  z% `
附件的代码,我在SWD模式在F103目标板测试过,CDC测试过,都正常。: v$ }9 A9 \1 u$ `( J) D( r% T
JTAG模式没有测试。
! o. m: v: e, j2 |1 D+ x
' H4 l6 [6 e* R3 e* Y

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
) N4 y6 a0 W( f) y' ]; L- ?! t改好了,调试能复位。
0 u1 M  l+ l' A( WMSD(U盘拖放)无法复位。。。
  v( n! i: V6 b8 S2 Q. F
你是用的STM32做的DAPLINK吗
radio2radio 回答时间:2018-6-15 13:54:57
bjrzs 发表于 2018-6-15 13:40' B# q6 v! q! C. C+ i; e
请问,这个最小系统板 通过USB 口接电脑,需要什么驱动程序呢?

9 z+ T+ @3 o) m通常不需要专门的驱动程序,CMSIS-DAP仿真器是使用Windows的HID接口,使用Windows自带的HID驱动程序。我试过Win10、Win7,没有问题。0 D7 N7 O* C  c2 }
(留意USB的线缆要用质量好一些的,和短一些的,以免影响USB的信号质量,市面上太多廉价+缩水的USB线!)
8 P1 @; t/ V/ p% ?( ~8 |7 P$ t6 I
, Q0 ]9 s! w. R7 f6 X, q9 eCDC功能,Win7需要安装一次驱动,文件在源码包里面有。) W+ A. e; L$ B- E7 j5 l

4 X% E; p& U- b' y
七哥 回答时间: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独有的。" j% K8 \6 G& ?! g# d4 w
优点:2 n" D7 i4 e1 A" K( z0 o, J5 a2 [
1. 对原来程序的时序影响很小。
5 v4 [2 r' T3 j$ [) _4 B! P* s& U2. 仅多用了一条SWO线(JTAG的JTDO线,F103是PB3引脚)。7 F. g" r/ s4 I8 z. p1 C9 x7 x; ]
3. 不占用串口,却可以方便地使用【printf】功能打印输出。9 Z0 |  d" N6 ^' y* W% Y
4. 速度快于串口,我测试过我这个SWO板子,500Kbps可以稳定输出,不丢数据。
) e/ l" q* L" j2 j5. 其他SWD/JTAG的断点功能,查看内存/寄存器变量功能,都有。
* s; w/ A5 y4 x& V! B, X6. 烧录程序,和J-Link/ST-Link一样。
. s" I( D  C6 G3 w7. 成本低,10元的小板子,烧入固件就成了。不用再便宜了,路费人工都远不止10元。; M' q( P  R) X: T  M  w# k* Y- B
8. ARM开源的,随便集成到你的开发板上面。) y- \+ {/ ]2 F8 z. ~
' ~$ x) b( C  Q; L, |3 O6 \9 u+ ^4 N
缺点:2 f3 O; o, k1 `0 H8 q+ A* S
1. 速度比J-Link慢,因为F103的这个小板内核速度不够快。下载速度不知多少,10元的能用已经很好。/ E' h1 Z8 t! I$ j9 |/ ]; J% n
2. SWO功能只能用于Cortex-M3/M4/M7......,不能用于Cortex-M0/M0+(内核不支持),其他功能可以用。
* g5 |3 x% L: t# p% |3. SWO功能只能用来单方向输出数据,不能像串口调试那样可以和上位机互动。
7 P) }$ u4 V1 W" L, j! _( h4. SWO功能不支持目标程序中的DMA部分,估计是ARM的CoreSight有限制。
/ h- e; d5 ~) {5 g! c# J5. 不支持软件复位。我改的软件,20180613版(见1楼)已经增加软件复位功能,只支持Cortex。3 V* l7 W8 L! F/ ~( e3 `
6. CMSIS-DAP的最高速度,还有功能,应该受限于ARM/KEIL的限制,不然商用的几千上万元专业仿真器还怎么卖?3 X( p. V& g* }
% V7 I! _: \( `9 H0 z$ p6 d
我的板子:
$ E) a/ j, ?- w$ ~! C* k" XSWD mode:                                                        PortNo6 m* c1 \7 A& ]( C" a& P; [% d+ m
                                                SWDIO              PB9& b# P, t1 s7 k+ p  @5 ^% e
                                                SWCLK              PB87 D4 F2 E3 q) j7 v
                                                SWO                 PB7) C  o5 p0 h/ |/ d0 w; ?/ a, {, p
                                                nRESET             PB6" A* ~) {+ J1 G5 r7 X2 ?  j
JTAG mode:
: A/ t- N7 {  Y* |                                                JTMS                 PB9
% q6 U" a- ?/ u- C. D                                                JTCK                  PB8% ~+ b: a; q/ ?' o) h
                                                JTDO                 PB7
3 K0 f0 I: H/ ]$ R9 G4 V- H! b                                                nRESET              PB6
; O8 {; i6 u6 l+ }" N1 G0 r                                                JTDI                   PB5% @/ @" c4 L: ^5 u0 z2 @" H
                                                nTRST                not available/ G# u: k  T! I
                                                + v% C; O/ E/ V" Q6 K. e
CDC Function:
. m, i  T' }" T5 y                                                UART2-TX           PA2
' i. b/ J, f8 H; @% {* K3 m2 [                                                UART2-RX           PA3- M& }" f+ B, i; `
                                                
  m8 A- t  |* y* H$ w" u------------------------------------------0 N0 v. @/ [6 E" d/ p2 [
SWD Test passed!0 u2 _: h. H  s
JTAG Test passed!
# ]& z: X' M  `1 {' A0 V0 Z+ E( ~  I& V% w
Individual test results:
$ X! `8 M+ o# MExecution breakpoint: passed/ Z; k6 E0 K% h- [6 D  j2 K* |
Breakpoint on read:   passed4 T+ O! I1 [# ~. \7 A8 e2 K& d/ i
Breakpoint on write:  passed) p+ M+ D) y( n' v7 K0 T+ D) U2 g/ e
Register read:        passed6 C* Q( s7 S  C$ z2 m! b8 _
Register write:       passed
% B" X1 J% k" G/ J: P* ]Memory read:          passed
9 Q- P, J7 O$ q: TMemory write:         passed
- @, p3 J/ @4 M" K' L- mControl flow:         passed
/ U- F8 c* e: C. y3 p7 B$ e0 \2 N; P
CDC function:            OK6 \7 B2 U" s; G4 u# d( _& n
SWO function:           OK for printf-to-SWO
( }! Z9 e6 }0 {( w9 T# xSoft-Reset function:   OK for Cortex-M
( p! ?1 A1 \" u+ o/ K-----------------------------------------------------------------------------------
" x9 v0 |% k& j9 @& }
2 N* @7 `( t' K& C另外,安装时,HID不需要驱动。CDC功能,Win7需要安装1楼附件包里面的驱动程序。
) d! \' n# g5 ]* w
/ Q! f* G; {9 Z  S" m& Q/ k% ^2 A1 _5 p
radio2radio 回答时间:2018-5-31 22:56:47
本帖最后由 radio2radio 于 2018-7-15 00:11 编辑 - e, W. c) Z: W, j: ^
5 p  ?4 [7 P' ^" v" `" b3 r) E! S
有关CMSIS-DAP的项目,在硬件成本超过20元的板子上面做没有实际意义,这也是我集中精力做F103小板的原因。
; w8 T; ]' m! K3 }. p; U50-100元,可以买到A货的J-Link v9, 性能比CMSIS-DAP好。
1 Q7 m: m' o$ h160元可以买到正宗的LPC-LINK2(CMSIS-DAP的高速USB版本,开源的)。
- a, b' u$ ^' j) D' f6 c7 s# @6 u6 {+ K$ p5 }$ u" Y
1楼的附件里面的源代码,或者固件,也可以选择重定义SWD引脚的,这样用起来更像“真家伙”,特别是只用4个引脚的时候。' `  K2 c7 [8 b' b3 m; _
(选择SWD_REMAP后缀的)
- H! O3 d' |* A: H4 T 1.SWD_Remapped.jpg
1 K+ r' ~7 m/ e% P
-- 回答时间:2018-6-1 17:38:58
厉害了,我现在用的一个dap,没有软件复位,必须接硬件复位,然而接上硬件复位,完全无法识别
* E0 D% p7 R3 {+ H' ?# `) z$ UCMSIS-DAP v2.0 有没有软件复位???
radio2radio 回答时间:2018-6-1 23:46:18
本帖最后由 radio2radio 于 2018-10-27 12:11 编辑 & U8 ]7 }8 [# B% P0 U6 }
gzbkey 发表于 2018-6-1 17:38
2 q- r) d5 V6 [- i$ e+ c厉害了,我现在用的一个dap,没有软件复位,必须接硬件复位,然而接上硬件复位,完全无法识别
3 E8 I  u) i) Q5 h6 c* aCMSIS-DAP  ...

9 X5 D1 ?0 ~; `; k  j/ Y1楼的最新版,已经加入了软件复位功能,仅对Cortex的MCU有效。
2 M" t+ D! D. O
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,网络上已经有人移植,但是好像没有放出来。
+ j9 q' x8 Y, q2 b5 d  m/ @& o2 _6 c9 l
DAPLink的硬件github仓库已经有STM32F103C8的原理图,但是固件仓库一直没有STM32版本。
" o% v, x" V9 m* y2 B6 S" R# Q6 F+ F. ~6 B# `5 E6 v5 y3 N
我觉得二三十块钱用DAP还是可以的,V9毕竟盗版,有时还丢固件。1 ^5 \" C3 C7 C* s

. v( {& l! t1 E" ?. IDAP现在一个比较大的问题就是MSD,一个目标文件一个固件,烦人。1 i9 ^1 \% H* B, c0 _0 `" N1 C# R6 W
' F4 U# f2 |8 ]% X) f; Y
实测KEIL下载一个2400K的axf文件,擦除,编程,校验,大概26秒,这个axf对应的bin大概297K。8 p8 J/ x8 l3 t. F
radio2radio 回答时间:2018-6-3 13:56:33
本帖最后由 radio2radio 于 2018-10-27 12:13 编辑 2 |' F7 N, I/ W5 j4 P: q. Z# P
huangxuejia-292 发表于 2018-6-3 12:447 a/ f0 r' r& k) K2 A- s
官方的CMSIS DAP已经改名叫做DAPLink了,大牛可以将DAPLink移到SMT32,网络上已经有人移植,但是好像没有放 ...

* S# ?! e% L" u2 _. B$ s我也看过DAPLink,它要求有较大的RAM/ROM来模拟U盘,STM32F103C8的资源有限,我估计github没有的原因是这个问题。
/ r3 y+ j! ~6 I+ sDAPLink的底层关键部分还是CMSIS-DAP,目前用v1.1.0。* O; c% f/ r2 F& L+ A. s# n: I* ?
radio2radio 回答时间:2018-6-3 20:25:58
本帖最后由 radio2radio 于 2018-6-26 16:02 编辑
' _, u- f8 }" s
% {- U8 E: y, B& y( q今天测试过一些IC开发板,
" a6 T0 y+ d% [% X7 u- O* C
3 }7 V* x: Z- U- ~1. 两款STM32F407xx的板子,JTAG/SWD正常,SWO正常。
" p+ [. u0 W# z& R2. LPC824的,正常。8 l2 q% V% f) C& H5 ]7 h0 D
3. nRF51xxx的一款,正常。4 @) R. M& i/ n' S6 f% \: N

# p& r, s6 t% u3 u" I& ^重要提示,由于这种F103最小板的GPIO脚,没有加任何抗干扰的退偶稳定元件,都是直接连接出来的,所以,高速运行时很容易被干扰。% P1 V4 f1 `; u; s# m% H
建议不要使用长线连接和排线连接,使用分开了的短线会效果更好。 如果直接应用到您的项目之中,建议几条数据连线外加退偶零件。
# j7 q/ o& b1 N如果做成专用的成品小板,留意这一点,就不会有问题。
  X* f% ?& E& }) F4 y" z6 D- r. z" ?! s
简单的解决方法,4 d* l8 e- d7 o# ^4 N+ D% p& |
1. 在Keil里面设定低一些的速度,我测试过,设置速度10MHz与1MHz的下载速度差别只有20%,建议使用1MHz。
* ]" n1 N: u+ G& x, O# I2. 在每一条数据线上面,串联一个47~100欧姆的电阻。
" X- U! F% o/ ]
& @' J1 {4 v7 _4 M5 {3 k+ f, X, ]. M, {
wujique 回答时间:2018-6-3 21:39:09
我做过X大神的DAP,也是103。用40cm的杜邦线,没有干扰。
! l# t8 s3 _: F6 x5 q- K4 i8 F上位机关闭串口或者关闭串口工具,不会出现死机啊?
; O' {: a) ~$ C* fCDC长期插在电脑上,串口确实会死掉,电脑收不到DAP发出来的数据。
9 W; P- m: }/ W对了,X大神固件有个串口溢出的BUG。/ b9 S! A% z+ C# N; F1 R
我可以寄两个我的样品给你看看,不过我没有引出SWO。
radio2radio 回答时间:2018-6-3 21:59:24
huangxuejia-292 发表于 2018-6-3 21:39
7 T+ P7 ]: F, i# T9 r: E我做过X大神的DAP,也是103。用40cm的杜邦线,没有干扰。
1 @4 J- E$ p) c上位机关闭串口或者关闭串口工具,不会出现死机啊 ...

+ s2 k% ]. S* G# _& Y6 L& r谢谢,您再试一试,我用回X893的代码,CDC死机问题一样有,证明不是我改动后出的问题。
  {5 E  u* d) ~! a8 w  E
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版