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

为什么要先开启STM32外设时钟?

[复制链接]
攻城狮Melo 发布时间:2023-4-2 15:38
今天给大家分享两点内容:% l9 V6 B  I6 W4 H/ \, C
一是,为什么我们要先开启STM32外设时钟;二是,关于STM32的 I/O 复用功能及什么时候开启AFIO时钟。

1 N6 U+ |1 f3 v; A
STM32为什么要先开启外设时钟?
相信很多朋友都曾遇到过这种坑,我最初学习STM32的时候同样也遇到过。下面,我就来说说为什么我们要先开启STM32外设模块时钟,再对其外设模块初始化配置?
+ P  `6 j) N$ Q; L
1、系统架构

不同类型的STM32,它的系统架构各有不同,但原理都类似,由多条主控总线和多条被控总线组成(请参看【参考手册】存储器和总线架构章节)。


, l& \! _) y& B, s( \6 E3 Z

以STM32F4为例:

八条主控总线:
— Cortex™-M4F 内核 I 总线、 D 总线和 S 总线— DMA1 存储器总线* ]; c) o  I/ E/ B' b
— DMA2 存储器总线% D8 b$ A% e  Y
— DMA2 外设总线. t& ]+ c; ]* g+ M# L3 c
— 以太网 DMA 总线, B! a" L3 i! F; o4 ^% d6 g7 i7 ~$ [
— USB OTG HS DMA 总线
) T3 N4 q' s& L
七条被控总线:+ n! C. ?' ^4 N7 D& R+ V( w1 W  D
— 内部 Flash ICode 总线
2 C7 u6 {% x6 }6 S— 内部 Flash DCode 总线
; g& t+ v. c6 p* u" Q' |6 @/ l: _  s— 主要内部 SRAM1 (112 KB)4 z2 h4 Q" L1 m
— 辅助内部 SRAM2 (16 KB)" A( O) T1 d0 D
— 辅助内部 SRAM3 (64 KB)(仅适用于 STM32F42xxx 和 STM32F43xxx 器件)
2 \! C' ~9 i0 \" L6 F% b& S— AHB1 外设(包括 AHB-APB 总线桥和 APB 外设)1 Z( i3 I. J0 t' g+ H( M
— AHB2 外设— FSMC
) f. u+ o! l, U' J: Z$ D' k7 \8 R
) P4 Z0 e7 Z2 S
微信图片_20230402153829.jpg
" n! }% K+ L* E$ o3 a& y4 n* `& H5 u/ L! W, E! t* X
借助总线矩阵,可以实现主控总线到被控总线的访问,这样即使在多个高速外设同时运行期间,系统也可以实现并发访问和高效运行。' ]0 ^/ z  i2 d: f. n

+ u* E) [; [# L0 v
2、关于AHB和APB总线
$ I9 b* D2 J1 n. l
AHB:Advanced High-performance Bus,即先进的高性能总线。7 T$ O) ~" G0 Z
APB:Advanced Peripheral Bus,即先进的外围(外设)总线。
5 Z% G" _! v1 m0 M- g5 K
上面说了系统总线的架构引伸出来的就是AHB和APB总线,那为什么要讲述AHB和APB总线呢?+ S2 F# m( r; T8 S
我们操作的外围设备一般都是位于AHB和APB总线上,而AHB可以引伸出AHB1、AHB2,甚至AHB3。同样APB也存在APB1、APB2等。
, f7 N0 R* |0 M5 g
比如,USART1外设位于APB1总线上,GPIOA位于AHB1高速总线上。
' P7 x2 t8 |: i" V0 @! G) A
请注意参考手册中“AHB/APB 总线桥”这一小节,有一条重要的内容:每次芯片复位后,所有外设时钟都被关闭( SRAM 和 Flash 接口除外)。使用外设前,必须在 RCC_AHBxENR 或 RCC_APBxENR 寄存器中使能其时钟. ^8 \  ]! U. f

' o- Q- i! R: e
3、STM32时钟控制/ z* F( Z, c/ H8 i; m9 t1 V

9 F. k. Y, `7 ~/ Q
微信图片_20230402153823.jpg 3 V$ U! J) m5 n; O, ~3 H

4 ~% w: z7 e2 l: `- T$ Q; ^& T
STM32的时钟控制模块因MCU芯片不同,各有差异,但原理都类似,功能也相当丰富。主要的目的就是给相对独立的外设模块提供时钟,也是为了降低整个芯片的功能。" v' A8 U6 j  P3 J

# |8 t. k; }3 {9 B& N% W4 E
降低功耗是主要原因,还有一个原因,就是为了兼容不同速度的设备,有些高速,有些低速,如果都用高速时钟,势必造成浪费。
8 O8 o8 h! t+ O/ [! U: ?1 O

: ?8 x& {. t: Y: s
RCC给外设提供时钟是一个主要目的,那么为什么要提供时钟呢? 原因在于外围设备的寄存器需要时钟才能工作。你可以把外设当做一个设备,而这个设备需要给它提供电源(时钟)才能工作。; m3 k; H# ?$ M9 L9 A  {
  a+ S1 C  Z  E7 o5 T3 y
你在STM32参考手册的“RCC”章节可能会看到这么一句话:当外设时钟没有启用时,软件不能读出外设寄存器的数值,返回的数值始终是0x07 P$ _3 s5 }" N1 n4 q) ~. T

, b1 F( ~% ^# a/ V+ E
4、总结
3 x+ p5 C! U! P  K0 z
看到这里,相信聪明的你已经明白了为什么我们要先开启STM32外设模块时钟,再配置其外设模块了。
' B: u( K4 J* B. r
简单来说,就是操作外设是通过外设总线来实现,只有外设总线有时钟了才能操作外设。0 S8 E) k6 r8 a! n5 P/ f
坑:+ ]. T  X$ ]" I8 K
A.先使能外设时钟,再对其进行配置
/ y3 L* q) Z; s! i4 s! S
. K: s' X4 @; A9 c/ i1 _
微信图片_20230402153817.jpg : j% j0 w/ v  x! ^0 Q
& E4 W1 T+ {$ g( T& ]
B.时钟配置需对应总线" _- L  p$ w/ {6 X! h3 P1 O3 W
% Q* A& p3 f; R/ @
微信图片_20230402153812.png
, W% T! k4 c' }+ }
* j5 I" P9 s3 }
这种基于标准外设库的低级错误,相信肯定有不少人遇到过,希望提高警惕。; B7 u7 D7 b$ f3 P
1 v$ l8 r$ P6 n. y' B
AFIO复用时钟
有朋友问:“什么时候开启AFIO时钟”。写了上面章节,就顺便再讲述一下关于STM32的I/O复用功能及什么时候开启AFIO时钟。
7 ]+ ^6 K# e6 F6 d% h3 L% \' B
1、什么是I/O 复用功能?

简单来说,就是把普通I/O用作其它的功能。如:将PA9引脚用作USART1的Tx引脚,那么我们就把这个Tx引脚称为PA9的复用功能。


  W3 ^' e8 \) ]3 l7 o& D( k3 }

打开数据手册,会发现类似如下的列表:


7 l# r9 i# N7 F& `

微信图片_20230402153800.jpg


. r( _: K, R: c4 g4 T
2、什么时候开启AFIO时钟?


: j/ ]. q$ w! Z) ~

为了优化芯片引脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上。设置复用重映射和调试I/O配置寄存器实现引脚的重新映射。这时,复用功能不再映射到它们的原始分配上,而是映射到“重定义功能”上(见上图)。


+ Y7 d  X* x% \. U' [: w, m! N) v

这种将引脚重定义到其它引脚上的功能在几乎所有STM32芯片中都有这个功能,但是实现的方法可能有所不同,其中STM32F1就是通过事件控制的方式将特定功能引脚连接到对应PORT和PIN上。


0 z; ]$ c  ?+ x

简单来说,如果需要使用重定义功能,那么就需要开启AFIO时钟。% [- d' V; B( b' g; r0 h% _


# r- x2 g& ]3 }1 L, d

最后,如果你觉得你的程序可能是因为时钟配置的问题,不妨上电第一步使能所有时钟试试。6 j  L1 w1 J; U$ `7 b! ?
+ y4 F, h! m, L* J8 o0 |0 k

, \0 a3 N! x/ W
7 ?% k3 }. L& k( [( n$ d
/ N2 m2 {2 x/ O3 r8 Z9 Q" X
转载自:嵌入式微处理器8 q- x5 X2 G; |! _9 Z. A# M' g
如有侵权请联系删除/ M% o! L, _, [8 b1 @
. {- ?  k1 O0 s
9 {' }# c0 T5 v: m9 e! c* O5 z
收藏 评论1 发布时间:2023-4-2 15:38

举报

1个回答
这辈子不打工 回答时间:2024-12-16 19:58:06

我以前以为只要启用复用(AFIO)功能就需要开启AFIO时钟,今天发现定时器初始化,不启用AFIO也能正常使用,搞得我有点困惑.

现在明白了,整篇文章的重点是"简单来说,如果需要使用重定义功能,那么就需要开启AFIO时钟。"

所属标签

相似分享

官网相关资源

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