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

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

[复制链接]
STMCU小助手 发布时间:2021-12-9 10:46
我们知道,STM32一般可以通过BOOT0和BOOT1的不同组合来设置启动方式。
% c( x% c4 w# D8 U1 Y+ m; u3 }5 B: S6 z. @2 M/ c8 z
之前用过STM32G070CBT6,这个芯片的BOOT0是和PA14在一起的:
: v' V+ ~/ b- Z% m2 y
- ]3 D5 I+ I  Z' y1 O9 ~
20191217230903730.png
0 W( _/ y$ c4 P) e2 a8 q
% b% ^9 L9 |+ A: r( d. b
这个比较简单,我们知道PA13和PA14是芯片的SWD接口,我们只需要在这个引脚上下拉一个100K的电阻即可。这样,SWD功能和BOOT0的功能都兼顾到了,系统复位或者启动的时候,检测到PA14-BOOT0的电平为低电平,然后正常启动之后,这个引脚可以作为IO或者SWD功能使用。
, o" u0 P9 Q/ I  @  `
. `+ i" p# q9 [) P; [! y但是对于新使用的STM32G431KBU6来说,上述的方法就行不通了,如下图:4 S9 u+ @+ }5 U, n6 |
  k3 r' p) O$ C% t+ a* D1 _% o
20191217224445381.png
( y/ D, f2 L7 }6 j  V7 N0 }
3 C3 J9 A5 m) j1 ~* o) Y
从上面CUBE MX 的引脚图中也可以看到,31脚的名称叫做PB8-BOOT0,我在一个设计中把PB7和PB8当作硬件IIC使用,这就需要给这两个引脚外挂4.7K上拉电阻。而按照通常的启动方式来看,我们要从主flash启动,需要启动时BOOT0引脚的电平为地电平,而IIC总线外挂了4.7K上拉电阻,使得无论如何都不能让启动瞬间这个引脚电平为低电平。
" V2 y% h+ [( o3 B" r2 q1 W3 z0 v6 r6 z: L
这时候不要怕,我们翻看手册DS12589,可以看到:
8 @/ V, c7 m  C  |& N! C9 E
9 _  T7 q3 s. h
20191217224951559.png

# {2 j  j7 i9 l7 i: l
8 b# |0 @0 X9 W# X7 Q也就是说BOOT0我们可以通过PB8-BOOT0这个引脚来设置,也可以通过Option Byte中的nBOOT0 option bit来设置,现在我们不能通过前者来设置,只能通过Option Byte中的nBOOT0 option bit来设置系统的启动方式了。. F$ E% G9 i5 z+ O9 `

0 {/ i% l9 H2 c我们在用户参考手册RM0440中可以看到:, N' F& z$ j, N* L- j- w( Y
4 j: |4 c! f6 e1 A1 z1 E5 z
20191217225242981.png
$ Q0 `2 f' [* H# S8 g

5 j9 n: ^9 p8 P5 a需要通过把nSWBOOT0位设置为0来选择使用软件BOOT0而不是使用PB8-BOOT0来作为BOOT0的设置项,接下来把nBOOT0位设置为0就可以达到和使用PB8-BOOT0下拉到地一样的启动效果。
$ `* |+ q* |* K- m- u1 [7 ]7 D; e/ }: p
另外需要注意的地方是用户参考手册RM0440的这个位置:7 K0 a! r* U. B& A8 H' r

8 n; j4 ]! e3 i: d* L/ F* D: _! T* ^
20191217225715278.png
; `1 Y, s9 [" J- Z: @

# E* ?- Q" E7 B- Y以及
- a0 U6 Q; f. M" c/ L9 v6 F/ R6 d3 m+ k* h3 q
20191217225833732.png

! x, V3 N1 {! |/ n4 s7 N* z: k0 y4 j& [, N0 o
以上是涉及到软件设置BOOT0的一些相关寄存器及说明,接下来说怎么设置。+ A6 c# |, u% E

' L* ]& d: h( F: S有三个办法可以实现把BOOT0设置为软件BOOT0,这样PB8-BOOT0引脚就可以当作通用GPIO或者IIC或者其他用途来使用了。
) l& z0 r/ w5 J$ `1 [1 }: \' u% u" [3 l# g$ D4 }' h
1、在程序中对Option Byte选项字的相关位进行编程,设置BOOT0为软件BOOT0,我看到HAL库中有相关操作,但是操作起来比较麻烦。$ F: |& i' @* T2 |

& Q! d! Q, C; P- \* W2、使用STM32CubeProgrammer来操作,这个软件可以通过STLINK\UART\USB\OTA来连接目标板来实现修改的功能。
2 A& k2 d% n9 g" s! Z) J" t3 m0 E: g' W% q+ R' q& @
3、使用STM32 ST-LINK Utility来操作,这个只能通过STLINK来连接目标板,连接上之后,点击Target,然后点击Option Bytes之后,按照下图修改即可实现目的:: X* W/ Q/ q% _- R0 Q; w- b* j
# ~4 U& U( S) g- ], n+ y8 z+ @
20191217230551897.png
- w+ b) B' l0 U: N' }
( ?  a( B; a/ \& [

' o0 [! A4 t6 X8 P# e
收藏 评论0 发布时间:2021-12-9 10:46

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版