本帖最后由 丿灬幸灬 于 2018-12-31 23:06 编辑
. X5 t6 G y- A6 T* @. }0 V5 {9 ], f( S+ J
$ ^: h5 p) R' y, D. i- X5 g w4 N% t |. M8 Z% @; x% a
ST - Link具有强大的MCU、漂亮的外壳和连接器,可用于许多项目。
9 [, G2 W& H. s- ^7 r$ Z$ x% D
( `, G% q5 I0 e3 Z( [0 y描述' J9 L1 d x- w( W+ J/ ^! h; D Y
众所周知的ST - Link克隆是围绕一个STM32 MCU构建的,它们带有USB A接口,还有10个外露引脚。非常适合进行用途改造!
4 W Q5 C: _( L5 R/ y2 }4 o. k, e7 |" O
STM23F101CBT6是ARM Cortex - M3核微控制器,具有128KB闪存、16KB SRAM以及大量计时器、总线和GPIOs。+ J; q+ l3 b% p) V) t5 U$ y
; J5 z9 v2 G0 M7 J由于外部只有10个引脚,所以重新调整用途的选择并不是无止境的,但对于很多项目来说,这可能是一个很好的起点。$ u& r- p9 I. T {+ Q: s# ?1 }
- c4 I( Y1 D: o7 |5 ]3 Y
释放更多引脚# }. l" g" k6 f8 h
如果你需要更多的引脚,并且对焊接有信心,小的改动可以带来一些额外的好处。
- |$ P. s0 y1 U/ m+ H/ e8 t) z4 z
( [, c+ p7 k* j1 S( ^( _
$ e! z2 [7 o2 `0 s* c# I! d+ p
2 ?5 }. T' S! u6 ?6 ~
如果将电阻R8替换为0Ω电阻或焊料桥,则MCU引脚43 ( PB7 )和MCU引脚46 ( PB9 )均与连接器引脚5 ( SWIM )相连。如果你不需要R8旁边680Ω的上拉电阻R10,这可能也是一个好主意。
) n2 `# }9 X* \8 @9 |. C
, D9 c& S& W d6 J( M& y8 K# j5 s通过这种简单的焊接操作,如果你设法从外部整理I2C总线上拉,你现在可以在引脚42(TX)和43(RX)上使用USART1,甚至在引脚42 ( SCL )和43 ( SCA )上使用I2C1。
9 A2 @2 b, U/ ~0 Z" f2 ?# u: p) j7 L) s# |3 Z) A; ?
设计
7 C( b \7 h; [6 p在你重新编程ST - Link之前,它必须被“解锁”。解锁它的方式是使用OpenOCD。5 p, i: I# p2 `* \
0 J: J9 p" [0 C* d4 W+ o Z你还需要第二个ST - Link或其他SWD下载器和一些跳线。! u) {1 h8 F! m
# s) W2 p* ?0 z1 z" v% G+ xST - Link在PCB上有编程连接口。你可以打开盖子来接触它们,盖子没有粘在一起,但是你可以发现可以抽开。
; i% k0 h6 n/ O8 U# a2 J7 t7 m9 m1 C2 P# \
! f5 k8 v0 q( O' L) k+ F4 c4 p+ R5 q# M# L0 e) F% \) m
PCB应该看起来像注释图片,有些ST - Link的引脚不同,但是用万用表测量引脚非常容易。
2 z% V6 \8 M$ G2 ~SWDIO连接应该连接到引脚34 (引脚编号从MCU上的点位置的引脚1开始),SWCLK是引脚37。" `; V% m; E; I+ G
- y5 D/ \7 u- V2 R9 J' r( x" Q& X接地( GND )可以使用引脚10上的GND引脚进行测试,3.3V引脚也是如此。, D/ v# Y/ }( E) d
没有必要找到GND和3.3V引脚来对stlink进行编程,因为您可以使用接口上的VCC和GND来连接,最好还是测量一下,$ e: ~3 p) ?+ d8 v2 r5 q
以确保SWDIO和SWCLK连接是正确的。
1 Z, z- h) _) y5 u9 a- k5 w2 U/ T! X& u T# j8 {: z" i- L
# `6 G' M/ a) ~2 Z& _" d& W* ~2 C# @3 a! X
如果你使用引脚10连接地线或3.3V,你应该能够使用逻辑分析仪来抓取SWDIO和SWCLK信号。
, [, c& E* [8 P U- w8 o2 h! F1 G
解锁7 x. G6 L+ k! c/ p( _/ A, w9 [
- $ openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c "init" -c "halt" \5 j3 i, Z" M* z6 J- v5 e
- -c "stm32f1x unlock 0" -c "shutdown"; J3 K4 \4 f% u: a& ^" ^3 ], ]0 }
- Open On-Chip Debugger 0.10.0
, Q9 U- P0 [" v! G' r4 n - Licensed under GNU GPL v2
1 q' t% Z9 l1 F5 K& _) V - For bug reports, read2 q# Q, `! a1 v
- http://openocd.org/doc/doxygen/bugs.html
2 T8 f5 C' N" k5 e - Info : auto-selecting first available session transport "hla_swd". To override use 'transport select '.
: E' N$ s+ y+ x& H( j* q - Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD: ~7 B. `0 c& r# ?' F( S# n
- adapter speed: 1000 kHz
: W; y: P. x4 I1 H& O% P. Z8 K( T: C( u - adapter_nsrst_delay: 1002 f" l/ l5 A3 H2 C4 S
- none separate
5 _& h# [* X, Y - Info : Unable to match requested speed 1000 kHz, using 950 kHz( d% z- w+ e4 R9 T
- Info : Unable to match requested speed 1000 kHz, using 950 kHz
8 w5 v% ?# I+ ^7 w" Z0 [ - Info : clock speed 950 kHz( k7 J" ~- f& E5 p
- Info : STLINK v2 JTAG v28 API v2 SWIM v7 VID 0x0483 PID 0x3748
% }/ @- H y% C0 D7 `( n - Info : using stlink api v2
5 x# q" [/ M2 {; T$ g - Info : Target voltage: 3.249867
" G8 g7 G- N1 Z _( o - Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints! D' f: M( C& N( O6 J
- target halted due to debug-request, current mode: Thread 6 y4 j) J- q) d' r
- xPSR: 0x61000000 pc: 0x08003d5a msp: 0x20004e38
3 G7 H: c$ {: n0 s$ _& e, v+ i/ S - Info : device id = 0x200364103 H0 G) K# z; W/ R7 ^
- Info : flash size = 128kbytes
4 ]. a1 R; r9 A! X& r( s6 U U2 w6 z - stm32x unlocked.
$ U3 t3 u3 K% t: \1 O+ J7 R( Q# p! Q - INFO: a reset or power cycle is required for the new settings to take effect.
) b8 X) W+ E/ L+ q - shutdown command invoked
复制代码
5 Q, k- M6 T, L. R接下来,拔下3.3V电源线来重新启动设备。
4 e' A6 M% u n- ~ \( e' y) q& F9 w1 w T4 n9 R/ Y
您现在可以擦除flash,并向其中写入自己的固件。- `* y1 w' |3 L( H8 e& Y& \ p" ^
$ B" ^) I. r5 X1 R
- $ openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c "init" -c "halt" \
- C6 V1 I- t; H9 O" W/ F6 p - -c "flash write_image erase hello 0x8000000" -c "shutdown", S2 Z1 z' p3 G- c/ _) E( H
- Open On-Chip Debugger 0.10.0
5 i% A! { o& M2 h" q - Licensed under GNU GPL v29 q' J% h( e& z: R$ y/ S0 C
- For bug reports, read
$ C, a1 j, i2 j5 M: d" R( l9 x - http://openocd.org/doc/doxygen/bugs.html
: {& B. p) }. x# Q; _) m* Z: v - Info : auto-selecting first available session transport "hla_swd". To override use 'transport select '.* r8 `" D/ @. k$ F5 P$ p. B1 e0 `
- Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
) b6 @1 Y: G7 Y- P$ H% c - adapter speed: 1000 kHz
3 E3 c) q. H. a" Y1 Q: Z - adapter_nsrst_delay: 100" O$ _; J, d& I
- none separate2 G1 o& |' S( g/ n
- Info : Unable to match requested speed 1000 kHz, using 950 kHz! y% U- T$ c" v0 C
- Info : Unable to match requested speed 1000 kHz, using 950 kHz8 L" t% p$ j3 E6 M
- Info : clock speed 950 kHz# N! \7 |+ W; G; I3 a0 R8 i9 U
- Info : STLINK v2 JTAG v28 API v2 SWIM v7 VID 0x0483 PID 0x3748
: s% O, D3 b# K4 h! ]- I& O- R/ q - Info : using stlink api v2
8 u C, n! M# G4 V( ~% \; z8 u7 Z - Info : Target voltage: 3.249867
0 R1 o9 d, a0 x/ B4 F# P5 C3 F - Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
3 F) A0 B9 B' b4 u) i0 w8 N" z/ z% x - auto erase enabled
+ n/ k4 F# X# m8 Q$ I) O9 i5 Q; G - Info : device id = 0x20036410
# z; F/ B3 y, r, q. a - Info : flash size = 128kbytes
; Y! L$ E* U7 _* d, w& ^- D! Y- y - target halted due to breakpoint, current mode: Thread
$ t T H5 C3 m0 M5 b: m - xPSR: 0x61000000 pc: 0x2000003a msp: 0x20004e20
3 y& g8 A2 x7 P* [% I2 C) ^ - wrote 21504 bytes from file hello in 1.222309s (17.181 KiB/s)' Q! b O% y( \9 |7 V* a" M3 C
- shutdown command invoked
复制代码 7 P) Y. x' T- _- V9 K
制作PCB
/ s, k9 [% H8 Z7 B. t5 [: S我从PCB逆向工程开始,并将其记录在KiCad的eeschema中。& H8 o8 ^# v2 N" Z' a: E7 _+ k
1 h+ {" p0 S* e1 v: C6 M9 Y% V) T结果是见附件/ i1 x; f9 l% [4 J) M
; s+ |8 @' ~8 g* ]" S7 { k. f
这是我的电脑绘制的的PCB,你的可能有点不同,但是MCU引脚到输出引脚的映射应该是相同的,否则ST Link固件无法工作。
8 N+ {7 p0 l& t/ \' F9 r9 Q: T d3 L! o3 H
即使没有增加引脚,也有5个GPIOs可供外部使用。这5个引脚中有2个支持TIM4 _ CH1和TIM4_CH3 )和1个ADC引脚( ADC_IN5 )0 C I7 O, i5 I" H1 F
% r5 q, d$ r! p+ ~% r* o3 l0 p( G
|