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

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

[复制链接]
STMCU小助手 发布时间:2021-11-8 01:02
我们知道,STM32一般可以通过BOOT0和BOOT1的不同组合来设置启动方式。
2 |, h5 F; D- f& |4 r/ J- F# F5 r( |% i+ F/ |& g+ C5 f& j" g) H. m
之前用过STM32G070CBT6,这个芯片的BOOT0是和PA14在一起的:
5 Y: A9 ?+ o1 v8 W% d, \$ z# p7 f3 f  y/ h1 _6 N
20191217230903730.png
5 e0 m2 p& t; r$ J+ k# ~* t0 K

" j) K, A5 V% Q: g% a3 Y这个比较简单,我们知道PA13和PA14是芯片的SWD接口,我们只需要在这个引脚上下拉一个100K的电阻即可。这样,SWD功能和BOOT0的功能都兼顾到了,系统复位或者启动的时候,检测到PA14-BOOT0的电平为低电平,然后正常启动之后,这个引脚可以作为IO或者SWD功能使用。4 B6 G' H: n% _' N; `

* v) F% y8 z3 c但是对于新使用的STM32G431KBU6来说,上述的方法就行不通了,如下图:' C$ s  p) V3 ^
+ i0 l7 h! c$ L# H
20191217224445381.png

. K/ v  C) I6 U2 _; A2 l5 G% C( B! c$ u4 \2 \
从上面CUBE MX 的引脚图中也可以看到,31脚的名称叫做PB8-BOOT0,我在一个设计中把PB7和PB8当作硬件IIC使用,这就需要给这两个引脚外挂4.7K上拉电阻。而按照通常的启动方式来看,我们要从主flash启动,需要启动时BOOT0引脚的电平为地电平,而IIC总线外挂了4.7K上拉电阻,使得无论如何都不能让启动瞬间这个引脚电平为低电平。
; N5 @9 I% U' B" Q* P$ x2 ?: n" E/ Y9 V* e* i; n% Y
这时候不要怕,我们翻看手册DS12589,可以看到:
% N/ C- E% k; u
" s1 d' n) m% U5 J: r
20191217224951559.png

/ E2 n3 E9 w" }4 }5 k, a
8 R2 v6 |0 M5 L+ S8 M. V; {! ]也就是说BOOT0我们可以通过PB8-BOOT0这个引脚来设置,也可以通过Option Byte中的nBOOT0 option bit来设置,现在我们不能通过前者来设置,只能通过Option Byte中的nBOOT0 option bit来设置系统的启动方式了。
: ?0 \: t$ y: j& {* M& w4 b
2 q5 x: G4 B" C* W0 Q2 v) r我们在用户参考手册RM0440中可以看到:
8 l( [7 Y+ A1 j2 F: B8 Q+ W! P& b4 u  L
20191217225242981.png
3 l( Y  s3 u. y" Z: Y

3 |* D$ L( X0 ]% ~3 @需要通过把nSWBOOT0位设置为0来选择使用软件BOOT0而不是使用PB8-BOOT0来作为BOOT0的设置项,接下来把nBOOT0位设置为0就可以达到和使用PB8-BOOT0下拉到地一样的启动效果。: C+ [& t& L' f5 I6 n5 s8 ^0 {1 z% \

9 v" r; g- |$ ?- A6 Z  E另外需要注意的地方是用户参考手册RM0440的这个位置:
. i; f/ ~3 x6 g! y9 _0 H, g1 y; u7 }' b7 p- ~+ F8 J# D+ ~
20191217225715278.png
, E/ R4 `- Y! O  M- N
6 [4 c- Z+ L& {+ E6 V2 f
以及3 n' J8 w5 ?% W9 f( ?

! h5 a' j& H0 }7 K7 p
20191217225833732.png
4 g) A8 H  w2 L+ N
  I. x$ v) x$ I" d+ C6 _
以上是涉及到软件设置BOOT0的一些相关寄存器及说明,接下来说怎么设置。+ K) k: {  W: b5 ^

% s. }  |8 O8 `( \8 h有三个办法可以实现把BOOT0设置为软件BOOT0,这样PB8-BOOT0引脚就可以当作通用GPIO或者IIC或者其他用途来使用了。
3 u$ |7 N6 ^/ f9 v/ ]- Y; x4 ^9 M$ v$ `5 l+ w
1、在程序中对Option Byte选项字的相关位进行编程,设置BOOT0为软件BOOT0,我看到HAL库中有相关操作,但是操作起来比较麻烦。- V9 ]* C5 x* R# s# q

0 m% D; g' H1 y$ N8 C! E' q2、使用STM32CubeProgrammer来操作,这个软件可以通过STLINK\UART\USB\OTA来连接目标板来实现修改的功能。, Y+ K/ S. O9 A2 e: X% F. r" i
* c( Y% z* Y1 u
3、使用STM32 ST-LINK Utility来操作,这个只能通过STLINK来连接目标板,连接上之后,点击Target,然后点击Option Bytes之后,按照下图修改即可实现目的:
/ u, W( }+ b' c  D2 m8 m
. v6 w! c( ], I  l, ?
20191217230551897.png

% Z) q- r$ }# q
- b" y1 L" e1 P' ~: t/ z6 y( U% A
9 N1 z3 s( X# ^6 v0 P- ~; F1 y# q* a5 f* J* P- ]

2 G4 U2 Z9 O0 B9 P5 N$ }
赞 收藏 评论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 手机版