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

【经验分享】stm32时钟配置“隐藏”了哪些坑?

[复制链接]
STMCU小助手 发布时间:2022-1-10 23:00
今天分享以下两点内容:( G1 H) Z2 R0 A, I( ?
1.为什么我们要先开启STM32外设模块时钟& r0 t8 @: |, E- J. }; `
2.关于STM32的 I/O 复用功能及什么时候开启AFIO时钟;
: M' H1 _% @8 m9 h) o. r1为什么我们要先开启STM32外设时钟! _4 b! i6 P! ]4 b
讲述本节内容之前先说一个案例:( ^& |3 o' F8 X+ t8 y, n; B
前段时间,有一个朋友为配置EXti的代码折腾了一天,最终没有结果。于是问了我这样一个问题:“你用过STM32F051C8T6的外部中断吗,就是GPIO管脚做中断,我这边就是进不了中断”。
2 t* B% @. E2 l; f/ b& z( f然后他把基于标准外设库、寄存器写的代码都给我发过来了。我仔细看了又看,没发现有什么毛病啊。(但是,代码是截图分来给我发过来的)。; ]3 U0 w, s$ L. K* N; p3 K( s- I7 _
于是,我将之前配置IO外部中断的代码,按照他(PB2)的要求,写成一个“EXTI配置”函数发给他,他直接拷贝过去,成功了。
9 q7 G9 U/ M4 ?- r3 a于是,他仔细对比了代码,终于发现了问题的原因,配置的顺序不对,使能时钟不是在最开始。
" u- C7 N6 D4 p- N我想许多朋友都曾遇到过这种坑,我最初学习STM32的时候同样也遇到过,下面我就来说说为什么我们要先开启STM32外设模块时钟,再对其外设模块初始化配置?
/ D" j/ z9 K2 Y9 t4 s% F" ]1.系统架构+ @7 e, r( O5 g. i/ ~9 }5 ~( L" W' x
不同类型的STM32,它的系统架构各有不同,但原理都类似,由多条主控总线和多条被控总线组成(请参看【参考手册】存储器和总线架构章节)。) \$ a' L" ]+ B- e: Z
如STM32F4:4 J+ [% [* g% {, D( D7 y! Z- h
● 八条主控总线:
" }$ p& ^8 y2 L3 z3 ]/ Y* @5 j. p— Cortex-M4F 内核 I 总线、 D 总线和 S 总线% X# M/ ?$ h  l0 }/ ^( v/ q0 B! c
— DMA1 存储器总线& r6 ?. Z5 ^; P
— DMA2 存储器总线4 y8 s, c/ O; ?7 V
— DMA2 外设总线9 G  t, Z8 d2 O/ J: I" S3 G0 k
— 以太网 DMA 总线, |- D" m. S5 u+ W8 {
— USB OTG HS DMA 总线
9 Z/ i- E6 W* U; j/ x● 七条被控总线:( q0 y( f2 ?1 Z4 }& [: O: o% y
— 内部 Flash ICode 总线0 o5 q: O" }0 e: D9 x
— 内部 Flash DCode 总线0 @9 z" ?; s) r) f. |
— 主要内部 SRAM1 (112 KB); h$ G% V9 H, R7 `8 W. ]6 T4 Q' A) i
— 辅助内部 SRAM2 (16 KB)
; u& E9 \0 |2 ^— 辅助内部 SRAM3 (64 KB)(仅适用于 STM32F42xxx 和 STM32F43xxx 器件)
2 G. N/ n- M8 m— AHB1 外设(包括 AHB-APB 总线桥和 APB 外设)
$ p1 ^* |3 p( T  g# Z* X  \! q— AHB2 外设6 X# k' t+ @) \% P( j; o
— FSMC
9 l0 z5 L2 P) ?) \( T
借助总线矩阵,可以实现主控总线到被控总线的访问,这样即使在多个高速外设同时运行期间,系统也可以实现并发访问和高效运行。
9 [% X  {1 q8 x, q2.关于AHB和APB总线
; {0 q6 T2 ~4 e; I9 r4 }AHB:Advanced High-peRFormance Bus,即先进的高性能总线.2 J3 _& k$ M; E4 N& p/ g% H
APB:Advanced Peripheral Bus,即先进的外围(外设)总线.& U( L4 A; G9 K; L. K! ]
上面说了系统总线的架构引伸出来的就是AHB和APB总线,那为什么要讲述AHB和APB总线呢?+ ~" k, J) ]9 Q' J) P5 p# ?
我们操作的外围设备一般都是位于AHB和APB总线上,而AHB可以引伸出AHB1、AHB2,甚至AHB3。同样APB也存在APB1、APB2等。. ~: u- m  u- x0 ]$ B: i1 h
如:USART1外设位于APB1总线上,GPIOA位于AHB1高速总线上。5 t7 L1 h. O% Q' y% Z$ o5 d7 i
请注意参考手册中“AHB/APB 总线桥”这一小节,有一条重要的内容:每次芯片复位后,所有外设时钟都被关闭( SRAM 和 Flash 接口除外)。使用外设前,必须在 RCC_AHBxENR 或 RCC_APBxENR 寄存器中使能其时钟。$ V" X" S: t! g2 y
3.STM32时钟控制
) P( u, }- Z* b# r# w! h) p& E请参看STM32参考手册关于【复位与时钟控制RCC】章节。! b5 F( O2 t8 S7 _: N
STM32的时钟控制模块因MCU芯片不同,各有差异,但原理都类似,功能也相当丰富。主要的目的就是给相对独立的外设模块提供时钟,也是为了降低整个芯片的功能。
, {+ c1 C' V! W8 B+ P: O降低功耗是主要原因,还有一个原因,就是为了兼容不同速度的设备,有些高速,有些低速,如果都用高速时钟,势必造成浪费。
& [6 L( \; |. P/ ^RCC给外设提供时钟是一个主要目的,那么为什么要提供时钟呢? 原因在于外围设备的寄存器需要时钟才能工作。你可以把外设当做一个设备,而这个设备需要给它提供电源(时钟)才能工作。
& {- Y# ~; C4 P" j: s& X你在STM32参考手册的“RCC”章节可能会看到这么一句话:当外设时钟没有启用时,软件不能读出外设寄存器的数值,返回的数值始终是0x0。& J9 [! Y, w5 w6 C
4.总结4 q6 D2 Y! c* c. y
看到这里相信聪明的你其中已经明白为什么我们要先开启STM32外设模块时钟,再配置其外设模块了。" o6 k! t1 d/ n
简单来说:操作外设是通过外设总线来实现,只有外设总线有时钟了才能操作外设。1 ?6 A2 Y4 X% T1 k
坑:. Q8 T2 h. Q2 A% r" q9 j3 e+ G
A.先使能外设时钟,再对其进行配置
" x6 q5 {& y, b/ A5 S8 Z0 B
B.时钟配置需对应总线
) }. @! G2 T) M3 o# p1 Q
这种基于标准外设库的低级错误,相信肯定有不少人遇到过,希望提高警惕。8 y9 ~; t; I6 w$ q2 O" p3 Y
2关于STM32的I/O复用功能及什么时候开启AFIO时钟
! T" I# T" T* ~) W# ^* E2 W前面有朋友问:“什么时候开启AFIO时钟”。写了上面章节,就顺便再讲述一下关于STM32的I/O复用功能及什么时候开启AFIO时钟。
, d( {# H3 z8 l& ?  B3 p1.什么是I/O 复用功能?
* v- j1 P! j+ U" d简单来说就是把普通I/O用作其它的功能。如:将PA9引脚用作USART1的Tx引脚,那么我们就把这个Tx引脚称为PA9的复用功能。- }( A3 {0 H7 K/ w  u2 A& Z" f
打开数据手册,会发现类似如下的列表:
1 G. T7 G# U. }4 U
2.什么时候开启AFIO时钟
$ P* E- ~( r5 L# ]. p3 B' v- l) u为了优化芯片引脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上。设置复用重映射和调试I/O配置寄存器实现引脚的重新映射。这时,复用功能不再映射到它们的原始分配上,而是映射到“重定义功能”上(见上图)。5 P6 t, n. h5 H* P
这种将引脚重定义到其它引脚上的功能在几乎所有STM32芯片中都有这个功能,但是实现的方法可能有所不同,其中STM32F1就是通过事件控制的方式将特定功能引脚连接到对应PORT和PIN上。
4 I5 }" T) b! Q: g: J" }简单来说,如果需要使用重定义功能,那么就需要开启AFIO时钟。
. D1 v6 I: R# O6 D2 c9 T  c最后,如果你觉得你的程序可能是因为时钟配置的问题,不妨上电第一步使能所有时钟试试。, t' w% Z+ L" V; c+ ]& H
推荐阅读:0 {- E% H$ s4 U& L
1.STM32标准外设库SPL转换成Cube LL4 Z& X& }; N1 P# W/ |
2.利用STM32 ST-LINK Utility查看内核运行状态,助你判断程序是否跑飞1 B1 d; J* Y" [) {* e
收藏 评论0 发布时间:2022-1-10 23:00

举报

0个回答

所属标签

相似分享

官网相关资源

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