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

【经验分享】STM32芯片烧录的三种方式介绍,串口、STM32 ST-LINK Utility以及STM32CubeProgrammer

[复制链接]
STMCU小助手 发布时间:2022-5-6 09:55
1 概述, U4 f4 l' J- X9 J
1.1资源概述
, T, V/ A- x' m/ T+ ?+ |6 a
开发板:正点原子STM32F103 Nano开发板
8 c" p6 ?. S4 j8 n" n* \STM32 ST-LINK Utility版本:V4.5.0.0
% k; U- W; n8 B) P7 [$ LSTM32CubeProgrammer版本:V2.4.0- }( r: B7 A/ U% b
MDK版本:V5.23& Q$ K/ M4 u5 m2 C1 v
主控芯片型号:STM32F103RBT6; c5 ]4 U8 b8 S' H4 F

# Z, }) {) s* H7 \& V- R0 k: S QIJV`C3P1@WS[%F@UI6(HD7.png ) a7 `5 ~" K! r6 I

+ R1 m% D# s7 \# u1.2 STM32串口烧录方式
+ B& ]% g5 A5 t7 ^# l启动模式说明说明,我们选择系统存储器启动。$ l* l' I. U0 H+ |( [8 w6 ~; E
I}5HTZ[Q4)MAD7UZPPM4$I1.png
9 C, M) s& s. i/ [7 i0 Q% j1 o2 r# O
内嵌的自举程序存放在系统存储区,由ST在生产线上写入,用于通过可用的串行接口对闪存存储器进行重新编程: ● 对于小容量、中容量和大容量的产品而言,可以通过USART1接口启用自举程序。串口烧录的原理就是利用这个自举程序读取串口的数据,对内部Flash进行擦写,实现程序的烧录。  f8 M7 [5 r. t3 a7 i: h0 j
使用串口进行烧录,上位机可采用FLYMCU,然后通过USB转串口线(或者板)给目标设备进行烧录。需要注意的是,如果是M3内核非互联网型的板子这里的串口必须是串口1,对应为GPIO9和GPIO10。如果是M4内核,可以是下述端口。
& S6 E2 ?% B' K● USART1(PA9/PA10)8 n# l1 e% {1 M
● USART3(PB10/11 和 PC10/11)
/ {$ H( D% q+ R3 ]3 K7 ?● CAN2(PB5/13)
) @3 E8 z/ n7 p1 ]● USB OTG FS(PA11/12) 从设备模式(DFU:器件固件升级)。) N/ W* N6 ~2 x- c% \! ^
& G% e8 e) {; v+ k% r
20200412080748985.png ( j- Z: ?8 i; T- o
6 r$ n7 B3 D9 k' h# f
BOOT1设为0,BOOT0设为1,按复位键即可进入串口下载模式,打开FLYMCU软件,选择正确的串口,点击读器件信息,显示连接成功。
8 Y# M) ^1 h' T
( j0 |' s( S; q( F 5MG7C$HP4{~G8Q`)HKZ}T4N.png
1 K& @$ h) w5 q2 u% w% C& ^! u5 t: O6 @
$ k+ a% ?; u. s- Z2 Y' C- ]* I打开所需要下载的HEX文件,这里由于电路上没有自动复位进BOOT区的电路(正点原子部分高级一点的板子有),我们选择不使用RTS和DTR。点击开始编程。直至下载成功。% L! H; U8 H3 q6 ?1 p1 A
2 W; m* U% h8 }8 z* P
5HYGC7S3MIB7WS6K3TIRN$X.png & e2 c+ t2 `  ^: {
/ N$ u4 r* T* m  o
下载完成后,将BOOT0跳线跳到0,按一下Reset键,程序即可正常运行。
3 V7 S: d9 b/ u) d2 J使用这种串口方式烧录时,若选择STLINK进行烧录,将会报错。未检测到STLINK错误提示。需要使用另外的工具进行烧录。
: x9 P8 B( k( M! E. u4 }% a1 M" U2 x0 \; g1 ^: i, F  v
1])I`NH(NCE`_T(C{DXA4Q6.png
. k$ h& J- ~" \& Z" g: V" p
" B* H: S( v7 j8 @, L2 ], l+ M2.KEIL软件下载介绍8 E; K/ m4 M) K
可以使用KEIL内部集成的STLINK组件进行烧录,使用此种方式进行烧录时,将STLINK连接到电脑,在KEIL中可以检测到STLINK。8 z( B1 Q, ?' \1 x0 B" q
建立工程并编译通过后,可以实现内部集成的烧录工具实现对目标开发板(芯片)的烧录工作。
& o: n0 ?1 F9 i5 O/ N# R9 H3 J7 A' x" p. l
)7H[7R35SEB_C{9LA})HC3I.png + I; e# R( I+ S" h% R* `( @' ^6 U
; @- j/ M) r9 l/ d7 ?' E" t
缺点是显而易见的,当我们工程文件缺失,只有烧录目标程序.bin或者.hex文件时,我们就不能通过这种方式进行烧录操作。接下来我给大家介绍两个ST官方的烧录软件,可以在ST官方网站上下载到。分别是STM32 ST-LINK Utility和STM32CubeProgrammer。# B, r" X" Y, Q- }1 J
3 y2 B. u& \# H% |- T, z, w
UQI3T}M`NL0(N9G]{88~LWO.png
( \; y3 j/ ^) I/ ]+ s8 @
1 K* V/ e$ L# D. k4 Y4 Z3 STM32 ST-LINK Utility介绍
2 K( O2 ]& T& f$ U4 T2 M& _2 N* a
3.1 windows操作系统

0 E$ d0 K4 f- _2 d, }/ }上位机可采用ST官方的STLINK软件,然后通过STLINK模块给目标设备进行烧录。
1 }1 w$ J6 J, L' \
! m; p7 X1 [- e 2020041208091471.png # M2 j/ b3 s- w8 C
8 `! w0 `! B, Q+ M# @& ]
此软件需要使用STLINK仿真烧录器,支持.bin/.src/.hex/.src/.s19五种格式的烧录文件下载。烧录文件在MDK软件编译工程时会自动生成。正点原子的例程烧录文件位于OBJ文件夹中(.hex)。如果是使用STM32CUBEIDE生成的工程,编译后烧录文件位于Debug文件夹中(.bin)。2 \' X# Z, M# N9 ~# @

+ x% _4 a6 [# E5 _9 e6 w0 G )90LXV1Y3S6L$O(Z46~HIFC.png   N* `+ ?$ K0 I/ k; a

0 s3 m( E* m* x$ r这个软件支持开发板板载的STLINK V2.1进行烧录操作,不会提示需要固件升级等任何错误。具备烧录软件和芯片已烧软件比对灯功能。软件体积小巧,非常好用。* B" U  |  P) V: K# w/ J

0 }. t( Y7 u2 L2 s9 R, o. F3.2 Ubuntu操作系统中烧录
% D' S; h! v: w2 Q3 u3.2.1 软件安装
  _6 v1 c' r8 B3 ?- ?' u8 U
软件直接使用命令行安装即可,UBUNTU的源自带此软件,无需在github上下载源码编译安装。
2 p' Z' h2 x2 B& {* ]$ {( v' T3 j9 u7 n0 Z, U, E2 V& s
  1. //安装STLINK
    7 S! {; t4 _3 [$ T/ n+ S- B5 T
  2. sudo apt install stlink-tools
      m! e, O' _5 J# g2 @1 B; C

  3. " m7 L% ]) B/ b* e
  4. //查看STLINK的版本,确认是否安装成功,如果成功会返回版本号0 n: I+ s) J* S9 E
  5. st-info --version& x( F/ |( R  m" a  [
  6. 5 r: K- c- E% y3 n; b
  7. //安装STLINK-GUI界面: j( \  [& N# ^  l. ~' D
  8. sudo apt install stlink-gui
    ; X; L& O* ~' e. b9 g8 _
  9. / t8 j3 B' @5 j7 A* |
  10. //使用命令行进行下载
    3 ?. U: n% \4 h9 N- `  g  d" t
  11. sudo st-flash write test.bin 0x8000000
复制代码

* b/ Z* b  X' d使用命令行进行软件的烧写工作,下载命令的格式,比如说可以使用st-flash erase对芯片进行擦除
. M0 x2 [8 r# Z6 p9 M6 {# l3 b' P  Z! |( `4 R! V. s
  1. whs@whs-hp:~/Downloads$ st-flash
    & ^& E- a+ M% v  [4 k' M* Z1 ?1 a
  2. invalid command line+ u5 B) R. H- O& k" P
  3. stlinkv1 command line: ./st-flash [--debug] [--reset] [--format <format>] [--flash=<fsize>] {read|write} /dev/sgX <path> <addr> <size>
    " Y" H7 }2 e6 V8 i8 S9 X/ g
  4. stlinkv1 command line: ./st-flash [--debug] /dev/sgX erase6 [* m1 I! ~9 ]" Q
  5. stlinkv2 command line: ./st-flash [--debug] [--reset] [--serial <serial>] [--format <format>] [--flash=<fsize>] {read|write} <path> <addr> <size>; p/ M# ?5 f; k& ^
  6. stlinkv2 command line: ./st-flash [--debug] [--serial <serial>] erase0 H' Q8 o: h9 ~" X9 l* H# j3 @5 `* b
  7. stlinkv2 command line: ./st-flash [--debug] [--serial <serial>] reset2 N8 q( ^6 w; J1 D5 M, J
  8.                        Use hex format for addr, <serial> and <size>.; |9 s; Q/ C% {9 C% x5 ]' _
  9.                        fsize: Use decimal, octal or hex by prefix 0xXXX for hex, optionally followed by k=KB, or m=MB (eg. --flash=128k)( R+ N5 q0 {5 s
  10.                        Format may be 'binary' (default) or 'ihex', although <addr> must be specified for binary format only.
    ) ~  F+ Z: A% p& ~& _
  11.                        ./st-flash [--version]
    " e) S& X+ E" b
  12. example write option byte: ./st-flash --debug --reset --area=option write 0xXXXXXXXX0 K% r9 n! h1 W( r
  13. example read option byte: ./st-flash --debug --reset --area=option read > option_byte
复制代码
$ G9 k! A+ f/ L# }, n  b; M
3.2.2 软件烧录
# C" b% k8 ~1 Y' H* d软件下载示例,烧录文件为bin格式,需要带地址信息,sudo为非必须的,这里使用的版本是1.6.0
2 t; k5 Z3 H& o
/ w% c1 ], ~; A0 j6 h
  1. whs@whs-hp:~/STM32CubeIDE/workspace_1.6.1/Cube_fl03_led/Debug$ sudo st-flash write Cube_fl03_led.bin 0x8000000
    . S4 I. `, K5 @) L# i* G& }* _
  2. [sudo] whs 的密码: , c0 I3 g  e; w# l9 f
  3. st-flash 1.6.0& e" @& Z) ~* G1 _
  4. 2021-08-27T00:28:36 INFO common.c: Loading device parameters....
    & q2 M" ]: Q6 L, Y
  5. 2021-08-27T00:28:36 INFO common.c: Device connected is: F1 Medium-density device, id 0x20036410" |9 }' G: J$ m$ _
  6. 2021-08-27T00:28:36 INFO common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes
    4 R: v1 ]9 o# {/ P: D' t
  7. 2021-08-27T00:28:36 INFO common.c: Attempting to write 15400 (0x3c28) bytes to stm32 address: 134217728 (0x8000000)
    , ]0 N7 a# K: L' |! B3 Z3 f4 d
  8. Flash page at addr: 0x08003c00 erased1 A6 Y4 N( t/ L1 P' |% y- r
  9. 2021-08-27T00:28:36 INFO common.c: Finished erasing 16 pages of 1024 (0x400) bytes
    9 o9 y3 n" e2 r& @
  10. 2021-08-27T00:28:36 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
    ! z! B, M( O  k. }7 t
  11. 2021-08-27T00:28:36 INFO flash_loader.c: Successfully loaded flash loader in sram
    * ~, G( v% _& I% n2 B5 ?) e7 Z
  12. 16/16 pages written& h% v: ~6 k/ I' F" ^
  13. 2021-08-27T00:28:37 INFO common.c: Starting verification of write complete* f' {+ q* y1 h# _$ c% V( N
  14. 2021-08-27T00:28:37 INFO common.c: Flash written and verified! jolly good!
    1 n" R; B( S) ?% p7 ]2 i
  15. whs@whs-hp:~/STM32CubeIDE/workspace_1.6.1/Cube_fl03_led/Debug$
复制代码

  x7 F1 C- q1 V2 H% O6 |' s当烧录文件为hex格式时,由于hex文件里边包含地址信息,因此不需要再指定地址了,但是需要指明烧录的格式。
( _& b* e! ]: V  O" P# V# f: Z
8 N! ?! @5 o" m9 f+ q" P" ]
  1. whs@whs-hp:/media/whs/HP_D/STM32/F103/trunk/FSMLED/Project$ st-flash --format ihex write output\(mdk\).hex
复制代码

0 d% x/ a7 e; ]4 Z' q3.2.3 使用GUI界面进行烧录
$ P: `# e# w  a- S安装STLINK-GUI后,可以使用GUI程序进行下载,GUI的显示界面如下
4 w& d+ I+ b; }8 q0 A+ s9 h( M% Q( y% \8 P) ^
{5C05PZ32H_H0V{ZUVOD2.png / M; e' ?. a$ u& g. s. F1 _
5 e8 ?6 `8 W1 @0 M0 _( e* a' e! ~' O
3.2.4 更多详细信息+ r3 R, B3 \0 W" _# Z! b
命令行模式仅支持V1和V2版本的仿真器,并不支持V3版本的仿真器。
* a; H8 L! N  G' E! |2 M& A7 O  V更多详细信息,可以参见GitHub的官方资料3 N, j' F" w/ f$ O! m- |

% F; ^; Q7 h9 ]2 y1 L6 o4 STM32CubeProgrammer9 E1 z. u+ N+ ?: r+ K  Z! C; m
4.1 使用STLINK进行下载

2 t$ ^  K0 ?2 ~9 p5 gSTM32CubeProgrammer软件是ST新推出的烧录软件,支持更多的方式设置,官方定位是替代ST-LINK Utility。打开如下图所示,支持STLINK、USB、UART以及OTA(均需要对应的烧录工具)下载,支持SWD和JTAG。但是需要说明的是,这个软件烧录时,需要STLINK固件为最新。使用正点原子Nano开发板时,会提示软件非最新,不能进行连接。
8 p' }" ^% \4 b: q; t/ y* s* r2 o! R RT6N@R`}6LGY(Q7)EO]6J(J.png
1 e1 z& U5 `$ |, h& i
( T4 Z: b; p" A% F, G- I弹出的固件需要升级的错误
* B) P! {! a8 t; f2 m: b3 w/ b% ?0 X3 D' h
AWMD}{I[6XFXKJZ2L{1[9VA.png
( l/ A4 H% J+ ^& F: C5 w3 D: I/ D  c  s4 J/ T
如果买的是官方出品的STLINK,可以正常对固件进行升级,如果不是官方的烧录器,升级前请三思,升级后有可能导致烧录器不能正常使用。下图为点击firmware update后出现的弹框。* P7 x9 C' q+ v9 W! D+ d$ S, J

, s4 Q' }( d$ X1 H) S, m' ] UCE)]X[W[E0J8K$%M$A(A)4.png
. L+ D1 L" T3 J  B. ~) _: E$ x4 |9 o- {! I5 N- i" S
使用正点原子Nano开发板也无需担心会升级导致不能用,因为你尝试升级时会弹出另外一个提示,需要额外的9856B空间,不能进行升级,原因是我们板载的STLINK芯片采用的STM32F103C8T6只有64K空间,这部分空间已经全部用完,不能再写入更新更大的固件。
+ ]8 ?, O2 |( W0 A$ o  G1 Q6 L$ e6 r. {5 S6 A- k' ]
20200329081903693.png ) D( ], x4 g6 ?+ _1 y1 {( m6 `
% m: k- R2 v. J( V/ \( M
另外这个软件也集成在STM32CUBEIDE软件中,STM32CUBEIDE为ST将eclipse、STM32CUBEMX和STM32CUBEPROGRAMMER集成整合到一起的综合编程软件,目前用的人还很少,挺好用,而且免费,跨平台。连接成功的示意图如下,默认会把芯片内部的程序读出来,可以对此程序进行另存为等操作。
- |  ~5 {0 ]% y* D$ @4 G6 C
  u( }& R5 F6 [" w& Y0 s ~BHKHPJ55K843QTLM0DB(1O.png 3 [/ A- \" A4 D  L; D0 a! t

9 _; A4 v% W6 Z! z! N0 D6 B- a使用此烧录工具,烧录时还可以对芯片进行读写保护,避免芯片被恶意读出盗窃烧录底层。
0 r: t+ L- J$ {$ _3 V7 s& E) I* S1 J4 @% k0 u1 O7 W
MHG]EQYKGQYWHOJC9~8$}MV.png
6 L4 G! \+ ^% O9 L0 R* a( o9 d/ h2 K: f* }' n0 X
在ubuntu中此软件和windows下是相同的。9 l) `1 ~4 O, G& E5 c' w

, H5 B9 e9 a7 w* d2 _* ]4.2 使用串口进行下载
0 _" ~) L6 x1 @; n6 S# f5 x2 F我们在此软件中,可以使用串口进行连接烧录,这样做的好处是不需要使用第三方串口烧录工具,另外cubeprogrammer也不会对STLINK的版本信息进行核验。
' z* q9 S. i9 `+ a# p+ i5 |) q! Q; s2 l
1.BOOT设置,将BOOT1跳到0(开发板已经默认拉到地),BOOT0跳到1(3.3V)。按一下RESET按键) i# Y) n( T+ c# k; H

* Q! N% B% z3 v0 d7 y! k L$BB]N1IV1]Z0LDRWOERX7L.png 4 s2 s8 K+ k) p$ o, e5 j
/ N0 t" Q% a& e; E  B4 Z! \( k1 F$ [( n
2,打开软件,选择Uart和正确的COM口,由于用的是串口,因此就和stlink无关了,用一个USB转串口线也可以进行下载。9 G) L6 d# F0 b: B

$ m+ i8 \8 y" k& J6 B! P. x I4Z6K9P8%]{WO5V4RN%E{)0.png - L+ x7 x. R* v
; F9 G  m% r6 F  k( G3 y4 S$ W7 L
3,连接成功后如下& ^" Z0 R2 A. k# A
, |; J: J. e. H& y* g, {7 c* l

  ^) G; b! ?' L" `% V& O6 L- u: L7 t! [; y, i" y
4,选择要下载的文件下载,下图所示已经下载成功。5 k, G1 o0 e$ J0 N+ Z1 Y
& B% T, b. `9 B$ B. G) ?0 t) S
W6U8POFZ${{OW6TNZZTFPWA.png " Z0 T1 e  y/ n) l. _( Q  W
! b6 f3 j) [7 Y$ H+ b. T+ h
5,将BOOT0跳线还原到BOOT0。若上图勾选了Run after programming,则无需按Reset即会运行新程序,若没有勾选,按一下Reset按键。
- e9 f, C5 ?, j; l0 d/ m
5 l1 i+ u6 G, d- D  ~4 t6 m6 e5 官方正版STLINK仿真器3 G$ I9 h9 F( Y
5.1 STLINK V3 mini下载器

0 c/ F7 I3 @  B( l- h# w# a这里我推荐一款官方的正版仿真器,即STLINK V3 MINI,ST官方近两年推出,采用了STM32F723的芯片,比常见的STLINK V2拥有更多的功能,更快的速度。2 D4 i3 J, q- _
4 v$ @+ F6 i+ h, p& j) K
7~U(Z@RW%()X$FW7ML{AULL.png + v4 w$ i* T' E/ f

  r0 J* w# \4 e# C这个仿真器非常小,比通常的U盘还小一号,且排线为14P 1.27mm间距的排线。因此不支持常见的2.54杜邦线连接,需要额外的转接板进行转接。这里需要特别注意。此款仿真器支持一个虚拟的串口(13脚和14脚),支持SWD和JTAG烧录,端口定义如下:; e" H9 \+ F: |3 U

' k" e: A8 ?8 V, p 2([)Q497${KHGQ4ENZ_LI.png
( {* j. h1 t$ C% ~& r7 K
- K' P5 T+ I; ]( d( ~" }) q嘉立创白嫖自制的转接板,此板的J4插座还支持NUCLEO的SWD扩展口的转接,按键为RESET按键,可以下载完成后手动对烧录好的芯片进行复位。' j6 \  D8 [0 v  v1 C

% m7 R# J1 U& A4 N: `) T& Y+ u N9ROE)K(M(YVBJO0LL6WCNO.png
- {$ t' h; z0 _) D4 u* [6 i0 o9 q  F) F* P6 F
背面引出的串口,本想放在正面的,结果实物比封装大,翻车了,而且1.27的插件不是一般难焊,很容易连锡。
/ Z1 D* J4 \& r( u. p5 V
( w9 l0 I. j/ D2 x6 r W$N1_2XS(ZA9481%GX5T0~2.png
; D+ v+ n( z. k$ z5 J$ o
# }  M- t$ c7 uSTLINK V3版本的速度比V2的要快,缺点是不支持山寨芯片,接上后提示无法连接到目标,而STLINK V2是支持山寨STM32芯片的。目前V3系列暂时未发现网上有仿造的产品出售。这款性价比比较高,淘宝价格80元,推荐各位购买。0 F$ [' |5 b9 X- O
& E! I& \7 e* z
5.2 集成在官方开发板上的STLINK! A) R+ U3 ?+ c5 H5 [" i" q
官方的开发板集成了STLINK,这个STLINK可以对外进行烧录。这块部分可以裁下来单独使用。当烧录外部设备时,需要将外部烧录跳线拔下来,然后将烧录口和目标板通过杜邦线进行连接。不同的开发板对应的STLINK版本不同,F103对应的是V2.1,F7开发板对应的是V3.0。
# R# o. Y' U8 x5 q, ~2 G, U" @0 X5 A3 X8 J
2(RJRZHN0IQ5JXG7@02$UUQ.png
" w9 h, M! v/ s4 E8 T( g& S& I: Q+ l3 u" c1 e8 J& r  X  q
可以做一个6PIN转20PIN的转接板,转接到20pin上,成为一个标准的下载器。
) H2 E2 U/ K9 G' w% }0 T& o+ m# d
% _) R# b* q8 k# t5 ]4 T  k 7[Y2Q`LXJ8JZ]V78CWPPWDF.png 4 o4 o9 J3 G, o! y

0 p( z# k4 @2 }% x6 a. Z0 I6 连接异常处理1 a& T7 M1 S4 M2 Z! l
6.1 能连接但下载报错解决方案
6 M& b! C$ o" T  Y3 H7 G7 V# E$ Z$ t
使用杜邦线进行SWD连接时,如果是散线或者线缆过长,会出现KEIL能连接上,但是下载报错(flash错误或者M3错误)的故障。将线缆更换为排线或者降低线缆的长度可以解决这个问题。
. F7 }) M6 x- T! y; N# P; G! |5 N
JNX01_AQL98_LFHHZ%PVKS2.png
' F- w. U- r8 {2 v1 {% S9 n3 A0 k; @
+ _% ?( q6 C1 F& }6.2 特殊IO口使用导致烧录一次程序后SWD口不能用

2 H6 y7 M* v* A- f' v$ ]JTAG或者SWD端口被占用,但是却没有进行正确的配置。  I# J9 E, N7 r* k3 L4 k
在开发STM32F407芯片时,调试18B20温度程序时发现一个问题,当下载完一次程序后,SW就失去连接/ y) ?/ `  Q2 Y9 p: b( d! H

1 Z% A& R( [9 @. E9 b0 t 8$F5M1ZZAF$]1A)FP`EA$$Q.png # j8 e& G/ W+ H
# {% F( G9 O* g9 O3 r2 S* z( j- ?  x
强制烧录时报错信息如下:No target connected! r: \. r, \( }! B) w3 O3 V
; _. X6 y# n( M' g1 `% \" l
~L8$%~HS_8P]F6[7T]4XH}N.png
; A" m- i' A. }8 {$ X/ D2 U$ F( ~/ g" w/ L* I8 A3 \& p1 U; ~
报错信息Error:Flash Download failed-Target DLL has been cancelled
6 ^+ x; f( R$ O7 \- y) m% ]/ q; w: t3 W; j- _" f
)[FIOIPWXU5VTF@@F@WG[IB.png
9 j! C: ]0 @3 s- R5 o5 N6 N9 V; s: [0 u8 h$ w
使用utility连接也会报错,报错信息如下:Cannot connect to target
7 w" t/ R3 b2 u& E3 ?( D# z& s
0 x1 i5 J- I" {2 q4 A, a' n" i S__H@6SJBAS44LY(2VI1B8I.png
* \% y9 h4 o9 C0 W, X6 h" y
6 f' I; i- Q* K) L按照提示,在烧录时按Reset按键,成功烧录了软件。使用一行行注释排除的方法,最后定位在DS18B20_Init初始化函数这。程序使用了PB15作为了18B20的输入,这个口也是JTAG的接口,在使用时,不能按照常规GPIO口进行配置。使用时,需要先禁止JTAG,然后使能SWD。如果弄成了最后一种模式就SW下载方式无效,需要按住Reset复位重新连接烧录了。0 p9 c. H7 a, `7 D
! ~' z3 B8 f. \9 Y9 n( o
O({94CTAQBEDIHM~X@9PSA9.png & l, H! H2 L  Y! u" C) e
# o& R% \2 w2 G2 K) p
为了验证这个想法,在程序中将A15改为B15。更改初始化函数& |5 \) }5 r/ [

$ i; i- T7 W" R: R( o
  1. u8 DS18B20_Init(void)
    1 g& U3 H9 m/ E7 M+ l( `
  2. {& W) k! C1 g, Q1 \
  3.         GPIO_InitTypeDef  GPIO_InitStructure;
    0 x& ], A) x8 \8 t9 M# N6 G& z

  4. ! v+ n/ B( S) N' i7 @6 [2 |
  5.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOA时钟,改为使能GPIOB时钟
    7 F( t; E/ m6 l/ l4 E
  6. - S) X- K6 {$ I; C6 c4 `
  7.   //GPIOA15,改为了GPIOB15
    ' R9 V4 @5 l7 Z8 C1 {! c9 r
  8.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;. n3 m, }9 s& k0 L, l" a5 B: z& v! b
  9.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式/ t! A3 g; i: D0 {3 n  g
  10.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出' `3 B3 B% \# }  `  N( M, ]
  11.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//50MHz
    7 J1 h+ Q6 [& P6 h5 I3 [# u( R
  12.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉) e4 X  G% S0 e
  13.   GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
    ) r' D! Z; Z5 F) M- A3 v9 [( a
  14.   DS18B20_Rst();6 J  k/ x$ r+ m& r
  15.   return DS18B20_Check();
    . Y  j5 b$ P. c- @' y8 c* N
  16. }
复制代码
* w$ a! ]& E$ I" f7 @- O
更改头文件定义
( F9 r7 o+ G( G$ ^4 W- C; N; }& x. j' U7 L  G( z" `: h9 p
  1. //IO方向设置
    ! _* `1 a  e% S$ \: I
  2. #define DS18B20_IO_IN()  {GPIOB->MODER&=0XCFFFFFFF;GPIOB->MODER|=0;}        //PA15输入模式,改为PB15" t) z' ~  G/ [; x; w" W7 g. X
  3. #define DS18B20_IO_OUT() {GPIOB->MODER&=0XCFFFFFFF;GPIOB->MODER|=0x40000000;}         //PA15输出模式,改为PB15
    % Z+ [) A5 @6 b5 }5 V
  4. 2 |5 @. \, u" z3 y, |
  5. IO操作函数                                                                                          
    : `9 ^$ D& l5 ~5 c5 u
  6. #define        DS18B20_DQ_OUT PBout(15) //数据端口        PA15,改为PB15
    ' A  n. }9 Z* v/ t9 x
  7. #define        DS18B20_DQ_IN  PBin(15)  //数据端口        PA15,改为PB15
复制代码

$ l# o2 V! O. A/ N更改后,可以通过编译,下载后,KEIL也能扫描到设备。# |! y& p7 g( p4 A  z: I
  {. g- R5 F) p+ w2 `
S1UEZ166@LHTB}ILYKEVM.png & Y$ Q* q, W3 j; R' R
5 e3 `( f& H2 _6 X& y
6.3 能识别到芯片,但是下载时弹出报错对话框
: I" r- Z# U+ a: y使用5.34版本的Keil,能识别到芯片,但是下载时报错 Command not supported
% m1 _5 U& H% e9 x7 h' @5 l8 a4 O3 G0 D5 J# \9 A' u$ V+ s9 @
%GE64FILYMFH_0~0~M{ZC.png 0 k5 C4 F" Q6 R3 V* o, O

' w  L% h6 S$ x) ~/ {! `4 h& p点击确认下,报另外一个错误
+ o+ w* v" ?2 o2 E" Q% }7 ]$ e. }) ~% L6 C: v8 R. {- E
F6O02EZEKQMO8]V`Z5IHW.png
+ J& M8 J1 w9 W1 i  x2 L) ~9 A. f6 f3 ~0 L$ v  \
原因是新版本软件对未能及时升级STLINK固件的烧录器进行了封杀。需要升级仿真器的固件。当然盗版仿真器不能升级固件,唯一的解决办法是将Keil进行降级处理,降低到5.27版本。下图是在keil升级固件的方法。用正版仿真器实验过,没有这个问题。
- o0 s& U- c# ^0 y3 a2 G+ H4 D$ _  g  B: M9 b% v
S5RMZ2KZ[I2X1JDEQF6W{LV.png , `6 n4 W" q3 b* M  l
1 K/ f' [5 u. w% j1 m7 `5 V
7 stlink对芯片的部分Sector进行擦除4 \% g8 O8 u7 I# C/ E0 I5 D
在使用Bootloader+App的使用方式时,我们烧录App时,如果每次都对全片进行擦除,那么每次的Bootloard将会被我们擦除掉,导致程序需要下载两遍。我们可以选择对部分的Sector进行擦除,而不是全部。
+ @& V. J3 e' F: V9 W5 S案例:某个Bootloader对应开始地址为0x8000000,结束地址为0x80042B0* g+ E1 |/ O  r0 f$ s; ?: k
APP应用对应的首地址为0x80100008 B7 b/ ~- \* M' e, k# Z6 c4 r+ N
( D5 }" l" {. t$ F7 h3 a
A29J_F6S0DC[H)9W~D~~D[I.png
8 X# T- A2 f( s/ z: B3 H  P
) ?& V2 T4 T1 D/ `结束地址为0x8015BD0* x& }$ {. N- O8 [0 a8 C9 K1 o- J% F
) b& s1 N* k! m$ x" q: K
HY7}IO(){VQ`Y9P$((AEWQ2.png ( {7 X$ n" a) P! H! n8 u1 k; W
8 d, q' b, x1 _6 @
当我们不希望擦除Bootloader时,我们可以选择Sector擦除,擦除APP对应的地址段。1 _6 c4 b) S  L; l5 o. r" [2 Q

+ c& S) ?+ e2 ]9 B& X1 Q! ] RR%`C%W40(@R%DNS%Y{XUYW.png
+ I4 S9 z+ r. m+ t1 P3 T) R6 ?9 e
+ @8 e9 P& x3 Y此时程序回退到没有下载APP时的运行状态。可以继续下载新的APP应用程序。
) h9 \7 d5 L( a; d* e) E; Z1 v+ z2 U7 j4 T

% p" v! W" V0 ~  S$ E* @2 \
! s3 y0 [, j6 b6 n( V' V' i4 P. e+ F3 f# D  D. L
VCUMM95E8@KA@{6CPM5Q~_P.png
L8HRH4124RD$~4PS}EYCL{N.png
赞 收藏 评论0 发布时间:2022-5-6 09:55

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版