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

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

[复制链接]
radio2radio 发布时间:2018-5-31 15:47
2018-06-30重要更新,附件换成了源代码。
0 L- [4 S' U1 `8 d0 E" }2 h! g4 w2018-08-29附件更新,与github相同。/ ^. s7 g: F2 G6 V  C1 u
2019-12-24重要更新,速度提升,功能不变。, A: l6 b4 u7 M, S; b- A
  k+ Z" f* D  k0 A: p
github:http://github.com/RadioOperator/STM32F103C8T6_CMSIS-DAP_SWO
6 A0 x# k' \# y6 P' c! j
2 `) e2 I& C' z0 {' E9 l% D( b----------------------------------------------------------------+ h% H. w7 T) h8 V7 P" h) C/ E& V7 P0 E
2018-06-13更新,搞定Cortex-M的软启动,不用连接RESET线,下载后Cortex也能马上自动开始运行。, [( E5 E, H5 ]

% z& Z0 [5 y$ l, M/ ^( O, P10元钱能干什么?也许早餐都吃不饱。 可是10元钱在TB可以买到STM32F103C8T6的小板子,著名的BluePill。9 E+ e: k4 m# {/ ]0 I, f

BluePill

BluePill
! V7 f' P5 E# b2 P3 V0 t
几年前,X893大神就移植过了CMSIS-DAP到F103上面,我觉得这个很好玩!!!# Z4 D3 Q8 J. n& Z" W4 @6 H3 U

2 ?: q! u7 `- ]% L& ?于是我就花了一些时间,在X893包的基础上,做了如下改进:6 _& q3 u- x, ^! H# f
1. 升级到CMSIS-DAP v2.0最新版。
5 A. C1 W; H* E+ Y2. 实现了SWO的主要功能,即printf转发至SWO口。
2 C) Y6 {) f% ]4 S+ c1 R3. JTAG功能正常。
# A" S6 `) K  l$ x5 I( W: v  u/ h4. CDC功能,使用串口2(PA2/PA3),已经改进。2 Q2 V  M" f, r
5. 实现了软启动功能,使用时可能不需要Reset连线启动程序。
3 I' G% a' ~& n, L6. 针对STLINK的廉价硬件,做出了改进版本,稳定。
4 V* q/ O( i9 }$ |3 }' P/ P* J! T2 H9 f' i3 N+ O5 ?" `% G
HW_Connections.jpg ) _# c, V; i2 F& T: Q% L
# S& v0 g8 I, k( K) T9 `
1.SWD_Remapped.jpg   S4 B% B+ T! O0 J

, a" p, L$ q- I: ]
. I* X9 N( B9 b2 l9 f STLINK-01.jpg
3 O% k: q& W" c- |' i  `' l- r3 L
5 M+ c5 p% w, @5 a" e STLINK-02.jpg
& t, `, R8 t5 K. O1 u0 Y  s4 X9 m' H
STLINK-03.jpg 2 N* F$ m$ f& O& F5 m- Q

  h* M4 C2 \4 ~  z% p Schematic(part) STLINK_V2A_V2B.jpg
4 ]" z0 J- D- G1 [' l$ E5 p
1 w  G; d: a3 t! ?6 F Readme6.jpg , V$ K/ K6 Z5 O1 h

$ A; [- v; Q9 {" B5 W, |- e8 u" k, @
注意,现在原装ST的F103不好找了,市场出现大量使用山寨的F103的板子。& K4 c/ g6 {2 f4 X( U+ e9 @
山寨的F103有几种,已知的一种是CS32F103xxxx,另一种是GD32F103xxxx,有的甚至直接打印成STM32F103xxxx冒充原装,无法分辨。

* M8 Y8 V# |5 c( z( q3 @即使卖家声称是ST原装的,也不能完全相信。  ~" F0 m  |3 U9 {; f+ y& j3 q2 m

8 \4 |% Q* y: {& C固件见附件,附件里面有两个LED的闪灯程序用来测试SWO功能用的。- l2 ^: l4 u5 {( U, U* _
使用SWO功能,需要启动内核的ITM功能。不同调试环境,启动ITM插入源代码的部分,可能有区别,我也不是很明白。
: Q! B- A$ v& v  i5 U- A' B8 A, ?" M3 H* a& ^( t/ n) j
/ h! H2 [" {6 |$ ]# e3 A$ O3 [

4 E4 X* U; D, v

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:003 `/ _6 F& r  X3 s; n
可以把nreset映射为dtr或rts吗,很多软件走的是com协议,或者告诉我如何触发复位信号 ...

/ g5 ^5 [& D$ T9 B% s' L- XnRESET是受使用CMSIS-DAP的IDE的逻辑控制的, 不能随便修改。) j+ s5 b% d9 Q
你要的功能应该不是一定需要走nRESET这条线, 随便找一条空闲的GPIO,模拟一下DTR/RTS,很容易的吧。8 B, V" w& U  D/ E7 T: G. s0 U8 ]
3 k4 c/ c# F) o+ _; b; c8 q
你用的功能好像只是用USB转串口,那么就应该使用USB-VCP的程序来改。
' E. b/ v. }# \- n  {或者买一个有DTR/RTS线的USB转UART的小板, 便宜得很, 5~10元一个。
) w- |( T( U% r* @
2 C6 z( E6 d+ n  Z8 J5 w
# X; r1 D1 r8 M0 Z" `5 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  V# ?3 o( i0 R& X, A9 R5 y/ U
楼主你好,我下载了github上最新的代码,安装了Keil4兼容包之后,可以正常编译下载
3 d" G4 E% _0 V$ G# s# ^( j6 M0 _5 [) a' ]3 z, e( z
下载到板子上后,USB插 ...

' y6 F6 _- I$ M4 g- u5 j' b不好意思,今天才看到,匆匆做了一个,您先试一试。可能问题多多。
+ ]* d  {( V* _/ u, [5 k/ p# z2 N
( t+ e  G" o8 U3 A' V1 v7 l# y6 L我是用BOARD_V1的环境改出来的,发现原来的BOARD_V1就是一部分代码有问题,因为我没有这个硬件,没有办法验证,只能由它去了。 主要是这种板子占用了PA2/PA3的USART2,CDC只好搬到USART1,比较乱的说。您先用用看。# f+ G3 r* W, Z9 t: Q7 y
附件的代码,我在SWD模式在F103目标板测试过,CDC测试过,都正常。
  ^# m' G; Z0 {; ]JTAG模式没有测试。
+ Z( \" A" s; a. L0 y# \" k& g: d  g. H

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:002 R9 ]  Y% @: T6 }' q. l5 {, L; G% u
改好了,调试能复位。- W+ o& e- h2 H9 \( l) a9 ]
MSD(U盘拖放)无法复位。。。

0 X' Q& a- m* Z; \- d/ S, b你是用的STM32做的DAPLINK吗
radio2radio 回答时间:2018-6-15 13:54:57
bjrzs 发表于 2018-6-15 13:40( ]" x. }; C- X; C$ Z4 |
请问,这个最小系统板 通过USB 口接电脑,需要什么驱动程序呢?

5 x0 N$ ?3 D9 Z通常不需要专门的驱动程序,CMSIS-DAP仿真器是使用Windows的HID接口,使用Windows自带的HID驱动程序。我试过Win10、Win7,没有问题。8 l6 l6 R; v1 q3 K3 m" t7 s+ l9 m
(留意USB的线缆要用质量好一些的,和短一些的,以免影响USB的信号质量,市面上太多廉价+缩水的USB线!)# K4 X! p- U) P  x: T( O& a: D5 C

% {5 g2 K6 }/ l) I- \; [CDC功能,Win7需要安装一次驱动,文件在源码包里面有。
$ B" i3 u9 C" t% C- [% _) R; A5 H+ F0 D5 }0 K: U5 k6 M' j; h* b  k
七哥 回答时间: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独有的。) X8 w+ y+ f- t, D
优点:
6 m6 o4 N: c9 P! h! E. L( i1. 对原来程序的时序影响很小。
8 U+ ]# t9 H9 J6 d0 Y9 b* z2. 仅多用了一条SWO线(JTAG的JTDO线,F103是PB3引脚)。
  F$ X, q! r. w1 r9 H3. 不占用串口,却可以方便地使用【printf】功能打印输出。/ F" A2 B5 p( D9 u2 @. F9 E
4. 速度快于串口,我测试过我这个SWO板子,500Kbps可以稳定输出,不丢数据。
6 P; R; k% S9 \; k) ^- M' Q5 [5. 其他SWD/JTAG的断点功能,查看内存/寄存器变量功能,都有。
' g# w% x. [% i7 K* `/ ~6. 烧录程序,和J-Link/ST-Link一样。
9 Q9 v/ Z7 i6 o( g7. 成本低,10元的小板子,烧入固件就成了。不用再便宜了,路费人工都远不止10元。
1 E  S( l" f/ p$ K* P! h/ t* |8. ARM开源的,随便集成到你的开发板上面。
3 J2 N# b1 Y+ {1 d' ~7 }0 [5 }$ G2 n3 k7 E0 _! ?5 b* B0 ]
缺点:
+ V. c" [( v& V% e1. 速度比J-Link慢,因为F103的这个小板内核速度不够快。下载速度不知多少,10元的能用已经很好。
/ c1 b2 E5 i* p) ~( q& i. s2. SWO功能只能用于Cortex-M3/M4/M7......,不能用于Cortex-M0/M0+(内核不支持),其他功能可以用。" G- ?! J3 t, H6 A. E9 E
3. SWO功能只能用来单方向输出数据,不能像串口调试那样可以和上位机互动。
* e5 e! g# B7 E0 F8 m& z4. SWO功能不支持目标程序中的DMA部分,估计是ARM的CoreSight有限制。
5 [! b- b9 N, ^3 I$ ?5. 不支持软件复位。我改的软件,20180613版(见1楼)已经增加软件复位功能,只支持Cortex。
) p" z( y  U2 j, Y- D7 _4 q0 n6. CMSIS-DAP的最高速度,还有功能,应该受限于ARM/KEIL的限制,不然商用的几千上万元专业仿真器还怎么卖?
- X; u0 K( e( m( p: |9 n# F" X8 L) a/ c) S% \( q* j
我的板子:
* T) E3 R$ a# y+ d' I3 LSWD mode:                                                        PortNo
8 V+ _0 m; t2 R( f/ \3 ?/ b                                                SWDIO              PB96 ~9 k9 C& f  T8 z" P
                                                SWCLK              PB8
8 [8 Y. R4 L% \# _+ y& ?                                                SWO                 PB7' S% l9 ?  L* U" x* W3 [5 L5 J
                                                nRESET             PB6
" Z' [% N2 W! t4 t- f* sJTAG mode:
& R6 r" q* i/ s2 f: J$ G0 f- D! a5 d( V                                                JTMS                 PB9
# X9 C# U5 J+ y                                                JTCK                  PB8/ a( F% H: C4 o$ ]  J
                                                JTDO                 PB79 S. g$ E6 T9 I; l0 J9 e
                                                nRESET              PB6* l) V2 O/ ^4 r5 O' d3 j8 s# Q
                                                JTDI                   PB5
' p( F6 Q' U# n" O8 j9 ~                                                nTRST                not available& G: i' C+ J3 f; o3 B# i
                                                * h! M8 b% ^4 R# ^5 C+ W
CDC Function:$ K1 e' b6 r0 Z. q0 P
                                                UART2-TX           PA2
: ]9 ]! p, W1 c( i& h                                                UART2-RX           PA3
0 c2 M+ c/ O# z% W: |                                                
; F+ H! `! Q/ k+ ?' a# q1 o. n------------------------------------------
9 y: [* i0 G' X+ q6 m0 wSWD Test passed!2 l' E7 p; p. Z  o- M0 ~; [
JTAG Test passed!; ~3 _0 w' f" h% T% \$ ]1 ~& m! f

' i, d/ j& l! l, ~/ _# ZIndividual test results:: k- g% ]! I% @* A4 f# ~+ c' j: j0 @' ?7 X
Execution breakpoint: passed
$ u8 g' X6 I6 [4 S8 i6 u% HBreakpoint on read:   passed
( ]+ K/ b: ~8 n& h& v2 q8 N. oBreakpoint on write:  passed
% D3 u: _6 x5 M2 U! HRegister read:        passed# \7 C: M4 V1 l- |0 Z  C5 C+ b
Register write:       passed( h1 R7 t2 R- b  a' o
Memory read:          passed# P( n5 G7 @( ]. f
Memory write:         passed1 N( E- d. w! ~( t5 |
Control flow:         passed
1 p0 e8 A% D# J: S' e8 p/ u( `0 ]& Q! x2 r/ ?* L
CDC function:            OK
6 B  c' W9 E9 Q; i4 A- uSWO function:           OK for printf-to-SWO; H; |7 s+ ~' M1 v- z- {
Soft-Reset function:   OK for Cortex-M* z0 x, S" ^5 f# w
-----------------------------------------------------------------------------------/ N6 J' s7 h% w* U1 `
- M( C0 n5 {+ F/ G! v! {/ B# S* g% J
另外,安装时,HID不需要驱动。CDC功能,Win7需要安装1楼附件包里面的驱动程序。: h& U( g0 [: m& S3 s# G6 J+ q) D
, ^! e5 n4 q) ?# a4 w
radio2radio 回答时间:2018-5-31 22:56:47
本帖最后由 radio2radio 于 2018-7-15 00:11 编辑 5 u$ C. Q# f( Q' k/ L5 s: j) r
" o, f6 o* x" O
有关CMSIS-DAP的项目,在硬件成本超过20元的板子上面做没有实际意义,这也是我集中精力做F103小板的原因。
$ `: e' J0 U/ K+ R0 h50-100元,可以买到A货的J-Link v9, 性能比CMSIS-DAP好。4 T% {' y* y6 W% Y5 Q  r6 f  z
160元可以买到正宗的LPC-LINK2(CMSIS-DAP的高速USB版本,开源的)。
3 Z% v, ^3 |. F8 c: V5 [# C) K. B6 S3 q. {' W
1楼的附件里面的源代码,或者固件,也可以选择重定义SWD引脚的,这样用起来更像“真家伙”,特别是只用4个引脚的时候。# ?# K: Q3 m5 k& J7 d; h( ^1 K
(选择SWD_REMAP后缀的)
1 Y* A6 Q5 S) h" b. i3 z* `- y1 G& m 1.SWD_Remapped.jpg
% z$ S7 y. `, d5 i, s2 |1 m
-- 回答时间:2018-6-1 17:38:58
厉害了,我现在用的一个dap,没有软件复位,必须接硬件复位,然而接上硬件复位,完全无法识别
. G/ }; p* y) J9 L3 UCMSIS-DAP v2.0 有没有软件复位???
radio2radio 回答时间:2018-6-1 23:46:18
本帖最后由 radio2radio 于 2018-10-27 12:11 编辑 , O, u2 q5 z3 S) D3 s. W2 Z
gzbkey 发表于 2018-6-1 17:38
9 k! k0 I: q, Q6 Q$ N* y, p厉害了,我现在用的一个dap,没有软件复位,必须接硬件复位,然而接上硬件复位,完全无法识别
2 r, ^6 V2 o6 S: E. S8 q9 ?# Z8 oCMSIS-DAP  ...

2 p1 a# X3 {# j* d2 v1 \1楼的最新版,已经加入了软件复位功能,仅对Cortex的MCU有效。
, }) D0 O9 ^6 S' L
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,网络上已经有人移植,但是好像没有放出来。1 g2 U, S) _7 W0 X* t8 d6 z  s# l/ k1 A
/ R) ~& P6 h; e: ?
DAPLink的硬件github仓库已经有STM32F103C8的原理图,但是固件仓库一直没有STM32版本。7 x5 I2 |7 Y5 f3 m5 k1 E( o
5 d# c9 h2 t9 [- d2 c. Z/ R0 n9 v2 l
我觉得二三十块钱用DAP还是可以的,V9毕竟盗版,有时还丢固件。! P# \: P1 y0 M3 |1 h, i: Z
; u- U( K% P" o
DAP现在一个比较大的问题就是MSD,一个目标文件一个固件,烦人。
1 Y+ e& ]" u, B  r3 W
  v, [, z7 E4 s/ ~- P4 ?" l实测KEIL下载一个2400K的axf文件,擦除,编程,校验,大概26秒,这个axf对应的bin大概297K。# A& V1 e, d; ~. R  k
radio2radio 回答时间:2018-6-3 13:56:33
本帖最后由 radio2radio 于 2018-10-27 12:13 编辑 4 `, }% f8 k* m% g
huangxuejia-292 发表于 2018-6-3 12:44# D& Q) n6 \+ Z( b, t
官方的CMSIS DAP已经改名叫做DAPLink了,大牛可以将DAPLink移到SMT32,网络上已经有人移植,但是好像没有放 ...

0 |) x  Z" R" _6 {# ~% i/ F' g0 X% v我也看过DAPLink,它要求有较大的RAM/ROM来模拟U盘,STM32F103C8的资源有限,我估计github没有的原因是这个问题。
5 C0 w+ M/ P  Y1 `# k( s! LDAPLink的底层关键部分还是CMSIS-DAP,目前用v1.1.0。
+ |5 \9 s8 d% x
radio2radio 回答时间:2018-6-3 20:25:58
本帖最后由 radio2radio 于 2018-6-26 16:02 编辑 ' V9 @% x4 }( Q, h$ P- [4 ~# _

) N1 V5 `+ H$ {今天测试过一些IC开发板,1 }; V4 [) X0 z$ Z

: }0 @9 \3 y  l( k/ L8 r: z1. 两款STM32F407xx的板子,JTAG/SWD正常,SWO正常。
/ f0 v3 r: ^) g& Z' }2. LPC824的,正常。
* F! ^9 j5 O' R" ~9 b9 {9 H7 ?5 Y$ ^1 p3. nRF51xxx的一款,正常。3 `" i; k" z9 _7 u
+ H6 k9 z, A; O6 L- w, U1 I
重要提示,由于这种F103最小板的GPIO脚,没有加任何抗干扰的退偶稳定元件,都是直接连接出来的,所以,高速运行时很容易被干扰。
3 g4 r  \! J2 _1 i1 }4 i建议不要使用长线连接和排线连接,使用分开了的短线会效果更好。 如果直接应用到您的项目之中,建议几条数据连线外加退偶零件。' u2 \: @1 S" ]4 m: ^3 m# O3 o
如果做成专用的成品小板,留意这一点,就不会有问题。
& q' b7 L" f$ U. W* W$ J; c1 U9 O
# y$ T) {3 h5 c简单的解决方法,* P" N0 d* [7 J) M7 e* ]
1. 在Keil里面设定低一些的速度,我测试过,设置速度10MHz与1MHz的下载速度差别只有20%,建议使用1MHz。
' B9 s/ C: a; l2. 在每一条数据线上面,串联一个47~100欧姆的电阻。
, x2 x/ E5 Q; m9 a! |* G" y( F) @* g3 |3 M, j/ k
" R5 D  p+ P$ ^  R4 k" K0 |9 T
wujique 回答时间:2018-6-3 21:39:09
我做过X大神的DAP,也是103。用40cm的杜邦线,没有干扰。
( d1 x6 \5 J' v上位机关闭串口或者关闭串口工具,不会出现死机啊?
8 e" }% g# P$ c, E  l- F5 dCDC长期插在电脑上,串口确实会死掉,电脑收不到DAP发出来的数据。
2 m1 A3 {" S1 K3 E6 W  h% j对了,X大神固件有个串口溢出的BUG。
7 B$ b; E; f* p! k% D9 {. [* Y+ i我可以寄两个我的样品给你看看,不过我没有引出SWO。
radio2radio 回答时间:2018-6-3 21:59:24
huangxuejia-292 发表于 2018-6-3 21:39
3 s+ T$ m& a/ J5 O( g1 o: h/ M5 H我做过X大神的DAP,也是103。用40cm的杜邦线,没有干扰。
4 S" O2 a9 o7 ~2 [7 M上位机关闭串口或者关闭串口工具,不会出现死机啊 ...

( |; x, o8 x7 U' C+ R谢谢,您再试一试,我用回X893的代码,CDC死机问题一样有,证明不是我改动后出的问题。. _9 B1 o2 w0 {, P
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版