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

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

[复制链接]
STMCU小助手 发布时间:2022-5-6 09:55
1 概述( [  J+ g4 E6 J4 n. O+ |9 o* X: z
1.1资源概述
7 B& y; P" g/ i- h
开发板:正点原子STM32F103 Nano开发板$ k# w$ s2 \. ~" X0 z# s
STM32 ST-LINK Utility版本:V4.5.0.0
% `! r3 e- E7 B) p5 R9 p, @STM32CubeProgrammer版本:V2.4.0# E( {8 Z  H6 D7 @+ O1 M5 Y
MDK版本:V5.23$ ~. q+ s# \' s" N9 T$ G! |# ^! S) m
主控芯片型号:STM32F103RBT6
8 h6 j. K( {, S2 m
4 Y7 ?0 h' G6 r, P QIJV`C3P1@WS[%F@UI6(HD7.png
# H- Y/ J8 e* {
' p/ m$ Y0 l' w9 ?. r1.2 STM32串口烧录方式
- J* P, Y* i/ P$ p# u  s& F启动模式说明说明,我们选择系统存储器启动。; Y8 V5 k/ ~3 c' x
I}5HTZ[Q4)MAD7UZPPM4$I1.png
7 k4 z' l" v1 {! _6 O8 V* }! i7 r* Y- @# e4 Z! `9 L  H3 X0 P
内嵌的自举程序存放在系统存储区,由ST在生产线上写入,用于通过可用的串行接口对闪存存储器进行重新编程: ● 对于小容量、中容量和大容量的产品而言,可以通过USART1接口启用自举程序。串口烧录的原理就是利用这个自举程序读取串口的数据,对内部Flash进行擦写,实现程序的烧录。
+ u" {6 V+ c( b& b( J使用串口进行烧录,上位机可采用FLYMCU,然后通过USB转串口线(或者板)给目标设备进行烧录。需要注意的是,如果是M3内核非互联网型的板子这里的串口必须是串口1,对应为GPIO9和GPIO10。如果是M4内核,可以是下述端口。8 x1 Q3 d: U; ^  X4 ?/ z
● USART1(PA9/PA10)
4 @3 \, o/ h5 r5 p( j4 z# S● USART3(PB10/11 和 PC10/11)' q* s4 E! a" ~' w0 u! ~4 W
● CAN2(PB5/13)6 |2 U* d- d# E  ^
● USB OTG FS(PA11/12) 从设备模式(DFU:器件固件升级)。
" N- p$ |; [) |; R0 D: A8 Z6 c7 g% }5 o, r4 d% y: r% {6 d
20200412080748985.png % N, l8 x5 n0 e5 G9 R, A

; c6 G5 z+ j! x/ k9 I7 wBOOT1设为0,BOOT0设为1,按复位键即可进入串口下载模式,打开FLYMCU软件,选择正确的串口,点击读器件信息,显示连接成功。
+ f& D0 B( Y; v3 W) ^% o
& ?, H8 d  j) S% i2 v& w0 }) { 5MG7C$HP4{~G8Q`)HKZ}T4N.png
& I3 E8 j! a! G5 U3 ]9 q* U9 P2 k" r- |5 r3 s
打开所需要下载的HEX文件,这里由于电路上没有自动复位进BOOT区的电路(正点原子部分高级一点的板子有),我们选择不使用RTS和DTR。点击开始编程。直至下载成功。- \: j  f( ]+ f; p' i5 @
" \1 w6 ^8 d% J" w7 M
5HYGC7S3MIB7WS6K3TIRN$X.png
) J+ M% I0 J5 g7 _: \$ j0 T6 E8 v
! l# _+ b. V6 g9 }7 b- u下载完成后,将BOOT0跳线跳到0,按一下Reset键,程序即可正常运行。
/ X, y2 U, c  U8 T7 v" S7 G* W使用这种串口方式烧录时,若选择STLINK进行烧录,将会报错。未检测到STLINK错误提示。需要使用另外的工具进行烧录。6 ]  a" j( Q# `! x" q* \
/ r+ L, r5 F  K- o
1])I`NH(NCE`_T(C{DXA4Q6.png
9 E1 o1 ]" `' |. _8 b0 u5 D
/ z( k' M; u0 @, `. M! h7 h2.KEIL软件下载介绍$ H$ z" O2 u& a7 `8 V
可以使用KEIL内部集成的STLINK组件进行烧录,使用此种方式进行烧录时,将STLINK连接到电脑,在KEIL中可以检测到STLINK。: N: F  |& S+ t  m9 ?( ?
建立工程并编译通过后,可以实现内部集成的烧录工具实现对目标开发板(芯片)的烧录工作。" I% z# X: M5 i" ^: m- F4 C% G# l

3 w. i/ ?. T0 ?2 L  [ )7H[7R35SEB_C{9LA})HC3I.png
0 m5 A- ^8 q! k4 i, q
+ q4 r  ?% c: f/ u3 t缺点是显而易见的,当我们工程文件缺失,只有烧录目标程序.bin或者.hex文件时,我们就不能通过这种方式进行烧录操作。接下来我给大家介绍两个ST官方的烧录软件,可以在ST官方网站上下载到。分别是STM32 ST-LINK Utility和STM32CubeProgrammer。
1 m, T4 |0 [' T1 p4 B* F
0 I# i! @2 C: Y( m6 a+ z: p" I/ Q UQI3T}M`NL0(N9G]{88~LWO.png . ?) l: t' B0 g9 Y7 u$ G7 z

. |) Q- r: V; [7 u3 STM32 ST-LINK Utility介绍
7 Q4 F  Z8 R+ p5 S3 ^% _$ e
3.1 windows操作系统
3 j& j7 n; G) i
上位机可采用ST官方的STLINK软件,然后通过STLINK模块给目标设备进行烧录。* [) V! N% ~' c+ p

5 n4 \- Q$ Z- n! K! N( g 2020041208091471.png 5 X9 G9 e! P# D" R7 q

8 w8 T7 k) j% v1 C此软件需要使用STLINK仿真烧录器,支持.bin/.src/.hex/.src/.s19五种格式的烧录文件下载。烧录文件在MDK软件编译工程时会自动生成。正点原子的例程烧录文件位于OBJ文件夹中(.hex)。如果是使用STM32CUBEIDE生成的工程,编译后烧录文件位于Debug文件夹中(.bin)。( p1 N/ ^9 x% B  s+ n( `% A

2 J- x( f6 d6 Z% w0 F, ~5 ^ )90LXV1Y3S6L$O(Z46~HIFC.png
: Z; s/ p, y1 S7 v+ z. e9 H5 Z; h3 S( ~! H4 c: f
这个软件支持开发板板载的STLINK V2.1进行烧录操作,不会提示需要固件升级等任何错误。具备烧录软件和芯片已烧软件比对灯功能。软件体积小巧,非常好用。: \3 D/ X; P0 x. X: b" C! Z$ f
# R  K5 X. A7 r2 ~* t
3.2 Ubuntu操作系统中烧录: N, }% _- [4 l* i
3.2.1 软件安装
. k) j9 p8 P" Y8 e. ~+ {
软件直接使用命令行安装即可,UBUNTU的源自带此软件,无需在github上下载源码编译安装。
/ J" i( i4 t- H% {$ N2 U6 O% O3 f! C- ?/ D; j. j6 @
  1. //安装STLINK% w  j) l7 E; G
  2. sudo apt install stlink-tools
    : ^# f& v# q) C7 `
  3. : K  j4 ~4 z7 Z, @( |1 |6 ~
  4. //查看STLINK的版本,确认是否安装成功,如果成功会返回版本号
    / f1 ?& P4 b: R$ _# C
  5. st-info --version
    0 W# f' F5 ^3 I

  6. ! N+ v: ]' D, @8 C: K" y5 V
  7. //安装STLINK-GUI界面
    3 f# C2 V* H: {" S
  8. sudo apt install stlink-gui1 J6 t0 A& D: Z! y7 W# S/ g/ {5 f
  9. 6 }) J' u2 K+ R  ~6 A( x  q2 z: ?
  10. //使用命令行进行下载
    ' c4 q! Y" D- S5 K
  11. sudo st-flash write test.bin 0x8000000
复制代码

% P, ?+ c" ^7 U5 U7 M% ?9 D使用命令行进行软件的烧写工作,下载命令的格式,比如说可以使用st-flash erase对芯片进行擦除2 B0 B' w+ p0 [8 `. v/ Y5 k+ G4 f
% z3 T* r% B$ F, t
  1. whs@whs-hp:~/Downloads$ st-flash
    ; ]- P5 r5 d1 [6 b
  2. invalid command line3 I6 [/ a0 r0 W& S4 t
  3. stlinkv1 command line: ./st-flash [--debug] [--reset] [--format <format>] [--flash=<fsize>] {read|write} /dev/sgX <path> <addr> <size>2 X2 U1 {  N- _# k
  4. stlinkv1 command line: ./st-flash [--debug] /dev/sgX erase1 I0 e+ t/ G/ Y6 x0 C
  5. stlinkv2 command line: ./st-flash [--debug] [--reset] [--serial <serial>] [--format <format>] [--flash=<fsize>] {read|write} <path> <addr> <size>2 Z: V- I. c- p( C5 Q9 t
  6. stlinkv2 command line: ./st-flash [--debug] [--serial <serial>] erase
    4 Z) y/ U* f! X" M3 \
  7. stlinkv2 command line: ./st-flash [--debug] [--serial <serial>] reset3 S% D1 {/ ?7 c/ g, M. O2 Z7 U
  8.                        Use hex format for addr, <serial> and <size>.! _2 n' n' M1 j( ~/ s2 s
  9.                        fsize: Use decimal, octal or hex by prefix 0xXXX for hex, optionally followed by k=KB, or m=MB (eg. --flash=128k)0 I# {* N) s3 v% k- U$ a, g$ ~
  10.                        Format may be 'binary' (default) or 'ihex', although <addr> must be specified for binary format only.
    ' H, |! j+ a: K5 X
  11.                        ./st-flash [--version]
    9 G& ~0 N8 {$ F+ o! R
  12. example write option byte: ./st-flash --debug --reset --area=option write 0xXXXXXXXX3 Y5 X/ ^$ p6 `; P5 ^
  13. example read option byte: ./st-flash --debug --reset --area=option read > option_byte
复制代码
4 \6 O/ |$ F# _
3.2.2 软件烧录
/ `' \1 g* _1 Z7 ^5 V软件下载示例,烧录文件为bin格式,需要带地址信息,sudo为非必须的,这里使用的版本是1.6.08 L% X; I) b) p8 F6 x3 u

% ^5 F/ g) h3 W! G
  1. whs@whs-hp:~/STM32CubeIDE/workspace_1.6.1/Cube_fl03_led/Debug$ sudo st-flash write Cube_fl03_led.bin 0x8000000
    2 ^  V& L4 D) J9 {* R: b
  2. [sudo] whs 的密码:
    % W0 r1 F4 R. M2 L  z' R1 l$ U
  3. st-flash 1.6.0
    ( @; \) G" j3 O+ |2 c+ I
  4. 2021-08-27T00:28:36 INFO common.c: Loading device parameters....
    9 Z/ g) ^; a, T$ C
  5. 2021-08-27T00:28:36 INFO common.c: Device connected is: F1 Medium-density device, id 0x20036410
    + F/ m& E0 g. z7 e
  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
    , R- t" q; _; o2 z/ y
  7. 2021-08-27T00:28:36 INFO common.c: Attempting to write 15400 (0x3c28) bytes to stm32 address: 134217728 (0x8000000)$ L, P0 |6 h# J& h- r
  8. Flash page at addr: 0x08003c00 erased: K% O) K0 }- g" `
  9. 2021-08-27T00:28:36 INFO common.c: Finished erasing 16 pages of 1024 (0x400) bytes/ _  w( e7 e$ J1 P& S
  10. 2021-08-27T00:28:36 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
    2 G0 X/ `* ^" k; L
  11. 2021-08-27T00:28:36 INFO flash_loader.c: Successfully loaded flash loader in sram
    ' n/ o8 |; u( l2 p% M4 c
  12. 16/16 pages written0 ^3 X" R7 t! H5 e( ?
  13. 2021-08-27T00:28:37 INFO common.c: Starting verification of write complete
    2 I: X# m6 A( V4 ]! R1 _
  14. 2021-08-27T00:28:37 INFO common.c: Flash written and verified! jolly good!
    3 X: F- W9 z( y7 d+ t
  15. whs@whs-hp:~/STM32CubeIDE/workspace_1.6.1/Cube_fl03_led/Debug$
复制代码
; R; M0 _, e9 G8 O, R3 Z
当烧录文件为hex格式时,由于hex文件里边包含地址信息,因此不需要再指定地址了,但是需要指明烧录的格式。
8 h& l- B8 f( S
& s( Q2 p5 |7 u6 ?9 ^7 b: r: s1 B
  1. whs@whs-hp:/media/whs/HP_D/STM32/F103/trunk/FSMLED/Project$ st-flash --format ihex write output\(mdk\).hex
复制代码

" ^% A8 ?6 E7 Q7 F3.2.3 使用GUI界面进行烧录. C$ T* @$ @' U" v: o+ R/ w
安装STLINK-GUI后,可以使用GUI程序进行下载,GUI的显示界面如下( ?, c! W. z$ u# t& d4 P  Z( q; s+ z5 ^
& O$ Y. @- S, y
{5C05PZ32H_H0V{ZUVOD2.png
& k' W' A* ^! _4 ?( Z
6 g$ a0 }0 p+ `7 \' S3.2.4 更多详细信息
' W, [6 Z" ]7 N1 V  q- |命令行模式仅支持V1和V2版本的仿真器,并不支持V3版本的仿真器。
% V2 j+ |4 k  t' ~更多详细信息,可以参见GitHub的官方资料& G, |3 M  Z$ d- C2 L( R
. N; ~* J+ X. S7 I
4 STM32CubeProgrammer
7 `5 }9 i$ I7 ^, x9 _4.1 使用STLINK进行下载
; c! U" ]. T7 \0 z
STM32CubeProgrammer软件是ST新推出的烧录软件,支持更多的方式设置,官方定位是替代ST-LINK Utility。打开如下图所示,支持STLINK、USB、UART以及OTA(均需要对应的烧录工具)下载,支持SWD和JTAG。但是需要说明的是,这个软件烧录时,需要STLINK固件为最新。使用正点原子Nano开发板时,会提示软件非最新,不能进行连接。  }. R5 X0 s7 U$ J# E, N) b
RT6N@R`}6LGY(Q7)EO]6J(J.png
: H2 v% Q& _8 w% ]: r' o7 V% p% b2 i' b9 W, W* D6 X+ w5 l
弹出的固件需要升级的错误
' w( Z$ S. j& c" @0 E4 c* V, G, y6 z( t! r
AWMD}{I[6XFXKJZ2L{1[9VA.png # C- ]0 n3 s% n; ?+ Z- }- u1 f" M

! q1 `$ ^' p2 L  W9 d" {如果买的是官方出品的STLINK,可以正常对固件进行升级,如果不是官方的烧录器,升级前请三思,升级后有可能导致烧录器不能正常使用。下图为点击firmware update后出现的弹框。
/ ~, I, v* I/ `3 T  i0 z7 I1 [: t4 G! o3 B* |
UCE)]X[W[E0J8K$%M$A(A)4.png
( F$ k5 B( U. M& m6 C7 Z' L6 O* E5 J- J. x) ^
使用正点原子Nano开发板也无需担心会升级导致不能用,因为你尝试升级时会弹出另外一个提示,需要额外的9856B空间,不能进行升级,原因是我们板载的STLINK芯片采用的STM32F103C8T6只有64K空间,这部分空间已经全部用完,不能再写入更新更大的固件。
- v) n1 F8 |( K4 D4 J0 l3 a
. b+ B7 Y7 q! t# g# b 20200329081903693.png
/ U! _. N. h4 Z$ ?7 ~  p" N3 N9 B' S' D# `9 H1 V8 h5 C
另外这个软件也集成在STM32CUBEIDE软件中,STM32CUBEIDE为ST将eclipse、STM32CUBEMX和STM32CUBEPROGRAMMER集成整合到一起的综合编程软件,目前用的人还很少,挺好用,而且免费,跨平台。连接成功的示意图如下,默认会把芯片内部的程序读出来,可以对此程序进行另存为等操作。% o5 h# D4 g' p5 V3 _

4 x( }$ {9 i7 q ~BHKHPJ55K843QTLM0DB(1O.png
% ]: w3 [# X: I+ v, Y0 j" G  D- l9 w( M
使用此烧录工具,烧录时还可以对芯片进行读写保护,避免芯片被恶意读出盗窃烧录底层。
7 B8 q9 L) L2 b9 _1 T9 D4 |& l9 P# @" h( j) `1 N
MHG]EQYKGQYWHOJC9~8$}MV.png
7 ]0 K! ?' r9 e/ g* k+ j- u/ X' G+ M9 _% v. U
在ubuntu中此软件和windows下是相同的。4 S- E$ W- q: k6 ?) o
4 A' O; D5 x$ `) |. }/ i$ n1 k
4.2 使用串口进行下载
% z7 h: v$ `. R( ?$ W; Z我们在此软件中,可以使用串口进行连接烧录,这样做的好处是不需要使用第三方串口烧录工具,另外cubeprogrammer也不会对STLINK的版本信息进行核验。
- s; V! U: \8 R4 b; s5 u" L9 }0 x$ H4 p. z# p) U9 u; Z
1.BOOT设置,将BOOT1跳到0(开发板已经默认拉到地),BOOT0跳到1(3.3V)。按一下RESET按键
2 E5 u/ N/ v* L" G' H" T% x+ K% Z, R6 o* F: f( }0 V
L$BB]N1IV1]Z0LDRWOERX7L.png & A, D& [% S, p9 U" ?9 g

5 m' s8 ~) t( z2,打开软件,选择Uart和正确的COM口,由于用的是串口,因此就和stlink无关了,用一个USB转串口线也可以进行下载。
1 L3 f  F9 ?- T
/ x/ e: I+ K3 }/ g: c6 K I4Z6K9P8%]{WO5V4RN%E{)0.png + J- Z6 N% ~3 @; O, F6 P/ o- V

% B3 m; E  e/ a. q3,连接成功后如下) K: x1 H( K- \# }1 r3 G
# n+ M/ y) W2 t8 D* L0 p, b
& p* g/ b" C  y& G( H% `
/ e; g: z2 R9 U/ P
4,选择要下载的文件下载,下图所示已经下载成功。8 v" @5 ^2 j# M2 {+ G) Z) ]

5 s# V/ n# c) N# b% m2 Q W6U8POFZ${{OW6TNZZTFPWA.png % F! i" s7 `- l0 K! P

2 s8 X8 D  r: m0 V! `3 ^. A5,将BOOT0跳线还原到BOOT0。若上图勾选了Run after programming,则无需按Reset即会运行新程序,若没有勾选,按一下Reset按键。
2 [. Z( n# H5 c- I8 g# g0 ]4 J0 ?- j7 ]4 _5 K! N4 J3 o
5 官方正版STLINK仿真器6 @$ n# w, d3 H7 t, q# B% C
5.1 STLINK V3 mini下载器

4 G3 E/ p6 L) I  _这里我推荐一款官方的正版仿真器,即STLINK V3 MINI,ST官方近两年推出,采用了STM32F723的芯片,比常见的STLINK V2拥有更多的功能,更快的速度。
9 A) U4 G5 Y6 Q5 ^; b4 x% P
. T. d+ b# \4 Z* L  h6 J0 _ 7~U(Z@RW%()X$FW7ML{AULL.png
6 F6 V' p: y0 }1 i- p! `% ^4 r; @# G# L6 w" K2 m( j! C
这个仿真器非常小,比通常的U盘还小一号,且排线为14P 1.27mm间距的排线。因此不支持常见的2.54杜邦线连接,需要额外的转接板进行转接。这里需要特别注意。此款仿真器支持一个虚拟的串口(13脚和14脚),支持SWD和JTAG烧录,端口定义如下:: R' r2 K, }  v/ j5 H1 f

. f0 M- h1 L8 O5 u 2([)Q497${KHGQ4ENZ_LI.png - m( i. D( ^9 D

7 w# q3 C$ ~5 U4 n* U3 z) v9 [1 Y/ x嘉立创白嫖自制的转接板,此板的J4插座还支持NUCLEO的SWD扩展口的转接,按键为RESET按键,可以下载完成后手动对烧录好的芯片进行复位。  Q2 }2 P( h# z' d* s1 Y
4 x1 I" A, k! I9 G) B6 B9 b& C
N9ROE)K(M(YVBJO0LL6WCNO.png 9 t  d% p' U2 v3 Z& c5 {0 i
! G. G  [# Z% `+ G
背面引出的串口,本想放在正面的,结果实物比封装大,翻车了,而且1.27的插件不是一般难焊,很容易连锡。, `/ E: g& f  c; H" Y( x
0 P  T2 g6 n% H: f2 I8 W% T
W$N1_2XS(ZA9481%GX5T0~2.png & ^4 I, x. \; d! O

- k' i* P" i# [, h4 oSTLINK V3版本的速度比V2的要快,缺点是不支持山寨芯片,接上后提示无法连接到目标,而STLINK V2是支持山寨STM32芯片的。目前V3系列暂时未发现网上有仿造的产品出售。这款性价比比较高,淘宝价格80元,推荐各位购买。
" m2 j3 m! B, r' q# R2 L; m8 u% s  F% ]% _8 O
5.2 集成在官方开发板上的STLINK
* M4 t- v$ Q0 `' p9 ~+ {- B+ c( \官方的开发板集成了STLINK,这个STLINK可以对外进行烧录。这块部分可以裁下来单独使用。当烧录外部设备时,需要将外部烧录跳线拔下来,然后将烧录口和目标板通过杜邦线进行连接。不同的开发板对应的STLINK版本不同,F103对应的是V2.1,F7开发板对应的是V3.0。8 U3 C2 M3 U( }. ]: S8 H
3 M7 _6 O& p+ \% F
2(RJRZHN0IQ5JXG7@02$UUQ.png ' z4 I3 m8 ~  f% ?
- z" R0 J) b7 T! Y1 M- s3 ^( M) p5 H
可以做一个6PIN转20PIN的转接板,转接到20pin上,成为一个标准的下载器。3 w' p2 s8 v, z& w
. B4 d5 x' I0 F% f
7[Y2Q`LXJ8JZ]V78CWPPWDF.png 2 a6 [; t, W; ]( W
0 x4 H( J7 z8 ]) u& x+ }, F
6 连接异常处理
+ H  z5 y3 n' k/ Y3 N9 N6.1 能连接但下载报错解决方案
, i7 g- y6 e$ y
使用杜邦线进行SWD连接时,如果是散线或者线缆过长,会出现KEIL能连接上,但是下载报错(flash错误或者M3错误)的故障。将线缆更换为排线或者降低线缆的长度可以解决这个问题。
& b: p' ?6 b# L( ?: d. H
7 B% s! C6 S9 {+ }9 ]2 m! O7 {9 s JNX01_AQL98_LFHHZ%PVKS2.png # b# t" S% T& d9 L

. ?' E* l' C8 z, o" N/ T  {" D6.2 特殊IO口使用导致烧录一次程序后SWD口不能用
8 P2 x! a; R, t  b& a& }+ e& W( ]* Q
JTAG或者SWD端口被占用,但是却没有进行正确的配置。
* c1 T: l0 c5 Q9 F2 I/ ?在开发STM32F407芯片时,调试18B20温度程序时发现一个问题,当下载完一次程序后,SW就失去连接: {0 y& Z! g9 k$ F9 _

; t4 y9 [% m4 w 8$F5M1ZZAF$]1A)FP`EA$$Q.png
* u$ S( d# }& F! T8 i" j5 q8 R; o! L; x; r% Z  |8 K  r" z
强制烧录时报错信息如下:No target connected( ^  u  K) T0 s7 k- r& f& _2 \9 g
( \# e# _6 {2 ?7 F3 K& k" `0 p
~L8$%~HS_8P]F6[7T]4XH}N.png
& Z2 n* E, l3 K0 J/ w
: l! M) P/ M1 S6 l0 p& s9 q5 j1 V6 b报错信息Error:Flash Download failed-Target DLL has been cancelled0 X3 y8 k+ ]( F
" F$ P/ D0 J  V  B! u" o4 S0 e
)[FIOIPWXU5VTF@@F@WG[IB.png
, i: B1 v% H" y' @
. j' _# H+ E: m" p使用utility连接也会报错,报错信息如下:Cannot connect to target
& J* u. m. F1 k
! ~/ Q1 a- z$ Q" z" X4 B S__H@6SJBAS44LY(2VI1B8I.png 6 {  ~, J3 h6 \% b/ X6 E1 X8 t
+ S/ k4 U8 n- X; b# U
按照提示,在烧录时按Reset按键,成功烧录了软件。使用一行行注释排除的方法,最后定位在DS18B20_Init初始化函数这。程序使用了PB15作为了18B20的输入,这个口也是JTAG的接口,在使用时,不能按照常规GPIO口进行配置。使用时,需要先禁止JTAG,然后使能SWD。如果弄成了最后一种模式就SW下载方式无效,需要按住Reset复位重新连接烧录了。2 N9 n; y5 R  F3 q* }& P

  [/ W; b1 d. c% h O({94CTAQBEDIHM~X@9PSA9.png + g7 n# z) C7 E$ h/ s' O! g
- F5 Y; \3 [8 k  t+ D
为了验证这个想法,在程序中将A15改为B15。更改初始化函数" t" @" O: J5 a7 M2 @1 t: b

  C: Z( f! P: y% Y
  1. u8 DS18B20_Init(void)  \8 z, r' B( H+ L- @6 s
  2. {
    8 V$ _4 g5 {- E0 \) f
  3.         GPIO_InitTypeDef  GPIO_InitStructure;% @. \- U$ P! _
  4. / M* ^! G- k- W+ Y) c
  5.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOA时钟,改为使能GPIOB时钟' U. x# H1 H7 U$ }  Y
  6. ; s, B% L$ L9 X! B9 i# k
  7.   //GPIOA15,改为了GPIOB15
    ' u% n9 L; v9 z3 d
  8.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
    + X5 ^3 M7 F, z5 n  v
  9.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
    0 ?' {# a) h2 c# x$ `* f7 r
  10.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出- C6 r9 n* }( n1 o. I
  11.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//50MHz/ ?2 o3 o5 i& r/ z* i
  12.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉5 r* l) @4 U7 Z( k+ a
  13.   GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
    % `9 N, N* L7 b& L8 k
  14.   DS18B20_Rst();
    1 B1 R. d/ w, k( F) k
  15.   return DS18B20_Check();
    4 N2 x8 x  {' N7 Y" t7 ~6 [+ A
  16. }
复制代码
/ E+ f/ |8 j8 j* n
更改头文件定义
6 q/ Z; h% D1 ~. L, Q4 [. y$ _: k' O7 @" x+ ]* Q2 _
  1. //IO方向设置
    2 c* \. c% y/ D- p4 O$ b0 p
  2. #define DS18B20_IO_IN()  {GPIOB->MODER&=0XCFFFFFFF;GPIOB->MODER|=0;}        //PA15输入模式,改为PB15  P4 ?) w  o/ c& Q5 U% v
  3. #define DS18B20_IO_OUT() {GPIOB->MODER&=0XCFFFFFFF;GPIOB->MODER|=0x40000000;}         //PA15输出模式,改为PB154 m3 _/ h+ l/ y6 i
  4. 9 l+ Y( t, P- u
  5. IO操作函数                                                                                           # }: {& ?6 {7 |1 T, S- }* p
  6. #define        DS18B20_DQ_OUT PBout(15) //数据端口        PA15,改为PB15
    9 C  p  @; ^# P
  7. #define        DS18B20_DQ_IN  PBin(15)  //数据端口        PA15,改为PB15
复制代码

, Q* w( w9 B* @* s: C( J6 v更改后,可以通过编译,下载后,KEIL也能扫描到设备。
1 u5 [( T. X; R* B# C( M7 G2 O; Z8 T6 a2 @
S1UEZ166@LHTB}ILYKEVM.png
1 Y; B1 l6 @. B7 g  h6 ~( ]. I/ `
8 E/ H" J$ T1 L& f! O! w# E6.3 能识别到芯片,但是下载时弹出报错对话框
8 q7 a& O' }  y5 D# ]5 S& O! t使用5.34版本的Keil,能识别到芯片,但是下载时报错 Command not supported  t, @4 r/ v: T9 z1 X% u

1 f0 P0 A$ {% k4 t7 D %GE64FILYMFH_0~0~M{ZC.png
2 [) x! O6 z/ X4 D
. g7 U+ C/ P& A点击确认下,报另外一个错误, F; s- E* g( b

. D- q0 C6 [# l+ X' V  `, [ F6O02EZEKQMO8]V`Z5IHW.png " }2 [5 I2 j+ C8 L  k

- O+ ~6 i% \0 U3 R$ g2 t' P. E( b原因是新版本软件对未能及时升级STLINK固件的烧录器进行了封杀。需要升级仿真器的固件。当然盗版仿真器不能升级固件,唯一的解决办法是将Keil进行降级处理,降低到5.27版本。下图是在keil升级固件的方法。用正版仿真器实验过,没有这个问题。
$ g) B: {/ q2 m1 ?$ ~2 A: V& V5 ?9 }7 z: |% Y1 G  }
S5RMZ2KZ[I2X1JDEQF6W{LV.png 8 P, _3 {: Y3 M
$ l  e, n. v& B9 d
7 stlink对芯片的部分Sector进行擦除
0 i* C% T6 D4 q  J. N  \: V: G在使用Bootloader+App的使用方式时,我们烧录App时,如果每次都对全片进行擦除,那么每次的Bootloard将会被我们擦除掉,导致程序需要下载两遍。我们可以选择对部分的Sector进行擦除,而不是全部。5 _# O' \! d6 w9 H! ]
案例:某个Bootloader对应开始地址为0x8000000,结束地址为0x80042B0( p8 |! _  V" l9 A/ G7 P
APP应用对应的首地址为0x8010000
: ^  g- V4 I# ?  {/ e9 i+ q4 `
$ c% }9 j, R) R6 _6 L4 {, x A29J_F6S0DC[H)9W~D~~D[I.png # s, h! y0 T; E+ F/ l- m

8 E; S/ i2 h( C( F$ e" `& U4 u$ M结束地址为0x8015BD0
6 A0 ?: O% l0 M- s
& B% n; d9 t2 c( t  a HY7}IO(){VQ`Y9P$((AEWQ2.png 2 R: s/ ?) I7 J5 S6 A

) ^1 S& I5 h# w: r' x& I2 b( U" ^3 j; l当我们不希望擦除Bootloader时,我们可以选择Sector擦除,擦除APP对应的地址段。8 O- P- i0 w: n. w

, S: H) j0 v7 A RR%`C%W40(@R%DNS%Y{XUYW.png 5 g1 }  g8 I! v1 n
4 N! N7 F; m7 k; h
此时程序回退到没有下载APP时的运行状态。可以继续下载新的APP应用程序。
1 ]' P1 s) e0 d6 u: c, p, |% ?6 ]" p+ S* v2 d

, ~9 v* Z  a5 s. l
( i9 i7 g' o$ i" C
3 S1 o0 ]/ N; i
VCUMM95E8@KA@{6CPM5Q~_P.png
L8HRH4124RD$~4PS}EYCL{N.png
收藏 评论0 发布时间:2022-5-6 09:55

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版