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

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

[复制链接]
STMCU小助手 发布时间:2021-11-8 01:02
我们知道,STM32一般可以通过BOOT0和BOOT1的不同组合来设置启动方式。- u9 a3 b+ b% w2 ~% P+ o: J
+ I) y' r% s5 [
之前用过STM32G070CBT6,这个芯片的BOOT0是和PA14在一起的:
$ ~5 ~! o2 r& D+ w5 [. b
# J4 ^1 q, F' }" k% J8 ^1 y# b
20191217230903730.png
; j" M/ Z% G& R6 [) @0 I! b7 s

6 b* |3 M0 k! [* |% |这个比较简单,我们知道PA13和PA14是芯片的SWD接口,我们只需要在这个引脚上下拉一个100K的电阻即可。这样,SWD功能和BOOT0的功能都兼顾到了,系统复位或者启动的时候,检测到PA14-BOOT0的电平为低电平,然后正常启动之后,这个引脚可以作为IO或者SWD功能使用。5 y# p4 i% k0 X9 \6 z: Z

: A) I" c" ~3 T: {* D但是对于新使用的STM32G431KBU6来说,上述的方法就行不通了,如下图:
& U8 ~) R. g0 J2 C0 C: ^" N* x! Y
20191217224445381.png

! B6 |& P6 e6 T! T0 J- z- b, F" G* @
从上面CUBE MX 的引脚图中也可以看到,31脚的名称叫做PB8-BOOT0,我在一个设计中把PB7和PB8当作硬件IIC使用,这就需要给这两个引脚外挂4.7K上拉电阻。而按照通常的启动方式来看,我们要从主flash启动,需要启动时BOOT0引脚的电平为地电平,而IIC总线外挂了4.7K上拉电阻,使得无论如何都不能让启动瞬间这个引脚电平为低电平。9 F& ^( R/ }) X2 |9 R- Z5 f

- n2 h0 c. U0 ^9 \* t8 ^* O( @这时候不要怕,我们翻看手册DS12589,可以看到:
5 N$ K" r' |) U) y7 x# d7 c" P2 ?- h$ n( W
20191217224951559.png
. R* D7 q% g2 r' A5 b, t

6 N; A, s4 T9 N7 l+ J1 g, ^# I也就是说BOOT0我们可以通过PB8-BOOT0这个引脚来设置,也可以通过Option Byte中的nBOOT0 option bit来设置,现在我们不能通过前者来设置,只能通过Option Byte中的nBOOT0 option bit来设置系统的启动方式了。5 n% t9 C- G" S  e
" g6 W9 T1 S$ N: o4 Z
我们在用户参考手册RM0440中可以看到:
! `' c: I; o3 J% T3 ~  e) M' Y9 x5 g) F* e1 m8 R, w$ S
20191217225242981.png

7 b" h" P4 y0 L; w) f/ i4 ^4 W9 p( ?
9 `3 F- M$ Q+ [  j/ [  u需要通过把nSWBOOT0位设置为0来选择使用软件BOOT0而不是使用PB8-BOOT0来作为BOOT0的设置项,接下来把nBOOT0位设置为0就可以达到和使用PB8-BOOT0下拉到地一样的启动效果。( K0 T+ u9 ?+ ^& o% S

6 R; t0 t+ m3 k- N% v) B8 W3 |0 m- H另外需要注意的地方是用户参考手册RM0440的这个位置:: p5 b1 }, Z$ p/ `0 i  ?

1 e- |% [4 J1 [
20191217225715278.png

5 @4 m2 D2 Z; u5 q9 L1 M* O3 f3 a
# {. S- _. p" m3 F: B. k/ \3 d以及
7 E: J5 f) e! f* h3 d7 @; I$ y3 ?! p# }$ j- @0 M9 R/ I) Z, O
20191217225833732.png
  d" a/ p2 X9 `

! f  A7 `: Z0 Y: A0 E以上是涉及到软件设置BOOT0的一些相关寄存器及说明,接下来说怎么设置。
, @! v+ V# G3 B7 U9 w& `8 H$ W
; J" Q. `$ [" {2 `3 u* X有三个办法可以实现把BOOT0设置为软件BOOT0,这样PB8-BOOT0引脚就可以当作通用GPIO或者IIC或者其他用途来使用了。9 g2 _( Y7 P, l) k

9 w$ p+ g8 b$ z: t: W- l6 ~1、在程序中对Option Byte选项字的相关位进行编程,设置BOOT0为软件BOOT0,我看到HAL库中有相关操作,但是操作起来比较麻烦。- P2 T, O5 J: A) }, y5 j

' z; Q& F( f/ `9 w+ R% N2、使用STM32CubeProgrammer来操作,这个软件可以通过STLINK\UART\USB\OTA来连接目标板来实现修改的功能。
6 {) B# a" a% F) `. F' H7 [% j" y% s. K: L
3、使用STM32 ST-LINK Utility来操作,这个只能通过STLINK来连接目标板,连接上之后,点击Target,然后点击Option Bytes之后,按照下图修改即可实现目的:( [% n, J# |  S- p

+ x% [- w8 p5 o+ ]0 I# [* S* h
20191217230551897.png
, T6 \. f7 H/ u  _' u7 y

" \( }: Q! n1 m  S8 E, i1 x& R$ U5 f( h4 r( R2 b9 z8 f$ Y% X! k

2 u" Z; @; _4 U  d' Q# ~3 @) _9 U. w0 D  E
赞 收藏 评论1 发布时间:2021-11-8 01:02

举报

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

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

所属标签

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