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

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

[复制链接]
STMCU小助手 发布时间:2021-12-9 10:46
我们知道,STM32一般可以通过BOOT0和BOOT1的不同组合来设置启动方式。( p& H) A. q: Z6 L% N! M

/ P2 V( d3 }  ^# U' R. o之前用过STM32G070CBT6,这个芯片的BOOT0是和PA14在一起的:
; v- m! _/ [3 @+ p  s: I! D
" F$ N7 L2 y6 c+ @1 {" L# Q( i
20191217230903730.png
9 i! Z& W! A. H5 S5 {. C. g

' v' u, x: c1 S! ~- `9 Y这个比较简单,我们知道PA13和PA14是芯片的SWD接口,我们只需要在这个引脚上下拉一个100K的电阻即可。这样,SWD功能和BOOT0的功能都兼顾到了,系统复位或者启动的时候,检测到PA14-BOOT0的电平为低电平,然后正常启动之后,这个引脚可以作为IO或者SWD功能使用。
6 l* l, b; w% G" u. X& G" b; Q% E
& R. U" o4 W0 y$ {; V7 G5 K5 t但是对于新使用的STM32G431KBU6来说,上述的方法就行不通了,如下图:0 n9 O3 O, a( F7 ~+ h

! H. b/ n1 {- ]: e
20191217224445381.png
6 s; e6 c' I( E; s; D

. q5 ]8 k3 w7 U# d2 q. n) h从上面CUBE MX 的引脚图中也可以看到,31脚的名称叫做PB8-BOOT0,我在一个设计中把PB7和PB8当作硬件IIC使用,这就需要给这两个引脚外挂4.7K上拉电阻。而按照通常的启动方式来看,我们要从主flash启动,需要启动时BOOT0引脚的电平为地电平,而IIC总线外挂了4.7K上拉电阻,使得无论如何都不能让启动瞬间这个引脚电平为低电平。
! f* N0 u& q: n/ |3 N
( p# Q2 J9 R/ R+ ~这时候不要怕,我们翻看手册DS12589,可以看到:; S, h5 \2 Z" |- ^4 E% ?, R  l6 }+ M
* Q( U3 {# q& O5 W" x. d
20191217224951559.png
! F( {3 r6 ~/ L; j% d) u" L# |

6 N5 T, {7 w% r. Z也就是说BOOT0我们可以通过PB8-BOOT0这个引脚来设置,也可以通过Option Byte中的nBOOT0 option bit来设置,现在我们不能通过前者来设置,只能通过Option Byte中的nBOOT0 option bit来设置系统的启动方式了。2 W1 e$ A% G3 C$ O- b' J
1 O2 Z9 j8 u9 O. t+ J
我们在用户参考手册RM0440中可以看到:1 a0 Y* L+ x; x  K" q  `; v
2 v! g% S2 @$ R
20191217225242981.png

$ Q+ `3 r4 T+ E7 \1 f" t
. g& K; g8 o0 W6 N需要通过把nSWBOOT0位设置为0来选择使用软件BOOT0而不是使用PB8-BOOT0来作为BOOT0的设置项,接下来把nBOOT0位设置为0就可以达到和使用PB8-BOOT0下拉到地一样的启动效果。* \# v! r% w& N

+ j# p9 e4 x, D$ b2 w$ u另外需要注意的地方是用户参考手册RM0440的这个位置:1 }. G: @3 p9 N2 F" n. m. e, a% }. c

! o. n) @; z! U. t3 w7 z
20191217225715278.png
' z) i: N9 b* g

+ q4 o5 `; K- o+ F以及
# ~  s# C) N+ c* l7 N- R5 T) T4 C% r  }3 l: t; q- X& E- G' K
20191217225833732.png

$ S3 q( ]. m" b# E  _5 Z. p( ^
8 ?! D+ [" \  I以上是涉及到软件设置BOOT0的一些相关寄存器及说明,接下来说怎么设置。' W% [; a8 `( C. j0 ?6 m
3 v4 ^* J. [+ ]* F0 S
有三个办法可以实现把BOOT0设置为软件BOOT0,这样PB8-BOOT0引脚就可以当作通用GPIO或者IIC或者其他用途来使用了。9 p! w* E# \0 @5 Z
9 U% Y/ c9 g. U# f9 O4 O: q
1、在程序中对Option Byte选项字的相关位进行编程,设置BOOT0为软件BOOT0,我看到HAL库中有相关操作,但是操作起来比较麻烦。
% {% e- ]! g2 S. Z
' `/ l6 o2 i' l' D$ Z% H" {2、使用STM32CubeProgrammer来操作,这个软件可以通过STLINK\UART\USB\OTA来连接目标板来实现修改的功能。
. ]5 C0 ]. [0 {+ i4 |) L$ k5 j: W3 Q# @
3、使用STM32 ST-LINK Utility来操作,这个只能通过STLINK来连接目标板,连接上之后,点击Target,然后点击Option Bytes之后,按照下图修改即可实现目的:% z, d7 c8 d. v) @/ l: x$ C0 E
; \* y8 _$ e3 a, x) G
20191217230551897.png
1 C; `: B1 B: w3 [
' u' ?1 t, @$ C0 b3 g! p9 X
) k# D! N  o3 O
赞 收藏 评论0 发布时间:2021-12-9 10:46

举报

0个回答

所属标签

相似技术帖

官网相关资源

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