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

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

[复制链接]
STMCU小助手 发布时间:2021-11-8 01:02
我们知道,STM32一般可以通过BOOT0和BOOT1的不同组合来设置启动方式。* [% F" s$ O2 F' ~0 m" l, N) r* T
1 m  F; d& C2 O: R" F2 I) \$ F/ Y$ P
之前用过STM32G070CBT6,这个芯片的BOOT0是和PA14在一起的:
" \5 K! n- M' _% ~2 `. e$ `) g! |$ n
20191217230903730.png
" @: a# q5 Y' w& y2 s' j
4 K$ C) O5 F. u0 z4 B
这个比较简单,我们知道PA13和PA14是芯片的SWD接口,我们只需要在这个引脚上下拉一个100K的电阻即可。这样,SWD功能和BOOT0的功能都兼顾到了,系统复位或者启动的时候,检测到PA14-BOOT0的电平为低电平,然后正常启动之后,这个引脚可以作为IO或者SWD功能使用。) b  w) w& o2 O7 t# `4 _
& v7 X4 _# b9 p* a6 ?
但是对于新使用的STM32G431KBU6来说,上述的方法就行不通了,如下图:
( t4 M  I8 @( J& v
3 F- V! j5 b! n8 f! @$ ?5 U; l
20191217224445381.png

% [' g1 E. L9 M# X5 a% {! B+ r" E* y# f9 k4 \  f5 F, o7 D* J
从上面CUBE MX 的引脚图中也可以看到,31脚的名称叫做PB8-BOOT0,我在一个设计中把PB7和PB8当作硬件IIC使用,这就需要给这两个引脚外挂4.7K上拉电阻。而按照通常的启动方式来看,我们要从主flash启动,需要启动时BOOT0引脚的电平为地电平,而IIC总线外挂了4.7K上拉电阻,使得无论如何都不能让启动瞬间这个引脚电平为低电平。0 @7 q; z& F; N3 t8 K7 O: |3 G4 B# p- w

' l+ t& A$ N6 P这时候不要怕,我们翻看手册DS12589,可以看到:
- r9 G, [* T" i/ K* ~4 b+ t9 e
+ I2 D% v6 n1 i% P; i
20191217224951559.png
  @- G/ n. m- O/ x& a  S3 K6 U

; R* h, f( [% D. ]) w% ^也就是说BOOT0我们可以通过PB8-BOOT0这个引脚来设置,也可以通过Option Byte中的nBOOT0 option bit来设置,现在我们不能通过前者来设置,只能通过Option Byte中的nBOOT0 option bit来设置系统的启动方式了。$ S. c. y  D( @) P; m0 Z) O

2 v4 B3 T1 ~. s4 [  ?" B9 f4 r我们在用户参考手册RM0440中可以看到:
+ Y* |+ S2 D5 s" e! j& I, D. F1 N5 p5 E' W5 r! Y! ?4 f
20191217225242981.png
) }* @; F& f& h5 j4 z! h, u/ O) ~
, w* w( s3 b  V, ^& J2 _
需要通过把nSWBOOT0位设置为0来选择使用软件BOOT0而不是使用PB8-BOOT0来作为BOOT0的设置项,接下来把nBOOT0位设置为0就可以达到和使用PB8-BOOT0下拉到地一样的启动效果。4 M- T( ]( B0 e+ y
# [2 X7 R4 _' N/ e
另外需要注意的地方是用户参考手册RM0440的这个位置:' K$ q9 I8 _1 \& \+ l- Y7 }) \

/ \( G( ?. a  I4 j9 c+ x8 w
20191217225715278.png

# R. V( x4 S9 z; y1 }) C
# x- ?- a0 |, F8 y以及
5 m, m! F' V" Y
9 q  L2 w: `# G3 M+ v* u
20191217225833732.png

* M/ Y5 V7 S: f& b. N, @1 p; Z- ~* I) X  {: g: r+ O
以上是涉及到软件设置BOOT0的一些相关寄存器及说明,接下来说怎么设置。* k5 I2 }) v$ d! @) F! P3 c1 H
7 n5 g+ F$ r% o; h- m  h
有三个办法可以实现把BOOT0设置为软件BOOT0,这样PB8-BOOT0引脚就可以当作通用GPIO或者IIC或者其他用途来使用了。$ d* h6 H# F; i9 U

" ?2 |9 [! t' C! f- z1、在程序中对Option Byte选项字的相关位进行编程,设置BOOT0为软件BOOT0,我看到HAL库中有相关操作,但是操作起来比较麻烦。
% q3 P5 U5 _  [* k2 Q( t$ q: B6 s* X) W; z0 {( |+ x
2、使用STM32CubeProgrammer来操作,这个软件可以通过STLINK\UART\USB\OTA来连接目标板来实现修改的功能。% r; ~+ w2 g4 m3 X  H+ t$ X
& i3 p2 K, N( s, z6 `8 g1 }+ X* ~1 N& A
3、使用STM32 ST-LINK Utility来操作,这个只能通过STLINK来连接目标板,连接上之后,点击Target,然后点击Option Bytes之后,按照下图修改即可实现目的:/ o3 w+ Z8 l) d" v) Q, i
( n' {0 _. N" \- j
20191217230551897.png

/ _  v& O5 [0 M! A- B8 V. o7 ?$ {9 H- P5 C

$ p7 ?' O) u0 c+ U5 o4 l' n7 h7 ?) s6 ^7 a) h6 q
8 b% O6 q! v# S" O8 O
收藏 评论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 手机版