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

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

[复制链接]
STMCU小助手 发布时间:2022-5-6 09:55
1 概述
  B8 e0 Z3 n& i# J3 R+ |$ M1.1资源概述
* O* O6 }7 G' E" O1 x
开发板:正点原子STM32F103 Nano开发板
3 O9 K* D+ D5 w! ]7 uSTM32 ST-LINK Utility版本:V4.5.0.05 K, p  y! E. r7 l
STM32CubeProgrammer版本:V2.4.0* D, w; V, J. `- ]3 L* Q
MDK版本:V5.23! g: N! n" p3 c. f' t9 n/ Y6 B" I! ]
主控芯片型号:STM32F103RBT6
: J) t+ {: v& |# h% i) P& r# J2 V2 }" C7 W, @. U+ [7 d  s/ S1 N7 ]
QIJV`C3P1@WS[%F@UI6(HD7.png % a! ]2 h! k: r7 Z$ }
$ k7 J  |0 E& p% h% F* @
1.2 STM32串口烧录方式
- H0 R7 z' v/ G2 _9 c启动模式说明说明,我们选择系统存储器启动。8 d' ]7 a/ J& l; W5 X0 L
I}5HTZ[Q4)MAD7UZPPM4$I1.png ; N+ k% z8 K& x1 \0 m; s! z( ]
2 F' z! u' P8 m3 [
内嵌的自举程序存放在系统存储区,由ST在生产线上写入,用于通过可用的串行接口对闪存存储器进行重新编程: ● 对于小容量、中容量和大容量的产品而言,可以通过USART1接口启用自举程序。串口烧录的原理就是利用这个自举程序读取串口的数据,对内部Flash进行擦写,实现程序的烧录。
% h. s: G1 h; ~6 b; G, {使用串口进行烧录,上位机可采用FLYMCU,然后通过USB转串口线(或者板)给目标设备进行烧录。需要注意的是,如果是M3内核非互联网型的板子这里的串口必须是串口1,对应为GPIO9和GPIO10。如果是M4内核,可以是下述端口。$ S8 n' Y7 Z5 H, y* q; D6 H* R2 i2 d4 D& B
● USART1(PA9/PA10)8 Q. ?* ]  N% _# [
● USART3(PB10/11 和 PC10/11)7 L4 M8 n0 p6 v3 Y, {
● CAN2(PB5/13)& w5 j: f- c3 m" U; q( F0 y
● USB OTG FS(PA11/12) 从设备模式(DFU:器件固件升级)。6 v7 f2 n! O6 N1 B9 d: a
; l7 Z2 _1 O) S* J, O
20200412080748985.png
, W. \1 s- B5 ]! O7 e3 l/ M
. x4 g: _3 S3 [BOOT1设为0,BOOT0设为1,按复位键即可进入串口下载模式,打开FLYMCU软件,选择正确的串口,点击读器件信息,显示连接成功。$ Q/ _$ y) p" u

+ V. |# s: o  b: R6 { 5MG7C$HP4{~G8Q`)HKZ}T4N.png
) \3 V4 ^; ~: Z/ B2 N% ]- J: }6 b. C
" B3 X. B) t4 l! E4 D9 t1 _: r3 \打开所需要下载的HEX文件,这里由于电路上没有自动复位进BOOT区的电路(正点原子部分高级一点的板子有),我们选择不使用RTS和DTR。点击开始编程。直至下载成功。
1 Z+ E& ]0 X% o- M- V
4 R& i# W! m# D4 ?+ t* `' x" c* h* m 5HYGC7S3MIB7WS6K3TIRN$X.png & A5 t* o! s2 s5 |+ b

  U" }1 C/ R6 k! G' O) Z/ c下载完成后,将BOOT0跳线跳到0,按一下Reset键,程序即可正常运行。8 I: P* V. B( a% ~
使用这种串口方式烧录时,若选择STLINK进行烧录,将会报错。未检测到STLINK错误提示。需要使用另外的工具进行烧录。
, B6 `$ S1 a' o0 K4 {+ k" c: J
0 a  c2 F4 n& s2 X 1])I`NH(NCE`_T(C{DXA4Q6.png
+ T1 w6 |; b+ Y! J6 K6 s8 a
5 _) j& W4 M; c. k! Q$ d2.KEIL软件下载介绍' M0 }  G- A* q, v
可以使用KEIL内部集成的STLINK组件进行烧录,使用此种方式进行烧录时,将STLINK连接到电脑,在KEIL中可以检测到STLINK。
. K- a' s" p# ]2 A! u5 Q) j) P) e建立工程并编译通过后,可以实现内部集成的烧录工具实现对目标开发板(芯片)的烧录工作。  D' h: V  r* L) y4 b( L$ }! ?

% P/ f( p( x+ y )7H[7R35SEB_C{9LA})HC3I.png 4 h% |2 O+ O3 x: x; ]2 `/ H4 I
1 g+ p! V6 f2 G0 \/ h; R. |- \
缺点是显而易见的,当我们工程文件缺失,只有烧录目标程序.bin或者.hex文件时,我们就不能通过这种方式进行烧录操作。接下来我给大家介绍两个ST官方的烧录软件,可以在ST官方网站上下载到。分别是STM32 ST-LINK Utility和STM32CubeProgrammer。
0 L3 O4 q2 a- T! X
' @  o# C. c8 v UQI3T}M`NL0(N9G]{88~LWO.png ( L  n/ o# W' E+ x( o- N4 {
! F' R& ^  d' F8 r+ e2 e
3 STM32 ST-LINK Utility介绍

3 M8 S: W0 r' E7 |3.1 windows操作系统

6 \, N: Q/ Y$ s8 K7 t. k+ k1 k3 N上位机可采用ST官方的STLINK软件,然后通过STLINK模块给目标设备进行烧录。: P# }4 r/ D  m# x5 U8 ?
$ ]3 B- h1 y1 Q
2020041208091471.png
' d1 a7 ~" q! g! O
; ?3 C# F8 l1 e! {此软件需要使用STLINK仿真烧录器,支持.bin/.src/.hex/.src/.s19五种格式的烧录文件下载。烧录文件在MDK软件编译工程时会自动生成。正点原子的例程烧录文件位于OBJ文件夹中(.hex)。如果是使用STM32CUBEIDE生成的工程,编译后烧录文件位于Debug文件夹中(.bin)。
6 r+ K' C! f" s
6 ?5 C1 M. Q. d )90LXV1Y3S6L$O(Z46~HIFC.png 7 e! C- [1 {6 C& K. N/ I% F% v
- z+ a! e4 g( V8 k
这个软件支持开发板板载的STLINK V2.1进行烧录操作,不会提示需要固件升级等任何错误。具备烧录软件和芯片已烧软件比对灯功能。软件体积小巧,非常好用。4 K6 u& h. V& W, v+ [) k6 q5 H
3 S1 A! X* Q5 k" G, Y
3.2 Ubuntu操作系统中烧录
1 t, l  b! n5 @$ C5 H) B: E$ \$ P3.2.1 软件安装
. S1 B2 G) e4 H
软件直接使用命令行安装即可,UBUNTU的源自带此软件,无需在github上下载源码编译安装。  M% H8 _' Y1 J" u( }7 D
0 n& H9 r2 L  M/ W- P3 K( o
  1. //安装STLINK$ U8 }# [& k  y3 P& n+ f* S
  2. sudo apt install stlink-tools
    / o& S4 |1 T2 A) }3 v
  3. + n3 O' F( x& ~1 W6 `/ F# g  ?
  4. //查看STLINK的版本,确认是否安装成功,如果成功会返回版本号
    * f/ r! x8 G3 u* o4 c
  5. st-info --version
    9 S5 V: W/ L( ]- L3 r
  6. . r8 h( o' v# `; c, M3 C& X1 Z$ M
  7. //安装STLINK-GUI界面
    ) M1 V; o' i8 C$ z9 y3 q7 \
  8. sudo apt install stlink-gui4 D' R; ^, ?: W# R5 s

  9. 4 c# K7 F) z& m  ?  X, F. p: m) }; Q/ @
  10. //使用命令行进行下载5 v2 O2 g5 O  w' N
  11. sudo st-flash write test.bin 0x8000000
复制代码
7 o4 D8 _3 W! c  V, w% h
使用命令行进行软件的烧写工作,下载命令的格式,比如说可以使用st-flash erase对芯片进行擦除
0 ]: {9 S  y) L# A# ^* A9 R' T
% W4 f: W6 b; w
  1. whs@whs-hp:~/Downloads$ st-flash
    & U8 \5 I+ Q! P$ `5 y+ |3 t
  2. invalid command line
    0 i* w# d. Q" I0 A
  3. stlinkv1 command line: ./st-flash [--debug] [--reset] [--format <format>] [--flash=<fsize>] {read|write} /dev/sgX <path> <addr> <size>/ d. c8 v3 v2 ?9 t" D6 ]; P
  4. stlinkv1 command line: ./st-flash [--debug] /dev/sgX erase* H/ x& E2 i& r/ C" f5 V7 _. N
  5. stlinkv2 command line: ./st-flash [--debug] [--reset] [--serial <serial>] [--format <format>] [--flash=<fsize>] {read|write} <path> <addr> <size>
    2 H5 B2 _7 {# H) N, Y8 }$ U
  6. stlinkv2 command line: ./st-flash [--debug] [--serial <serial>] erase
    5 [; |/ O6 c* G5 N) U
  7. stlinkv2 command line: ./st-flash [--debug] [--serial <serial>] reset
    1 Y/ z- \: Y4 k: D! v8 f8 P
  8.                        Use hex format for addr, <serial> and <size>.
    . I" }* T7 E" V9 e0 q  x
  9.                        fsize: Use decimal, octal or hex by prefix 0xXXX for hex, optionally followed by k=KB, or m=MB (eg. --flash=128k)6 [# P; o7 q( E7 A& w% g
  10.                        Format may be 'binary' (default) or 'ihex', although <addr> must be specified for binary format only.
    ; E) F8 p  y9 n, j7 g' o: o/ i( p
  11.                        ./st-flash [--version]
    ' u) k, |# _& o
  12. example write option byte: ./st-flash --debug --reset --area=option write 0xXXXXXXXX
    + p( q) p% ~. B7 h6 v9 M/ K
  13. example read option byte: ./st-flash --debug --reset --area=option read > option_byte
复制代码
2 a) ~% ]; L% d5 c9 c
3.2.2 软件烧录
: Q' s2 j4 k8 ^- }2 X1 C软件下载示例,烧录文件为bin格式,需要带地址信息,sudo为非必须的,这里使用的版本是1.6.0
+ \: m2 `% f9 B7 B& B2 }2 f1 n- A/ b
! H' L3 {4 T+ a
  1. whs@whs-hp:~/STM32CubeIDE/workspace_1.6.1/Cube_fl03_led/Debug$ sudo st-flash write Cube_fl03_led.bin 0x8000000
    ) P4 ]: j$ Z) g+ F
  2. [sudo] whs 的密码:
    + N# I: ~! Y. G8 \+ Z
  3. st-flash 1.6.0
    9 u. I& @0 T+ [
  4. 2021-08-27T00:28:36 INFO common.c: Loading device parameters....
    : D8 v2 b3 o" C% \9 A; A
  5. 2021-08-27T00:28:36 INFO common.c: Device connected is: F1 Medium-density device, id 0x20036410$ E7 Z. C3 w$ G' E1 `
  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: B# [! _8 @$ }0 D( x
  7. 2021-08-27T00:28:36 INFO common.c: Attempting to write 15400 (0x3c28) bytes to stm32 address: 134217728 (0x8000000)7 c2 k3 G) u" l, ~! s) l" c  n4 J
  8. Flash page at addr: 0x08003c00 erased' A$ I8 C/ d/ Q) r
  9. 2021-08-27T00:28:36 INFO common.c: Finished erasing 16 pages of 1024 (0x400) bytes
    / y+ w' K5 {) F$ x
  10. 2021-08-27T00:28:36 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
    4 e3 ^, J' n$ B+ I1 W  B# S
  11. 2021-08-27T00:28:36 INFO flash_loader.c: Successfully loaded flash loader in sram
    ' s& p6 u! F' k9 g* E
  12. 16/16 pages written
    $ |* Q0 A* Y- v
  13. 2021-08-27T00:28:37 INFO common.c: Starting verification of write complete
    ' q: P  C7 ~: C% p. g5 q% w+ ^
  14. 2021-08-27T00:28:37 INFO common.c: Flash written and verified! jolly good!
    % y0 S2 S3 Y0 o: a
  15. whs@whs-hp:~/STM32CubeIDE/workspace_1.6.1/Cube_fl03_led/Debug$
复制代码

: w* n$ o0 y  a当烧录文件为hex格式时,由于hex文件里边包含地址信息,因此不需要再指定地址了,但是需要指明烧录的格式。
! [5 N6 F5 d) q5 J
7 B% U1 C9 F; d% X9 m" Y# c  Z
  1. whs@whs-hp:/media/whs/HP_D/STM32/F103/trunk/FSMLED/Project$ st-flash --format ihex write output\(mdk\).hex
复制代码

4 s9 b0 f, i- i2 i$ s; |3.2.3 使用GUI界面进行烧录1 \" j5 X5 Z' E, E" R
安装STLINK-GUI后,可以使用GUI程序进行下载,GUI的显示界面如下
' [* t1 Y- i) R; ~6 x4 [& T! q* b( d) g5 R/ d, E7 O
{5C05PZ32H_H0V{ZUVOD2.png ( s- X6 J  \& J

- {* Q. u, p6 v. s3.2.4 更多详细信息% b( M0 h6 c  W
命令行模式仅支持V1和V2版本的仿真器,并不支持V3版本的仿真器。" ]4 [( k+ N6 \6 m: `
更多详细信息,可以参见GitHub的官方资料
* \1 [9 e$ U8 t* i/ L& I; s8 J: z: q) O- P2 A/ E
4 STM32CubeProgrammer
+ c" z8 d6 Z% U; |4.1 使用STLINK进行下载
/ s, [, S5 i: G# H  f* w$ @7 G8 h+ K
STM32CubeProgrammer软件是ST新推出的烧录软件,支持更多的方式设置,官方定位是替代ST-LINK Utility。打开如下图所示,支持STLINK、USB、UART以及OTA(均需要对应的烧录工具)下载,支持SWD和JTAG。但是需要说明的是,这个软件烧录时,需要STLINK固件为最新。使用正点原子Nano开发板时,会提示软件非最新,不能进行连接。3 s+ X3 Q, E& Q$ E' N
RT6N@R`}6LGY(Q7)EO]6J(J.png ) D9 Z  z3 z( L. e5 w
. ?& V) d1 Q  W! R* A
弹出的固件需要升级的错误
9 M$ q& r9 K4 i1 C  {) \( E1 x- ~: C0 ]) Q9 c+ a% y
AWMD}{I[6XFXKJZ2L{1[9VA.png ! H/ g0 Q' l( ]

! y9 w( d; t8 }2 p- G* w) V如果买的是官方出品的STLINK,可以正常对固件进行升级,如果不是官方的烧录器,升级前请三思,升级后有可能导致烧录器不能正常使用。下图为点击firmware update后出现的弹框。0 ^% C/ F! j% Z
: ^& e' s% x& H: W  T4 J- r, f7 G
UCE)]X[W[E0J8K$%M$A(A)4.png
4 |3 i% F; I3 @4 s0 R; x& P: i* s; i# ?4 X7 T& u) E& d
使用正点原子Nano开发板也无需担心会升级导致不能用,因为你尝试升级时会弹出另外一个提示,需要额外的9856B空间,不能进行升级,原因是我们板载的STLINK芯片采用的STM32F103C8T6只有64K空间,这部分空间已经全部用完,不能再写入更新更大的固件。# Q+ [0 q* S# Z* [
  S- k$ |* ^! \# k5 z
20200329081903693.png " U# W0 I  l5 |/ j# n9 m

7 {! ?( t* H% O: ]4 u0 v另外这个软件也集成在STM32CUBEIDE软件中,STM32CUBEIDE为ST将eclipse、STM32CUBEMX和STM32CUBEPROGRAMMER集成整合到一起的综合编程软件,目前用的人还很少,挺好用,而且免费,跨平台。连接成功的示意图如下,默认会把芯片内部的程序读出来,可以对此程序进行另存为等操作。* b2 ^2 k5 u& }& Z6 r$ j/ a5 ]: k3 c9 \
1 {* I4 p1 ~( E. B
~BHKHPJ55K843QTLM0DB(1O.png
. O3 \* N3 t  E# t9 [$ V
# }) ?: y9 F2 o$ J' K使用此烧录工具,烧录时还可以对芯片进行读写保护,避免芯片被恶意读出盗窃烧录底层。6 p3 G1 O1 G6 A* @+ I4 b8 @' j6 l
9 g1 ?& {. @: Q" g, O8 I# Q
MHG]EQYKGQYWHOJC9~8$}MV.png " k* R0 T& _% B% i7 \/ i% W2 q( ?- [

( G6 ^' E) x: q0 x) ?( f在ubuntu中此软件和windows下是相同的。
* U- D3 R* E# l2 X" w* t0 l: N) G! P8 c! l& c6 ]& F4 p$ V: @
4.2 使用串口进行下载& L, v- j* v* r; R3 z* `
我们在此软件中,可以使用串口进行连接烧录,这样做的好处是不需要使用第三方串口烧录工具,另外cubeprogrammer也不会对STLINK的版本信息进行核验。
, m6 W+ Z2 A$ i6 c/ e1 o
2 g# }8 H" X  x/ Y$ d( l. g1.BOOT设置,将BOOT1跳到0(开发板已经默认拉到地),BOOT0跳到1(3.3V)。按一下RESET按键$ y, Q" \" e: J) X+ l

. F* ~: L6 J3 Y7 |' s! J L$BB]N1IV1]Z0LDRWOERX7L.png
) O6 g% o; S( i! l. V( R; O
! X+ L+ A4 v* ~# S; K6 G2,打开软件,选择Uart和正确的COM口,由于用的是串口,因此就和stlink无关了,用一个USB转串口线也可以进行下载。7 m3 b- X4 T  x! s' ]
! p& z6 @' `; h( \
I4Z6K9P8%]{WO5V4RN%E{)0.png # p: f3 D$ x) y. `. z; n" C
: S% @4 L. k. z. f+ T$ Z# b
3,连接成功后如下" X6 C/ p* [# ]. S3 e" X
# a: @' F, ?' h- Y0 l; _
1 Z) k* ]7 @- _  l' g
) z/ B$ M6 X: O' K) }9 z
4,选择要下载的文件下载,下图所示已经下载成功。" V4 P. ^* E5 C! }2 L) B  A
4 P* S8 L8 u' X9 ]8 z$ M
W6U8POFZ${{OW6TNZZTFPWA.png . p$ H) w5 t  a( S) K% Y

, `+ o( d( E( M. p6 n# Q7 a6 S5,将BOOT0跳线还原到BOOT0。若上图勾选了Run after programming,则无需按Reset即会运行新程序,若没有勾选,按一下Reset按键。. W+ t  G' g/ ~2 E' G

. I5 [& T$ B) m' S9 @# `5 官方正版STLINK仿真器3 h6 b4 b. g9 p0 M  f
5.1 STLINK V3 mini下载器

3 G# u, e: O+ d- k: v" y5 x1 \这里我推荐一款官方的正版仿真器,即STLINK V3 MINI,ST官方近两年推出,采用了STM32F723的芯片,比常见的STLINK V2拥有更多的功能,更快的速度。7 h# x# `( s* }- S' j
2 i+ T' z: v! o" Y" R; A' ?  O; K
7~U(Z@RW%()X$FW7ML{AULL.png
% g4 H" R4 ^' @( ?3 L+ b4 q* Q) z
% R7 ?7 i6 T1 s这个仿真器非常小,比通常的U盘还小一号,且排线为14P 1.27mm间距的排线。因此不支持常见的2.54杜邦线连接,需要额外的转接板进行转接。这里需要特别注意。此款仿真器支持一个虚拟的串口(13脚和14脚),支持SWD和JTAG烧录,端口定义如下:
( I4 m4 }2 y/ }. D+ y6 {
5 M, {* B/ y' ^$ V7 J 2([)Q497${KHGQ4ENZ_LI.png
5 c* ?- B  n+ C* I% k2 K8 S
3 }; F5 Q8 u: c4 t嘉立创白嫖自制的转接板,此板的J4插座还支持NUCLEO的SWD扩展口的转接,按键为RESET按键,可以下载完成后手动对烧录好的芯片进行复位。
7 C, k8 N2 ]8 Y$ W/ x- g$ {2 z9 n
0 \4 w# Q. t* |' _! [% W N9ROE)K(M(YVBJO0LL6WCNO.png 6 q  [* J. W2 W
" o3 u0 m3 m+ z$ e$ p9 i3 [
背面引出的串口,本想放在正面的,结果实物比封装大,翻车了,而且1.27的插件不是一般难焊,很容易连锡。
/ ]% ]8 X: V+ o" [& Y
/ \6 x0 n2 {# E) u W$N1_2XS(ZA9481%GX5T0~2.png
7 i7 d8 H/ t  J( Q7 |' z( B+ Q. z' y: T& o- A
STLINK V3版本的速度比V2的要快,缺点是不支持山寨芯片,接上后提示无法连接到目标,而STLINK V2是支持山寨STM32芯片的。目前V3系列暂时未发现网上有仿造的产品出售。这款性价比比较高,淘宝价格80元,推荐各位购买。
1 I* ?' b/ S  c  ]1 H! c9 R$ F  p1 l: L2 o1 S
5.2 集成在官方开发板上的STLINK; v1 h, m5 c) u9 h
官方的开发板集成了STLINK,这个STLINK可以对外进行烧录。这块部分可以裁下来单独使用。当烧录外部设备时,需要将外部烧录跳线拔下来,然后将烧录口和目标板通过杜邦线进行连接。不同的开发板对应的STLINK版本不同,F103对应的是V2.1,F7开发板对应的是V3.0。7 v4 u8 x4 |* u' U$ \/ B* m% d

: w3 n8 ?6 G& R6 ?* b 2(RJRZHN0IQ5JXG7@02$UUQ.png
. e0 H, `, L( q1 l( y
) B9 U9 V+ e, I6 v- M/ K+ l可以做一个6PIN转20PIN的转接板,转接到20pin上,成为一个标准的下载器。
, Q/ o; B; V  k, U, O4 @6 }& j
2 t3 H& K' A4 Y' ~2 Z 7[Y2Q`LXJ8JZ]V78CWPPWDF.png
) v" u# O6 @2 S  E4 z7 @: T6 _
% w5 E+ f) h$ }3 X( v# c6 B2 S6 连接异常处理/ ^$ F( j$ S/ q
6.1 能连接但下载报错解决方案
' |5 C, ~0 G, @* z6 O/ \# f
使用杜邦线进行SWD连接时,如果是散线或者线缆过长,会出现KEIL能连接上,但是下载报错(flash错误或者M3错误)的故障。将线缆更换为排线或者降低线缆的长度可以解决这个问题。$ t1 h# ?7 V; Z# ?2 n; f6 J
- E2 d( u# s7 N- _4 ?' r
JNX01_AQL98_LFHHZ%PVKS2.png $ E7 r# i# e  v
$ w/ k# M* _9 j% A, ^
6.2 特殊IO口使用导致烧录一次程序后SWD口不能用

' D3 m, a  t% v5 K1 o3 _0 yJTAG或者SWD端口被占用,但是却没有进行正确的配置。
4 A) t0 b( @8 T1 W# Z在开发STM32F407芯片时,调试18B20温度程序时发现一个问题,当下载完一次程序后,SW就失去连接5 ?5 L% Y2 ]- z
( ]1 B1 q% ~. ?* U: ]% a
8$F5M1ZZAF$]1A)FP`EA$$Q.png
: u- w1 Z9 w" H! {8 e/ C3 L" u6 S# u( W0 o( Z2 s
强制烧录时报错信息如下:No target connected! A) k/ n. h# h/ A- i3 h
8 @( b" D" Y  ^
~L8$%~HS_8P]F6[7T]4XH}N.png
8 ^9 [1 _* ]. C" ^
, K9 D/ ?, x7 {$ H报错信息Error:Flash Download failed-Target DLL has been cancelled) [# `0 R- C: U4 P8 h4 h
; v8 T& R" a% k7 K
)[FIOIPWXU5VTF@@F@WG[IB.png
! m3 i6 S" A9 t5 a$ C4 {+ R
/ l8 c9 }" ^7 S) ]/ ^使用utility连接也会报错,报错信息如下:Cannot connect to target
1 E4 m" U) M/ r8 f( j  ^& Z" k  D& o+ U! R, o. [* B* O
S__H@6SJBAS44LY(2VI1B8I.png " _. k" U8 E0 y5 r! l
/ l; D  h6 Z7 f' \) A
按照提示,在烧录时按Reset按键,成功烧录了软件。使用一行行注释排除的方法,最后定位在DS18B20_Init初始化函数这。程序使用了PB15作为了18B20的输入,这个口也是JTAG的接口,在使用时,不能按照常规GPIO口进行配置。使用时,需要先禁止JTAG,然后使能SWD。如果弄成了最后一种模式就SW下载方式无效,需要按住Reset复位重新连接烧录了。) Q4 C. V, I& O# P, S( L! Q
* }6 P: ^& R; a& A( z6 z0 ]
O({94CTAQBEDIHM~X@9PSA9.png
/ F" Y6 B9 S$ F; v8 p2 d4 b+ K6 q, Z
为了验证这个想法,在程序中将A15改为B15。更改初始化函数4 `- H8 M8 _( A2 c# Y8 b1 Z
- [' k2 `9 K3 ^) R+ h7 ?. F
  1. u8 DS18B20_Init(void): i/ ~8 q4 A) W7 q8 z! q& N
  2. {
    # l7 O/ l" k# C! K# @' C
  3.         GPIO_InitTypeDef  GPIO_InitStructure;) A8 L& {: x6 X

  4.   N# A$ e; B  a" K5 W- n! D9 N
  5.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOA时钟,改为使能GPIOB时钟, s. C- ^% ~: N4 e

  6. 8 G$ M; {8 j( P
  7.   //GPIOA15,改为了GPIOB15
    * c+ }; [" T4 R1 I3 @, v5 @
  8.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;7 a, A: g) p( d% @: E
  9.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
    0 B4 D+ p& t+ c' N; X
  10.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出5 a) p1 A4 z3 F0 g! n
  11.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//50MHz
    7 s( X, t" F; S2 Q
  12.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉, v8 M7 O1 U1 m8 g- ]8 [) t
  13.   GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
    / y( U; m; {7 o1 G, B
  14.   DS18B20_Rst();, x6 a! @+ |0 ]( t' {6 N! v
  15.   return DS18B20_Check();
    + D- P) \1 W* T! {- c& N# _
  16. }
复制代码
, a; U2 i4 o# F
更改头文件定义
' r, Z; y  V2 }$ w2 E- ~
3 m" |% A# ^& }3 C. F3 a
  1. //IO方向设置
    & p0 A! p4 z8 N* t$ j: u4 U* v  O, R4 |" V
  2. #define DS18B20_IO_IN()  {GPIOB->MODER&=0XCFFFFFFF;GPIOB->MODER|=0;}        //PA15输入模式,改为PB15
    ) P9 W+ X4 S0 c( W" o
  3. #define DS18B20_IO_OUT() {GPIOB->MODER&=0XCFFFFFFF;GPIOB->MODER|=0x40000000;}         //PA15输出模式,改为PB15
    1 v% {6 O& {3 z( M

  4. 6 E4 }6 w6 i! D$ |# ^$ x
  5. IO操作函数                                                                                           ! S3 a: B/ H) k( o, Z
  6. #define        DS18B20_DQ_OUT PBout(15) //数据端口        PA15,改为PB15
    / T) t( I2 D: u0 E- d
  7. #define        DS18B20_DQ_IN  PBin(15)  //数据端口        PA15,改为PB15
复制代码
3 x3 y3 A/ l* D, [$ S5 I
更改后,可以通过编译,下载后,KEIL也能扫描到设备。
, `& o- e9 s, u# J, C+ N; N' D- L! t; \9 Z- Z  |$ z
S1UEZ166@LHTB}ILYKEVM.png . D6 Y; _! @$ }; g9 L9 w

8 d# H( b- D! U& t8 P6.3 能识别到芯片,但是下载时弹出报错对话框! X6 D7 k* e7 `7 v/ ]' O. K
使用5.34版本的Keil,能识别到芯片,但是下载时报错 Command not supported
2 l# n8 v, i' ?8 `. F1 U* s8 j0 Z" }6 E& z  |
%GE64FILYMFH_0~0~M{ZC.png ; Y# b+ G# V. _4 @( r) s, p

; A% E8 f" d  K) c; U点击确认下,报另外一个错误
5 X5 X" q" D  }; c5 }, F
, F) P: @6 l7 V5 Y9 A: L! K F6O02EZEKQMO8]V`Z5IHW.png . o3 [3 Z6 s; P, L& H( X6 D9 J

( d: g! d0 n: T$ {  W: j+ `7 @原因是新版本软件对未能及时升级STLINK固件的烧录器进行了封杀。需要升级仿真器的固件。当然盗版仿真器不能升级固件,唯一的解决办法是将Keil进行降级处理,降低到5.27版本。下图是在keil升级固件的方法。用正版仿真器实验过,没有这个问题。: ?$ Q5 k/ q1 z4 b# n1 r1 m+ z2 d
: G( O. |- m+ W! o+ f  A% a0 t
S5RMZ2KZ[I2X1JDEQF6W{LV.png & V; R& s5 M" |3 E6 m& p+ X
* D$ g6 K) V4 ?0 d2 s, v: l
7 stlink对芯片的部分Sector进行擦除& P4 O5 D% i' x8 _5 @
在使用Bootloader+App的使用方式时,我们烧录App时,如果每次都对全片进行擦除,那么每次的Bootloard将会被我们擦除掉,导致程序需要下载两遍。我们可以选择对部分的Sector进行擦除,而不是全部。
5 w7 ^6 E2 f# W% @. o案例:某个Bootloader对应开始地址为0x8000000,结束地址为0x80042B0
2 U4 f8 _' _& M0 {& kAPP应用对应的首地址为0x8010000
" V3 n  l. [- x* L# e$ l6 y# Q9 P4 s8 H4 L3 y
A29J_F6S0DC[H)9W~D~~D[I.png 0 Y, b: v1 C2 Q& p6 X: c( _6 Y

. h1 Q4 M6 O8 M7 O结束地址为0x8015BD0
+ \3 b6 V2 u* g" R: E4 T# |1 d' G" {3 g3 h( T, ]( \
HY7}IO(){VQ`Y9P$((AEWQ2.png
; v: C" @. F- D/ \6 q2 ^7 j
5 l3 f, r5 M5 C6 ~+ u0 |当我们不希望擦除Bootloader时,我们可以选择Sector擦除,擦除APP对应的地址段。
' e" l7 P: u( |% b& G7 e$ e6 U7 G  c5 d+ }
RR%`C%W40(@R%DNS%Y{XUYW.png 0 c2 J1 O3 t( ?/ R- y6 H+ J
9 F1 O- C- ?" {- L4 y8 w- Y1 n
此时程序回退到没有下载APP时的运行状态。可以继续下载新的APP应用程序。4 u" T) V# X( A' l# T

& |- `% M' v' n0 ~4 G5 _
# c/ w+ `" l: W- v% J6 z; v9 k" Z) [/ D& K$ P8 C7 x# o
& `; C' d# p0 O$ k( h8 h
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 手机版