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

【经验分享】STM32G0和STM32G4 如何把BOOT0当作通用GPIO使用

[复制链接]
STMCU小助手 发布时间:2021-11-8 01:02
我们知道,STM32一般可以通过BOOT0和BOOT1的不同组合来设置启动方式。
$ j6 E8 T& R2 `& Q, d1 _2 z' t2 y) D1 n
之前用过STM32G070CBT6,这个芯片的BOOT0是和PA14在一起的:9 T& A& U  {  B* r  e- _* z! ^
7 P6 N" E6 W" C2 Q3 M% Q
20191217230903730.png
% P& |2 G+ u8 e& C1 K; B5 H

1 g4 p8 `7 O: U3 N/ r4 U! {  F这个比较简单,我们知道PA13和PA14是芯片的SWD接口,我们只需要在这个引脚上下拉一个100K的电阻即可。这样,SWD功能和BOOT0的功能都兼顾到了,系统复位或者启动的时候,检测到PA14-BOOT0的电平为低电平,然后正常启动之后,这个引脚可以作为IO或者SWD功能使用。
' O5 D  F; i$ O2 b9 A: r# s  h, o2 V* y
但是对于新使用的STM32G431KBU6来说,上述的方法就行不通了,如下图:0 k5 L" R7 _, l* U

; m) C, F: E0 j5 F7 [
20191217224445381.png

  [' X3 c$ [# E) U1 E/ E. n. x
- w: L6 A) i! f& `: y  h) G1 E从上面CUBE MX 的引脚图中也可以看到,31脚的名称叫做PB8-BOOT0,我在一个设计中把PB7和PB8当作硬件IIC使用,这就需要给这两个引脚外挂4.7K上拉电阻。而按照通常的启动方式来看,我们要从主flash启动,需要启动时BOOT0引脚的电平为地电平,而IIC总线外挂了4.7K上拉电阻,使得无论如何都不能让启动瞬间这个引脚电平为低电平。
$ M" U$ J. M7 |# [& P8 h4 |" I; j
这时候不要怕,我们翻看手册DS12589,可以看到:
0 r! h4 h4 |# U2 v, P% Y' r% X2 }! X% X
20191217224951559.png
: d. k% i6 a9 F- b/ W

# Q- Y7 |. H& Z" g5 V也就是说BOOT0我们可以通过PB8-BOOT0这个引脚来设置,也可以通过Option Byte中的nBOOT0 option bit来设置,现在我们不能通过前者来设置,只能通过Option Byte中的nBOOT0 option bit来设置系统的启动方式了。
2 w2 w5 H* t% U4 \
6 a% r3 v6 c; K我们在用户参考手册RM0440中可以看到:
0 K6 j; }7 Q5 L
6 Z3 A* n4 E( x3 o3 i: z7 h
20191217225242981.png

3 S; H- W8 Q: }, A& A5 a: a9 R
9 V! B; d5 z# E% {- l1 A7 |需要通过把nSWBOOT0位设置为0来选择使用软件BOOT0而不是使用PB8-BOOT0来作为BOOT0的设置项,接下来把nBOOT0位设置为0就可以达到和使用PB8-BOOT0下拉到地一样的启动效果。2 R" ~* I- k6 t  k0 f

, w2 V: K4 K. i8 d; t5 Q) O另外需要注意的地方是用户参考手册RM0440的这个位置:
6 m9 n' e0 ^6 e: a9 s( a/ h* ]' C* O, y$ H
20191217225715278.png
& T& e! p& |' ~! D! L) b& [, H( I
/ s* d3 i+ m9 n, ]
以及! y) }7 C/ ]8 |# w

: l: k3 \8 {" O" `: Z1 g
20191217225833732.png
( r4 o9 a6 p- @# Y+ G

( A) ^) E2 |2 K$ w9 w以上是涉及到软件设置BOOT0的一些相关寄存器及说明,接下来说怎么设置。! w0 z5 n0 k; E& o" S7 j- e; k
+ _# m1 Q) p# [6 V# d% D& I
有三个办法可以实现把BOOT0设置为软件BOOT0,这样PB8-BOOT0引脚就可以当作通用GPIO或者IIC或者其他用途来使用了。$ e# a2 Z6 X* _4 m5 Y% X( o
; T. R7 ^# r, L  h0 k# b1 x1 \1 O
1、在程序中对Option Byte选项字的相关位进行编程,设置BOOT0为软件BOOT0,我看到HAL库中有相关操作,但是操作起来比较麻烦。  I* v% L/ |; X& r6 i6 P; v: I' p" G9 S. `
8 ^) ~) q" c( [: Q% B) A* m' v/ j
2、使用STM32CubeProgrammer来操作,这个软件可以通过STLINK\UART\USB\OTA来连接目标板来实现修改的功能。
- S# p" C8 W' a2 ^& i9 p5 g6 X5 I2 `2 `
3、使用STM32 ST-LINK Utility来操作,这个只能通过STLINK来连接目标板,连接上之后,点击Target,然后点击Option Bytes之后,按照下图修改即可实现目的:8 ]1 p3 Z7 _$ S1 T5 X( t; f

4 S6 ?* f- x+ j- [" g' [& [
20191217230551897.png

0 ~! k$ @* x6 @9 g7 [5 E! G
1 |3 q5 c) [% A! x, M. u1 z* ^( ~* r" V& t

. G# T5 x2 K6 x
% p% W' s& [+ }1 o& C
收藏 评论1 发布时间:2021-11-8 01:02

举报

1个回答
快乐寄存器 回答时间:2025-4-25 13:56:27

你好,请问在程序中对Option Byte选项字的相关位进行编程,设置BOOT0为软件BOOT0的操作,适用于对没有烧录过程序的芯片进行离线烧录吗

所属标签

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