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

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

[复制链接]
STMCU小助手 发布时间:2021-11-8 01:02
我们知道,STM32一般可以通过BOOT0和BOOT1的不同组合来设置启动方式。
3 {8 T) x1 @' K+ z: `1 }8 ^0 o& `$ D2 `' P
之前用过STM32G070CBT6,这个芯片的BOOT0是和PA14在一起的:
" E  @/ B) C! z
" M' U. l* K& ~! `" p
20191217230903730.png

8 v, f7 ?$ f# x, h  l% D2 ?$ t# u- q. x6 g
这个比较简单,我们知道PA13和PA14是芯片的SWD接口,我们只需要在这个引脚上下拉一个100K的电阻即可。这样,SWD功能和BOOT0的功能都兼顾到了,系统复位或者启动的时候,检测到PA14-BOOT0的电平为低电平,然后正常启动之后,这个引脚可以作为IO或者SWD功能使用。  I, J% T8 P$ h4 ~0 s
# X8 l/ _( O/ [/ u
但是对于新使用的STM32G431KBU6来说,上述的方法就行不通了,如下图:1 z# @2 O/ l3 t& @, O% _
7 O' e+ t4 Y. f
20191217224445381.png
4 {  o) d+ E2 M
7 N: q- b" q% W3 R3 U) o
从上面CUBE MX 的引脚图中也可以看到,31脚的名称叫做PB8-BOOT0,我在一个设计中把PB7和PB8当作硬件IIC使用,这就需要给这两个引脚外挂4.7K上拉电阻。而按照通常的启动方式来看,我们要从主flash启动,需要启动时BOOT0引脚的电平为地电平,而IIC总线外挂了4.7K上拉电阻,使得无论如何都不能让启动瞬间这个引脚电平为低电平。5 f7 T# {6 M; F2 K5 I

! R2 {8 u$ r  y8 g9 V; J0 U这时候不要怕,我们翻看手册DS12589,可以看到:% u& z  [6 O3 P, x' ^! I) N1 K

1 p: a+ j& t" y2 e$ V% f7 a
20191217224951559.png

1 h$ I! e1 y: c6 }+ ]4 N7 r  c0 o$ \! H, w3 E
也就是说BOOT0我们可以通过PB8-BOOT0这个引脚来设置,也可以通过Option Byte中的nBOOT0 option bit来设置,现在我们不能通过前者来设置,只能通过Option Byte中的nBOOT0 option bit来设置系统的启动方式了。
: O% h2 q2 V1 n2 ?
# {- T" t& ?$ Z0 o; z2 s我们在用户参考手册RM0440中可以看到:
. q+ Y9 M, A/ q8 t. ]; L3 y" @9 Q1 K" z! G1 Y+ B# l9 d' K
20191217225242981.png
- _' y  q# @) g  d4 v# K5 I4 N

7 E2 q2 u, R7 m! p) }需要通过把nSWBOOT0位设置为0来选择使用软件BOOT0而不是使用PB8-BOOT0来作为BOOT0的设置项,接下来把nBOOT0位设置为0就可以达到和使用PB8-BOOT0下拉到地一样的启动效果。
: a% ^# ?# C- k4 y
, X: {3 _$ p! @  j) J. s- |0 S/ ^另外需要注意的地方是用户参考手册RM0440的这个位置:, w! K' C: @6 i4 Z: g7 Y6 R2 [
( e! i) q2 e$ B( F1 s
20191217225715278.png
2 S" Q6 d! o; ~; |

( a0 S3 e* h# a以及& k7 u. i7 V+ A4 r
4 y' o7 i) d6 Y
20191217225833732.png
0 y; r" b4 ]9 _/ P
& J/ n% C( m& U1 M7 K
以上是涉及到软件设置BOOT0的一些相关寄存器及说明,接下来说怎么设置。# c; P. q; R" C1 g* n0 e/ Q/ D

! W( }+ B$ `2 q, }有三个办法可以实现把BOOT0设置为软件BOOT0,这样PB8-BOOT0引脚就可以当作通用GPIO或者IIC或者其他用途来使用了。0 Z+ P7 c9 y; `$ t4 S- J

3 Y& }7 Y$ c( A; L! a! T6 G) {1、在程序中对Option Byte选项字的相关位进行编程,设置BOOT0为软件BOOT0,我看到HAL库中有相关操作,但是操作起来比较麻烦。. [  O  b) e8 J" y- D

/ c5 c9 B- G% s( [: _2、使用STM32CubeProgrammer来操作,这个软件可以通过STLINK\UART\USB\OTA来连接目标板来实现修改的功能。
3 \# d- Q' B; |9 O4 o/ u/ o7 }7 x& C) c
3、使用STM32 ST-LINK Utility来操作,这个只能通过STLINK来连接目标板,连接上之后,点击Target,然后点击Option Bytes之后,按照下图修改即可实现目的:
1 O" j+ s- Q7 U; F( T( g+ ^) n" }+ e- t3 }! D- |" h
20191217230551897.png
0 b6 j7 m' g8 ~) M; d8 z2 w2 V
0 o/ X3 g) k' }' y0 }) o

- H" i9 S" u2 A- W9 k" t, A. `) A
% f2 r) b0 e0 Z5 \9 P! Q' ^
+ X9 u6 p; x# n0 a) P& ]
收藏 评论1 发布时间:2021-11-8 01:02

举报

1个回答
快乐寄存器 回答时间:前天 13:56

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

所属标签

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