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

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

[复制链接]
STMCU小助手 发布时间:2021-12-9 10:46
我们知道,STM32一般可以通过BOOT0和BOOT1的不同组合来设置启动方式。
% R: u8 ]' L/ N- u/ D: w) z4 J5 t! h4 Q
之前用过STM32G070CBT6,这个芯片的BOOT0是和PA14在一起的:
/ Q- L6 U7 X7 p  z' l4 V7 l+ [6 b: Y- T' C) ^5 x+ y2 f
20191217230903730.png

9 M% `6 }, L8 C8 n$ c- \1 W" s) T8 t0 H. \8 d7 m9 z/ `! _# N
这个比较简单,我们知道PA13和PA14是芯片的SWD接口,我们只需要在这个引脚上下拉一个100K的电阻即可。这样,SWD功能和BOOT0的功能都兼顾到了,系统复位或者启动的时候,检测到PA14-BOOT0的电平为低电平,然后正常启动之后,这个引脚可以作为IO或者SWD功能使用。
  t* C+ K# q* U" o6 x' z4 X- ^6 ^
$ @4 m4 L  u. i8 _3 A但是对于新使用的STM32G431KBU6来说,上述的方法就行不通了,如下图:
: H: k* d# f8 V$ i& k- z% h% A4 k- }7 Y( F, q* g! x
20191217224445381.png
7 t+ ]- T% |% G7 v' R2 G6 |
8 |* G. G, u7 h) t% g" r
从上面CUBE MX 的引脚图中也可以看到,31脚的名称叫做PB8-BOOT0,我在一个设计中把PB7和PB8当作硬件IIC使用,这就需要给这两个引脚外挂4.7K上拉电阻。而按照通常的启动方式来看,我们要从主flash启动,需要启动时BOOT0引脚的电平为地电平,而IIC总线外挂了4.7K上拉电阻,使得无论如何都不能让启动瞬间这个引脚电平为低电平。
' o% [' p: b6 G$ x9 `# W- O6 C* i5 ?0 F" A+ @' i2 O" Q
这时候不要怕,我们翻看手册DS12589,可以看到:
4 d1 B8 l' j; [, r  s" K* a7 j7 p8 }9 `9 N& ^# R( T' I, B% r
20191217224951559.png
3 Q7 v7 ^( t( i, \3 N7 X! _

9 f! p) U3 k1 x& F6 z, U3 A& a也就是说BOOT0我们可以通过PB8-BOOT0这个引脚来设置,也可以通过Option Byte中的nBOOT0 option bit来设置,现在我们不能通过前者来设置,只能通过Option Byte中的nBOOT0 option bit来设置系统的启动方式了。
) O# K, `8 d+ U) s. B6 \
  {, k/ t. \! M3 n1 F我们在用户参考手册RM0440中可以看到:  |- A/ j+ \; i: H1 O  ~" ^
- z# R4 Z% L& h! Q6 i# d% D* B% z6 W
20191217225242981.png
5 i# {( j6 ?6 X4 O7 |

! z5 Q) c& ?& @+ R- W需要通过把nSWBOOT0位设置为0来选择使用软件BOOT0而不是使用PB8-BOOT0来作为BOOT0的设置项,接下来把nBOOT0位设置为0就可以达到和使用PB8-BOOT0下拉到地一样的启动效果。
' ?' j, `: H" z5 `/ Y4 w% z. h, D, e4 w  H
另外需要注意的地方是用户参考手册RM0440的这个位置:& t' C. N9 ~2 \/ H" B, B6 X
& U4 k( \& F2 Y6 l( r
20191217225715278.png
3 ?. X% c  n3 r3 }2 I

: ]9 a) L4 g( k5 D% F以及
1 v. m7 a$ Q% B& o: A' m* p% J0 }1 S6 p0 z$ D
20191217225833732.png

% K" ?% f# f+ }2 g' v3 l
/ c( X! T- O( }0 A以上是涉及到软件设置BOOT0的一些相关寄存器及说明,接下来说怎么设置。0 a/ c( f( M* j( q& A: M( [( L

& x- {$ [1 ^# p) j, u) E, ~2 [有三个办法可以实现把BOOT0设置为软件BOOT0,这样PB8-BOOT0引脚就可以当作通用GPIO或者IIC或者其他用途来使用了。. t+ v* B- Y8 f/ v! R6 L
% V- w& K8 s. ]5 a7 t/ W& K
1、在程序中对Option Byte选项字的相关位进行编程,设置BOOT0为软件BOOT0,我看到HAL库中有相关操作,但是操作起来比较麻烦。8 R' E5 H4 j+ d( b# R
# t9 E: Y2 p1 p8 Q
2、使用STM32CubeProgrammer来操作,这个软件可以通过STLINK\UART\USB\OTA来连接目标板来实现修改的功能。
. M" t0 k2 o3 a/ d% [. O& }; T8 I" v  z9 p  ]9 F& J9 d
3、使用STM32 ST-LINK Utility来操作,这个只能通过STLINK来连接目标板,连接上之后,点击Target,然后点击Option Bytes之后,按照下图修改即可实现目的:: }6 W9 a* ]" ]1 g! U0 p  Q$ W$ S
1 m  |# ]- E, j$ h. v) ?
20191217230551897.png
& ?% O( d# t) F! T2 N" R9 z
! w* Z' H" p6 `' l: K- J
% Z+ ]0 I8 L- ^8 _5 O
收藏 评论0 发布时间:2021-12-9 10:46

举报

0个回答

所属标签

相似分享

官网相关资源

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