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

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

[复制链接]
STMCU小助手 发布时间:2021-11-8 01:02
我们知道,STM32一般可以通过BOOT0和BOOT1的不同组合来设置启动方式。
8 g" j+ `. f8 [+ p
' `, V$ x4 H  @: ]/ n1 b- X. Q# ?之前用过STM32G070CBT6,这个芯片的BOOT0是和PA14在一起的:
4 |6 l8 B: I5 s! T+ v4 T9 f7 u
+ E0 Q# }  O7 E6 Q* v8 C0 h, a
20191217230903730.png

$ W' _- `* I6 A0 {4 k; N
7 H- T* b. ?% _! x( z这个比较简单,我们知道PA13和PA14是芯片的SWD接口,我们只需要在这个引脚上下拉一个100K的电阻即可。这样,SWD功能和BOOT0的功能都兼顾到了,系统复位或者启动的时候,检测到PA14-BOOT0的电平为低电平,然后正常启动之后,这个引脚可以作为IO或者SWD功能使用。
, i/ ]: @0 u$ m
5 f+ N6 O1 t8 A( z但是对于新使用的STM32G431KBU6来说,上述的方法就行不通了,如下图:
/ X! m3 O/ ^! ^( z5 D* _, z  C+ ]$ h5 l3 t0 s6 `: B8 e
20191217224445381.png

- _+ Z8 Q: M/ y- l% R( S$ _& ^  ~
从上面CUBE MX 的引脚图中也可以看到,31脚的名称叫做PB8-BOOT0,我在一个设计中把PB7和PB8当作硬件IIC使用,这就需要给这两个引脚外挂4.7K上拉电阻。而按照通常的启动方式来看,我们要从主flash启动,需要启动时BOOT0引脚的电平为地电平,而IIC总线外挂了4.7K上拉电阻,使得无论如何都不能让启动瞬间这个引脚电平为低电平。, \6 S! u- ^  O6 o$ m

  C* s1 s9 \& v$ D- E) Z# S这时候不要怕,我们翻看手册DS12589,可以看到:6 J7 k; w) F* ~; g+ t

  D9 H9 b5 o& Y( {
20191217224951559.png
( W3 `. c+ l: b& |
; x9 T- Q6 r5 F$ t8 _
也就是说BOOT0我们可以通过PB8-BOOT0这个引脚来设置,也可以通过Option Byte中的nBOOT0 option bit来设置,现在我们不能通过前者来设置,只能通过Option Byte中的nBOOT0 option bit来设置系统的启动方式了。
+ L7 r% I$ y( ]7 |3 w' d; S5 i
9 q$ Z" F) X6 j2 a. i! I我们在用户参考手册RM0440中可以看到:
4 b2 Q9 S- G5 Z' u) m+ s$ x8 V6 R4 y4 C6 S7 k6 X6 d" R) P% V" ]$ {
20191217225242981.png

$ R+ R' W" c3 J  k- v9 `- j$ v  t( C% G9 \6 x( N
需要通过把nSWBOOT0位设置为0来选择使用软件BOOT0而不是使用PB8-BOOT0来作为BOOT0的设置项,接下来把nBOOT0位设置为0就可以达到和使用PB8-BOOT0下拉到地一样的启动效果。/ N7 F0 r# y: R0 b9 z; s

8 ~, k: _' _9 R/ N  H另外需要注意的地方是用户参考手册RM0440的这个位置:
$ p( D- {3 u' H+ _5 _$ @& [" _2 C# X5 m' y
20191217225715278.png

1 g9 g3 G6 O' c  G2 A8 l. v- c
7 n- G2 r0 \" m& n- \以及
+ }9 C: |: C9 q$ H6 P& T% k; ]
5 I& x0 K. U+ v* n. x
20191217225833732.png

9 {- F$ j, r* F, J4 m. r# O( p  J4 o+ u- `6 N8 N. _
以上是涉及到软件设置BOOT0的一些相关寄存器及说明,接下来说怎么设置。' U% b, H. L/ {0 A3 b

) l$ D' F' D2 S2 O' Y% y有三个办法可以实现把BOOT0设置为软件BOOT0,这样PB8-BOOT0引脚就可以当作通用GPIO或者IIC或者其他用途来使用了。
) ^9 Y6 F4 p: j* V$ i  A: [1 f6 ?& o% @* v
1、在程序中对Option Byte选项字的相关位进行编程,设置BOOT0为软件BOOT0,我看到HAL库中有相关操作,但是操作起来比较麻烦。8 V$ r# h% S# f6 U7 `* f; Q

/ h0 q8 v/ Y5 n% [" y1 o7 g* \6 }2、使用STM32CubeProgrammer来操作,这个软件可以通过STLINK\UART\USB\OTA来连接目标板来实现修改的功能。& u3 T. s( q6 R( K4 L" D5 D( I

+ c6 D/ u" J1 o9 P3、使用STM32 ST-LINK Utility来操作,这个只能通过STLINK来连接目标板,连接上之后,点击Target,然后点击Option Bytes之后,按照下图修改即可实现目的:
$ W! P* C8 L4 B! x
" k, a. W5 P* [: {; U
20191217230551897.png

, S' B; @, C! }% B, m2 W/ |3 l' \- S- ]2 u2 [. y
& }: O9 J0 a, }+ d! w  t
; m/ n" U2 W5 u9 w( q' ]& ?

+ l% X2 B# Y  M
收藏 评论0 发布时间:2021-11-8 01:02

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版