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

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

[复制链接]
STMCU小助手 发布时间:2022-5-6 09:55
1 概述+ Z( L; \6 d  ^+ h4 ~
1.1资源概述

* ?3 o+ S9 p/ N: ]: X: g& H开发板:正点原子STM32F103 Nano开发板9 X8 v( i1 p' g9 W+ [( u
STM32 ST-LINK Utility版本:V4.5.0.06 }% |3 p; p0 o$ p! t
STM32CubeProgrammer版本:V2.4.09 [" n$ m* u' z$ O# [$ |
MDK版本:V5.230 ^7 P' H6 C( m8 i1 y# K+ e
主控芯片型号:STM32F103RBT64 m" V, r* v6 x& b$ v; k; Q  h
+ C5 ]5 |' r! R8 C" e+ f: @0 f% P
QIJV`C3P1@WS[%F@UI6(HD7.png
8 n- d( ]( b6 c$ h" u% u- G0 V- p+ w& Y$ B* k+ p, [# N. F
1.2 STM32串口烧录方式
, L; B- A7 t- k8 b+ _4 A启动模式说明说明,我们选择系统存储器启动。
- r; C: q* ]! k3 Y I}5HTZ[Q4)MAD7UZPPM4$I1.png
6 Z/ ~, o( ]7 y+ p; W7 F3 h9 h0 ~, D; y# D6 b; Y9 u: F" T, X
内嵌的自举程序存放在系统存储区,由ST在生产线上写入,用于通过可用的串行接口对闪存存储器进行重新编程: ● 对于小容量、中容量和大容量的产品而言,可以通过USART1接口启用自举程序。串口烧录的原理就是利用这个自举程序读取串口的数据,对内部Flash进行擦写,实现程序的烧录。/ Y/ g( ^; T6 x, q0 G; P* S
使用串口进行烧录,上位机可采用FLYMCU,然后通过USB转串口线(或者板)给目标设备进行烧录。需要注意的是,如果是M3内核非互联网型的板子这里的串口必须是串口1,对应为GPIO9和GPIO10。如果是M4内核,可以是下述端口。1 b; I  o9 t( j8 g/ Y- o
● USART1(PA9/PA10)+ u' k9 \! Y: J9 @5 p
● USART3(PB10/11 和 PC10/11)
+ D' @2 ?0 ~2 B1 a9 l0 l● CAN2(PB5/13)
; q" i9 U4 {9 a' o. E3 A2 u● USB OTG FS(PA11/12) 从设备模式(DFU:器件固件升级)。
& J7 L$ N/ u; M- w* b. w. r9 C. F7 `# R
20200412080748985.png
  [( {: j6 P  n
  f! N/ D  }% uBOOT1设为0,BOOT0设为1,按复位键即可进入串口下载模式,打开FLYMCU软件,选择正确的串口,点击读器件信息,显示连接成功。) k' }+ Q) i5 ^1 [  [# c

( x3 a6 w+ f: i* ^' D, _1 Q 5MG7C$HP4{~G8Q`)HKZ}T4N.png
9 f$ b& W' Y& i, M: H1 H2 u
1 F$ X( S* {" d8 Z打开所需要下载的HEX文件,这里由于电路上没有自动复位进BOOT区的电路(正点原子部分高级一点的板子有),我们选择不使用RTS和DTR。点击开始编程。直至下载成功。9 }5 z2 r+ \- O2 m% F% A% p3 B: s
  [! i& M1 ~+ m
5HYGC7S3MIB7WS6K3TIRN$X.png & L/ P' A. V+ S
" E; T8 ?0 i; h$ l- k
下载完成后,将BOOT0跳线跳到0,按一下Reset键,程序即可正常运行。
$ ?* |5 y9 K* h/ M& }9 z使用这种串口方式烧录时,若选择STLINK进行烧录,将会报错。未检测到STLINK错误提示。需要使用另外的工具进行烧录。
6 P7 F4 O# q+ c7 G. {1 n/ E/ v3 m% H1 H0 ~1 S5 R5 H  O
1])I`NH(NCE`_T(C{DXA4Q6.png
% B: H" i# n4 o6 i1 i& I! ^0 _7 A  o6 q
2.KEIL软件下载介绍
2 Q+ {& l# B  b3 H+ q4 `; I( [可以使用KEIL内部集成的STLINK组件进行烧录,使用此种方式进行烧录时,将STLINK连接到电脑,在KEIL中可以检测到STLINK。
! O, o  Q2 R7 l8 x建立工程并编译通过后,可以实现内部集成的烧录工具实现对目标开发板(芯片)的烧录工作。
' \3 {& k$ A5 D' s( U3 V8 @) O2 ]( p& \- W5 N5 ~) W/ b- P" K! ~
)7H[7R35SEB_C{9LA})HC3I.png + f2 o3 t1 w2 I, m/ W2 I& ^9 a
; {+ n; g) H6 d2 r* S) X, F& N6 g
缺点是显而易见的,当我们工程文件缺失,只有烧录目标程序.bin或者.hex文件时,我们就不能通过这种方式进行烧录操作。接下来我给大家介绍两个ST官方的烧录软件,可以在ST官方网站上下载到。分别是STM32 ST-LINK Utility和STM32CubeProgrammer。1 a2 s+ C, d7 s# h8 ~  Q' W& E
- `1 R( Y# x) i2 a' W
UQI3T}M`NL0(N9G]{88~LWO.png 1 t1 A3 M: B7 O' g! X
; y  J7 e9 ^6 ^7 Q$ y
3 STM32 ST-LINK Utility介绍

. A) o1 f  A. q/ Q4 n+ p9 j, S3.1 windows操作系统
$ l& K7 X3 Q! y1 N5 ~6 A
上位机可采用ST官方的STLINK软件,然后通过STLINK模块给目标设备进行烧录。& U. m5 q, y) [# f2 d. Y6 g

% t7 g& y; H2 J; d" ` 2020041208091471.png
$ ]* @) Y5 }( E7 g
' G# I$ J& Q/ V. s% u1 W此软件需要使用STLINK仿真烧录器,支持.bin/.src/.hex/.src/.s19五种格式的烧录文件下载。烧录文件在MDK软件编译工程时会自动生成。正点原子的例程烧录文件位于OBJ文件夹中(.hex)。如果是使用STM32CUBEIDE生成的工程,编译后烧录文件位于Debug文件夹中(.bin)。
5 O1 j/ k9 Z! _% V; w7 K' z, I0 \* x) u
)90LXV1Y3S6L$O(Z46~HIFC.png . f3 W( O0 I- G# [0 S, K+ T) c, h

) h% o3 Y% {7 z/ g+ J这个软件支持开发板板载的STLINK V2.1进行烧录操作,不会提示需要固件升级等任何错误。具备烧录软件和芯片已烧软件比对灯功能。软件体积小巧,非常好用。
' j. G5 W. q3 P( V0 X- y
+ u+ u: [- g( r3.2 Ubuntu操作系统中烧录
# U' `% L* k( N4 `0 \3.2.1 软件安装
8 q+ C* c, d& K* G% M- O
软件直接使用命令行安装即可,UBUNTU的源自带此软件,无需在github上下载源码编译安装。; d3 x+ t- A% C  e

: h, O% B0 z9 n  ^( U) k
  1. //安装STLINK( V9 C, j. C0 M8 O" A. D
  2. sudo apt install stlink-tools
      A/ `4 T9 N4 N. Y2 U# ?

  3. ( l7 r, U( n  ]% Y- G( }
  4. //查看STLINK的版本,确认是否安装成功,如果成功会返回版本号
    7 q3 k) J2 Y& C0 ]! p
  5. st-info --version: z4 H! t6 F% @' ~, n0 D
  6. 4 P+ C( f' W8 v* |) L# J* Q. ^
  7. //安装STLINK-GUI界面  n$ U! n8 G; c. W! P
  8. sudo apt install stlink-gui" u% p; k2 m' b/ ~& _
  9. + ^6 Q1 @, N8 K# j2 q: A+ Y
  10. //使用命令行进行下载" y. ?' z* {& u  w. |
  11. sudo st-flash write test.bin 0x8000000
复制代码

) m3 C. F% Y& e% o& j; c使用命令行进行软件的烧写工作,下载命令的格式,比如说可以使用st-flash erase对芯片进行擦除
# T% F! J) K: s& ]7 W0 j3 T
# S* S0 _6 |/ @9 }2 d
  1. whs@whs-hp:~/Downloads$ st-flash  L/ o0 q: t9 M4 |3 O* v8 U) a
  2. invalid command line
    ) g! N3 O4 W) R# C; U
  3. stlinkv1 command line: ./st-flash [--debug] [--reset] [--format <format>] [--flash=<fsize>] {read|write} /dev/sgX <path> <addr> <size>' A2 k& J) P4 Q6 l6 h! V/ l  M/ f
  4. stlinkv1 command line: ./st-flash [--debug] /dev/sgX erase" ~$ x7 p* A& S; V' E  N1 V
  5. stlinkv2 command line: ./st-flash [--debug] [--reset] [--serial <serial>] [--format <format>] [--flash=<fsize>] {read|write} <path> <addr> <size>; a, N( D. |0 `7 J
  6. stlinkv2 command line: ./st-flash [--debug] [--serial <serial>] erase4 L1 G! d! x' V+ M% d6 b
  7. stlinkv2 command line: ./st-flash [--debug] [--serial <serial>] reset+ {6 B$ a1 C6 D; Q
  8.                        Use hex format for addr, <serial> and <size>.
    . \( C% H2 n4 I! c
  9.                        fsize: Use decimal, octal or hex by prefix 0xXXX for hex, optionally followed by k=KB, or m=MB (eg. --flash=128k)' R2 D! V+ D! X2 p
  10.                        Format may be 'binary' (default) or 'ihex', although <addr> must be specified for binary format only.3 h7 u. F) A& [7 W
  11.                        ./st-flash [--version]
    5 ]7 \. A- W5 `! M+ Y; \
  12. example write option byte: ./st-flash --debug --reset --area=option write 0xXXXXXXXX3 r; q' m" R) {5 J
  13. example read option byte: ./st-flash --debug --reset --area=option read > option_byte
复制代码

$ F8 E  ~: x, b6 t3.2.2 软件烧录
: m) B5 _! |$ o3 m  b3 X+ }软件下载示例,烧录文件为bin格式,需要带地址信息,sudo为非必须的,这里使用的版本是1.6.0, M) {$ f2 P; N1 L  L

0 r4 {- O$ C- v4 j2 f" p8 I2 ]8 B
  1. whs@whs-hp:~/STM32CubeIDE/workspace_1.6.1/Cube_fl03_led/Debug$ sudo st-flash write Cube_fl03_led.bin 0x8000000
    . z: w5 N* k* R- n( S$ w+ j8 C
  2. [sudo] whs 的密码: + [* o+ X! A( T% k7 p% V2 o3 V
  3. st-flash 1.6.0
    ) l' c1 ?5 x# l4 h0 \8 W4 t
  4. 2021-08-27T00:28:36 INFO common.c: Loading device parameters....% m0 @* p: a  {7 D
  5. 2021-08-27T00:28:36 INFO common.c: Device connected is: F1 Medium-density device, id 0x20036410
    * W" s) v9 l+ r2 k
  6. 2021-08-27T00:28:36 INFO common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes1 i. [7 W3 o/ x$ {6 M3 ~
  7. 2021-08-27T00:28:36 INFO common.c: Attempting to write 15400 (0x3c28) bytes to stm32 address: 134217728 (0x8000000)# Z* @, `1 \# e# t/ Z6 d% `; R
  8. Flash page at addr: 0x08003c00 erased
    # d( x0 S! v+ H4 J
  9. 2021-08-27T00:28:36 INFO common.c: Finished erasing 16 pages of 1024 (0x400) bytes
    % O6 K% j1 x! w% ^6 z& c
  10. 2021-08-27T00:28:36 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
    # q' `0 E" W' c& v, E
  11. 2021-08-27T00:28:36 INFO flash_loader.c: Successfully loaded flash loader in sram" r5 J- E* B" _$ V3 y; j
  12. 16/16 pages written5 K& ]+ y5 i) p3 W/ }6 ]
  13. 2021-08-27T00:28:37 INFO common.c: Starting verification of write complete
    * d7 Q7 z* g% e# F
  14. 2021-08-27T00:28:37 INFO common.c: Flash written and verified! jolly good!: v+ d7 P) n0 i4 M
  15. whs@whs-hp:~/STM32CubeIDE/workspace_1.6.1/Cube_fl03_led/Debug$
复制代码

3 S2 _! s3 U$ S3 B  M7 q$ f当烧录文件为hex格式时,由于hex文件里边包含地址信息,因此不需要再指定地址了,但是需要指明烧录的格式。; |- o/ m" r" B$ }$ h/ H& _, {3 x
) o% i4 _( {5 h& u1 D
  1. whs@whs-hp:/media/whs/HP_D/STM32/F103/trunk/FSMLED/Project$ st-flash --format ihex write output\(mdk\).hex
复制代码
+ S% P$ r6 f  u4 R' K0 V8 {
3.2.3 使用GUI界面进行烧录
/ v5 d$ N. \4 p- W; L& O/ l安装STLINK-GUI后,可以使用GUI程序进行下载,GUI的显示界面如下" v, r: e% ]  Z8 e) K, C

0 u+ ?% ^3 R# h {5C05PZ32H_H0V{ZUVOD2.png / d* G. ~7 N( i  K# L: y9 e+ Y7 b9 {
' R3 ]1 @) ]- Y, I% S& Z: f- J
3.2.4 更多详细信息
  `6 Q2 Y. o# T0 r6 E6 |( Z命令行模式仅支持V1和V2版本的仿真器,并不支持V3版本的仿真器。" g/ h  A- X$ V4 T" P
更多详细信息,可以参见GitHub的官方资料! T7 |3 \6 K! Z

- B4 d- ?! l! f: J) t6 ?2 J: E4 STM32CubeProgrammer
$ s5 k/ v5 O" X8 p4.1 使用STLINK进行下载
. u$ E% a7 {9 W+ B3 g  `
STM32CubeProgrammer软件是ST新推出的烧录软件,支持更多的方式设置,官方定位是替代ST-LINK Utility。打开如下图所示,支持STLINK、USB、UART以及OTA(均需要对应的烧录工具)下载,支持SWD和JTAG。但是需要说明的是,这个软件烧录时,需要STLINK固件为最新。使用正点原子Nano开发板时,会提示软件非最新,不能进行连接。$ d! ]- {( `/ `. \: ?2 x* \
RT6N@R`}6LGY(Q7)EO]6J(J.png
3 \& v- q( s. q+ K5 O" F' ]$ j8 i& J( B# V& P
弹出的固件需要升级的错误
) l" w4 A) Y; }( S6 l! i  B$ g* k# ^( i) B1 N
AWMD}{I[6XFXKJZ2L{1[9VA.png
' k4 {4 I' X5 h# {! t$ s( E2 ]  ~- N# `# f
如果买的是官方出品的STLINK,可以正常对固件进行升级,如果不是官方的烧录器,升级前请三思,升级后有可能导致烧录器不能正常使用。下图为点击firmware update后出现的弹框。
, r2 I2 [$ D; x
/ [+ J  a, H$ y0 ?  P. V' M; A UCE)]X[W[E0J8K$%M$A(A)4.png
( R2 t$ K' b7 @
" o/ t1 b& h& O使用正点原子Nano开发板也无需担心会升级导致不能用,因为你尝试升级时会弹出另外一个提示,需要额外的9856B空间,不能进行升级,原因是我们板载的STLINK芯片采用的STM32F103C8T6只有64K空间,这部分空间已经全部用完,不能再写入更新更大的固件。8 n% @: V! Y: S% w" {  n5 G

) G5 ?( ^4 z1 ?0 S# } 20200329081903693.png 6 b0 ?7 v( t- m7 `+ I

" U9 x9 _8 L0 t6 b, x另外这个软件也集成在STM32CUBEIDE软件中,STM32CUBEIDE为ST将eclipse、STM32CUBEMX和STM32CUBEPROGRAMMER集成整合到一起的综合编程软件,目前用的人还很少,挺好用,而且免费,跨平台。连接成功的示意图如下,默认会把芯片内部的程序读出来,可以对此程序进行另存为等操作。" S- Q  i4 Z8 y) A- W8 _

: h' W7 t# x4 P9 c# a ~BHKHPJ55K843QTLM0DB(1O.png
- J' p" @, i; o5 K, e, b6 y- R1 X" R; Y- {( x4 l/ E2 G
使用此烧录工具,烧录时还可以对芯片进行读写保护,避免芯片被恶意读出盗窃烧录底层。  g& d5 t) G2 `2 L2 M  i! w7 D7 Z/ n

" G/ l+ O+ q  R' \$ a6 S+ @& _ MHG]EQYKGQYWHOJC9~8$}MV.png
0 L' j$ x4 E* A" C" l- r. G, M4 F. n# [" Q: S5 E+ ^* m' o: T
在ubuntu中此软件和windows下是相同的。4 \* q  f; Q3 ^$ v

( h: [+ |, W& l. K4.2 使用串口进行下载% b, @- g2 _1 \# D/ u
我们在此软件中,可以使用串口进行连接烧录,这样做的好处是不需要使用第三方串口烧录工具,另外cubeprogrammer也不会对STLINK的版本信息进行核验。: R7 v4 {7 S8 P% E  {- ?3 M
/ f3 V9 J9 G% }# N
1.BOOT设置,将BOOT1跳到0(开发板已经默认拉到地),BOOT0跳到1(3.3V)。按一下RESET按键
: h2 Q8 i; M0 Q7 I+ O1 o
& W5 B* M$ ]& l% n. a. g; S6 g L$BB]N1IV1]Z0LDRWOERX7L.png 5 i" r7 N7 H, [. O  A& O/ T" q2 a
7 H, l" X4 T* q. E+ n- x
2,打开软件,选择Uart和正确的COM口,由于用的是串口,因此就和stlink无关了,用一个USB转串口线也可以进行下载。5 y) C4 [3 M; F

* z! }7 w. ]/ ?6 R! _5 l9 V" G5 m. {3 ? I4Z6K9P8%]{WO5V4RN%E{)0.png 0 a! t. j/ N5 A/ Q
6 y: s' g/ z8 R# b$ [1 P
3,连接成功后如下
( b+ W! B; N  g+ j! v& u
. y+ ^7 ?! l# X; \3 s
9 u* |/ b3 {+ t. B# |7 s( s3 C2 Y4 O5 n
4,选择要下载的文件下载,下图所示已经下载成功。* E: R5 R$ ~5 a* p4 A
" W; U& Y' S& C; ]
W6U8POFZ${{OW6TNZZTFPWA.png   F7 R/ F+ m8 X! q! a

: C6 g4 M$ m. I- T! Q; i7 G5,将BOOT0跳线还原到BOOT0。若上图勾选了Run after programming,则无需按Reset即会运行新程序,若没有勾选,按一下Reset按键。+ z/ W/ j5 m6 g2 D1 Z% w

2 i$ d5 h/ |- r2 `1 M7 }5 官方正版STLINK仿真器4 m* _4 a: j4 `: ~* ^
5.1 STLINK V3 mini下载器
- [/ r" P8 S: }- H
这里我推荐一款官方的正版仿真器,即STLINK V3 MINI,ST官方近两年推出,采用了STM32F723的芯片,比常见的STLINK V2拥有更多的功能,更快的速度。
% y# ]6 k4 v. X# j3 X
/ {. ]$ @7 ?% E; I 7~U(Z@RW%()X$FW7ML{AULL.png
( [8 ^: o, P, h/ ~
. C" ^9 c- o; }1 A, y; |  H这个仿真器非常小,比通常的U盘还小一号,且排线为14P 1.27mm间距的排线。因此不支持常见的2.54杜邦线连接,需要额外的转接板进行转接。这里需要特别注意。此款仿真器支持一个虚拟的串口(13脚和14脚),支持SWD和JTAG烧录,端口定义如下:  i1 {7 m& s+ M
7 g, i% w- z9 m  d
2([)Q497${KHGQ4ENZ_LI.png
" d" h; {# v% n$ E0 Q  g; {
1 M% P' e3 t0 Y; U4 j; h9 f嘉立创白嫖自制的转接板,此板的J4插座还支持NUCLEO的SWD扩展口的转接,按键为RESET按键,可以下载完成后手动对烧录好的芯片进行复位。
: k) E( Q0 q7 g& V1 X
; D  n  H% f- q  A) f" O5 ]0 U: E N9ROE)K(M(YVBJO0LL6WCNO.png
- W4 z$ q6 u+ n: F1 G7 [4 w0 K1 d( x% R' h6 ~/ p3 V( }0 g
背面引出的串口,本想放在正面的,结果实物比封装大,翻车了,而且1.27的插件不是一般难焊,很容易连锡。. l; _, @% d( h, R  b0 H! m  x" @) [
  |0 D, p$ [- S# X' I' h
W$N1_2XS(ZA9481%GX5T0~2.png
# T# v8 Z6 S# L  M/ w5 ?% J2 q" p4 L. n# w/ X" A- |
STLINK V3版本的速度比V2的要快,缺点是不支持山寨芯片,接上后提示无法连接到目标,而STLINK V2是支持山寨STM32芯片的。目前V3系列暂时未发现网上有仿造的产品出售。这款性价比比较高,淘宝价格80元,推荐各位购买。) ]; k. g; L+ f9 |( d
7 ?3 z" I, I) O# ?  o# m8 Y* K# _$ c
5.2 集成在官方开发板上的STLINK  G! ^( m, b; I! G+ n' \0 v/ g
官方的开发板集成了STLINK,这个STLINK可以对外进行烧录。这块部分可以裁下来单独使用。当烧录外部设备时,需要将外部烧录跳线拔下来,然后将烧录口和目标板通过杜邦线进行连接。不同的开发板对应的STLINK版本不同,F103对应的是V2.1,F7开发板对应的是V3.0。7 M4 H9 B9 O; R/ w  d

! i$ y' U% V% J. T. n 2(RJRZHN0IQ5JXG7@02$UUQ.png
+ _* L  z3 n' u, p
# `5 o1 L& L1 `  S, S- V" ^可以做一个6PIN转20PIN的转接板,转接到20pin上,成为一个标准的下载器。
, B& H' N' Y( p
$ Y4 {* S+ o6 X" `# G# ] 7[Y2Q`LXJ8JZ]V78CWPPWDF.png
/ s. [/ i8 U" A# w: G5 y. `( e
+ o. e* n# y$ m6 连接异常处理7 ?7 {- F' T0 [8 F$ L! E' ?( a
6.1 能连接但下载报错解决方案

4 Y% a. |. y5 c. u9 \. _+ T2 V使用杜邦线进行SWD连接时,如果是散线或者线缆过长,会出现KEIL能连接上,但是下载报错(flash错误或者M3错误)的故障。将线缆更换为排线或者降低线缆的长度可以解决这个问题。' }' M: H& S" _" _7 Y
; F6 e! a0 }  u. Z
JNX01_AQL98_LFHHZ%PVKS2.png
1 I; _6 f2 D3 [- U
! I' d4 p0 D/ B) d  |6.2 特殊IO口使用导致烧录一次程序后SWD口不能用
& ?' O1 C2 ^8 v3 N  w( F
JTAG或者SWD端口被占用,但是却没有进行正确的配置。# l. ]/ V. ^/ e2 j: P, H, ]- L
在开发STM32F407芯片时,调试18B20温度程序时发现一个问题,当下载完一次程序后,SW就失去连接7 w/ K0 h" g5 B6 s: G* q+ t% G5 b

3 R) [2 l- O) i2 S 8$F5M1ZZAF$]1A)FP`EA$$Q.png
( O$ M* b7 w# j. N7 U
9 Z2 k+ c( }& t1 }& F( G0 O强制烧录时报错信息如下:No target connected
9 S( T4 o% Z2 N# D9 n" S& X' j' G: E
~L8$%~HS_8P]F6[7T]4XH}N.png
7 g' O# k( q. V# u
: M+ q! B4 g6 o/ {# A* t报错信息Error:Flash Download failed-Target DLL has been cancelled7 F5 [3 M5 D1 ?

9 K& w2 I, |% q9 W )[FIOIPWXU5VTF@@F@WG[IB.png
! V7 }9 j1 S, R) V5 `0 u7 _8 Y. t, r; @0 r. X6 T; {
使用utility连接也会报错,报错信息如下:Cannot connect to target
/ S6 e; D9 O" w' o1 j% M  F6 f$ L6 i
4 k4 @4 Y  v1 b5 b S__H@6SJBAS44LY(2VI1B8I.png ! y7 K' O! u7 ^4 c
7 D4 m) O5 R8 ^; v9 ?3 [
按照提示,在烧录时按Reset按键,成功烧录了软件。使用一行行注释排除的方法,最后定位在DS18B20_Init初始化函数这。程序使用了PB15作为了18B20的输入,这个口也是JTAG的接口,在使用时,不能按照常规GPIO口进行配置。使用时,需要先禁止JTAG,然后使能SWD。如果弄成了最后一种模式就SW下载方式无效,需要按住Reset复位重新连接烧录了。! v, L9 p! B9 U% K& p2 q
9 j4 r9 Q- e3 t6 i: n1 ^  \2 x  P
O({94CTAQBEDIHM~X@9PSA9.png
* U( }% o+ n5 c- A9 [
% y+ p" _. j8 p) S2 R9 N为了验证这个想法,在程序中将A15改为B15。更改初始化函数
& h  \: {1 A# I& m5 r) I: A( b- r' y: J
  1. u8 DS18B20_Init(void)' d3 m, {7 g, m" x$ Q1 B
  2. {
    : d4 [7 \* z$ ^6 \; u
  3.         GPIO_InitTypeDef  GPIO_InitStructure;1 {9 ^; z6 b0 o; `; ]

  4. ; m( ~/ u/ A8 V5 P' U
  5.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOA时钟,改为使能GPIOB时钟
    " n3 }5 W% U! D$ k. ~
  6.   d6 z; _" h' t, O
  7.   //GPIOA15,改为了GPIOB15, t, u  F& S: h2 s4 `, O
  8.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;+ _8 _: Q  y+ c  d
  9.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
    . e9 M4 x+ C5 z) p
  10.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出  d! u, o# ^( c6 c
  11.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//50MHz
    * m! e5 @, A* I& C
  12.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
    # q2 j  O% ]1 i0 p$ E# c; Q
  13.   GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化; F; f% n, \1 c
  14.   DS18B20_Rst();; \- B6 G. x+ ?: \4 H+ o
  15.   return DS18B20_Check();/ o- f* W" i9 o! P% j% l4 m
  16. }
复制代码
3 K5 ?# K: m: @/ ~
更改头文件定义
' W  x' @! h7 j9 b+ Z' i
) o! W, u1 l" Y, a% \* y. a  }& ]
  1. //IO方向设置- r4 _/ [3 C( K; C8 k, i
  2. #define DS18B20_IO_IN()  {GPIOB->MODER&=0XCFFFFFFF;GPIOB->MODER|=0;}        //PA15输入模式,改为PB15- d7 H( n% n2 e" s% [
  3. #define DS18B20_IO_OUT() {GPIOB->MODER&=0XCFFFFFFF;GPIOB->MODER|=0x40000000;}         //PA15输出模式,改为PB15) n) s  K5 ~4 |  S* E. T/ p
  4. 2 k6 L; F, H* k5 k! u0 K) F- O
  5. IO操作函数                                                                                          
    9 `+ P0 D7 X; v& Y
  6. #define        DS18B20_DQ_OUT PBout(15) //数据端口        PA15,改为PB15
    ' j. @; {3 R% M9 s
  7. #define        DS18B20_DQ_IN  PBin(15)  //数据端口        PA15,改为PB15
复制代码

& t% G% x/ l: n4 y% W更改后,可以通过编译,下载后,KEIL也能扫描到设备。
* v8 ~) N3 y/ _
  s0 |. k( J( W3 l4 c S1UEZ166@LHTB}ILYKEVM.png
4 x+ P) ]/ @* v& L+ g$ B2 X: n- ^
6.3 能识别到芯片,但是下载时弹出报错对话框" w1 I6 I5 R. S0 ]; Y
使用5.34版本的Keil,能识别到芯片,但是下载时报错 Command not supported# |  y3 y8 G; g1 I+ E+ X

  n1 ?( E1 X% R( ^, A %GE64FILYMFH_0~0~M{ZC.png
# d( N. m& u2 Y5 c( f6 T9 j# w; |* ~
/ k7 P4 a1 \( t: @$ c8 m, F$ S点击确认下,报另外一个错误# ]# [1 k! Q: A2 V
- ?! y+ E  M0 j' j0 Z. {
F6O02EZEKQMO8]V`Z5IHW.png
( M+ l& p8 |7 Z  {6 D) j9 a4 A$ ]% t- g# _, |
原因是新版本软件对未能及时升级STLINK固件的烧录器进行了封杀。需要升级仿真器的固件。当然盗版仿真器不能升级固件,唯一的解决办法是将Keil进行降级处理,降低到5.27版本。下图是在keil升级固件的方法。用正版仿真器实验过,没有这个问题。
( g/ @2 a0 Y$ i
3 U' H* @5 I) I2 [8 X8 c S5RMZ2KZ[I2X1JDEQF6W{LV.png
9 u5 [; n) L+ b  l: k  p' P  p2 D# E9 P; f4 s6 w+ ^
7 stlink对芯片的部分Sector进行擦除- f& S; p, l; I5 j- k. R$ b4 f' ^
在使用Bootloader+App的使用方式时,我们烧录App时,如果每次都对全片进行擦除,那么每次的Bootloard将会被我们擦除掉,导致程序需要下载两遍。我们可以选择对部分的Sector进行擦除,而不是全部。7 F3 s2 e$ T3 F; ^; Z* v2 t+ e
案例:某个Bootloader对应开始地址为0x8000000,结束地址为0x80042B0* u" h0 k( T2 {: z. p% t
APP应用对应的首地址为0x8010000
# y2 f0 F6 R- b+ n! u0 i5 U$ i& B% l  o/ a7 y
A29J_F6S0DC[H)9W~D~~D[I.png
8 {. r9 O! }' V7 e9 `' ]2 s4 T" t8 j+ l, h
结束地址为0x8015BD02 }( N3 e% V: X8 q8 }
4 F) i, S# m& |! v
HY7}IO(){VQ`Y9P$((AEWQ2.png + o$ h8 Z2 }  C7 P
- Y; o" w- I- o) d9 F
当我们不希望擦除Bootloader时,我们可以选择Sector擦除,擦除APP对应的地址段。
- }  P) c& E' a
- R1 i" @" ]# K RR%`C%W40(@R%DNS%Y{XUYW.png
( j7 p/ g: a* G: V; |3 o7 h# k  ?2 t- @8 Y
此时程序回退到没有下载APP时的运行状态。可以继续下载新的APP应用程序。/ C8 O5 p5 A/ }% a
$ |8 t% p. v6 k+ u

) Z3 r0 f2 e7 W# E( x$ w& v* i' ^8 a  d

" N6 `$ U& y1 b4 o4 a
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 手机版