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

STM32时钟控制RCC笔记

[复制链接]
STMCU小助手 发布时间:2023-3-9 14:18
一、复位* }" z( P, B# h7 R. }" c4 p
1.1、系统复位
' O" @7 P! p: ]( h
        除了时钟控制器的RCC_CSR寄存器中的复位标志位和备份区域中的寄存器(见图4)以外,系统复位将复位所有寄存器至它们的复位状态。
/ M" g% `% W/ t; O! K5 ]$ R" N0 Z: u: o$ W" \
1d12ee51793e4a2ea45cf057efc45f98.png
; a/ D$ J2 J. ^: Q# s0 A+ H
: z0 ]( l  B5 z% g3 p( Y, }$ K当以下事件中的一件发生时,产生一个系统复位:2 q8 y! A: O6 {) c! K
1.NRST引脚上的低电平(外部复位)
* T& ?3 ~5 o4 L+ Q2.窗口看门狗计数终止(WWDG复位)) T# {/ o8 G: |+ n) z  E, a
3.独立看门狗计数终止(IWDG复位)
) C! p4 W0 b0 h1 L4.软件复位(SW复位)* j6 S. x0 u& h5 \  V
5.低功耗管理复位/ x0 s' A) h5 h) d
可通过查看RCC_CSR控制状态寄存器中的复位状态标志位识别复位事件来源。
! Z& F" I+ e2 V' K* G: M" l) \

. _8 U; Q2 ^0 U& p* V. u1.2 电源复位$ Q# I8 v; p4 _0 x3 D
        电源复位将复位除了备份区域外的所有寄存器。当以下事件中之一发生时,产生电源复位:" P( W, J, l: V6 y2 P5 u' [# X2 e
1.上电/掉电复位(POR/PDR复位)
' a0 {: j6 @2 m! a% Q# d1 A2.从待机模式中返回
% x- W1 [1 q# Y4 W! E电源复位将复位除了备份区域外的所有寄存器。(见图4)3 }3 R/ I; e- I  \0 X7 \

2 r) K- @( E1 W0 V7 e) I' m# }) V

" V7 O& U$ H$ i# `( Q1.3备份域复位
- t1 w' F8 Q% K# C& D# [- j, ^" V        备份区域拥有两个专门的复位,它们只影响备份区域(见图4)。当以下事件中之一发生时,产生备份区域复位:6 U% ?" e' c' m6 Z
1.软件复位,备份区域复位可由设置备份域控制寄存器 (RCC_BDCR)(见6.3.9节)中的 BDRST位产生。
+ b; r! O( |, r2.在VDD和VBAT两者掉电的前提下,VDD或VBAT上电将引发备份区域复位
" b! ?4 L6 {3 H9 \( z
二、时钟
$ Z' z+ T$ B8 {, R
对于系统时钟输入配置与用途配置可以参考芯片数据手册的电气特性中工作条件:F1系列的& j! R  V; s' |# u) }8 X$ c2 `

$ E( r# i1 h$ L$ `2 p
d6f777d661334869a2b6be0a2dd31b9a.png
% ?# X$ J& p) ~3 g7 T0 J
5 r) }; o  \" B$ R" q# j7 Y* v5 E) {1 x2.1、时钟来源

' c, F; f0 x9 F, @; f三种不同的时钟源可被用来驱动系统时钟(SYSCLK):
$ Y+ l2 {. X4 g● HSI振荡器时钟(内部高速时钟),最高64MHz(F1系列,在PLL前经过了2分频)- w6 ?1 }7 v. q
● HSE振荡器时钟(外部高速时钟),最高可达72MHz(F1系列),F4是128MHz
9 R6 m8 m% r1 j$ _( g● PLL时钟(由HSI和HSE锁相环倍频得来)
; B# e9 L( S+ }8 j, v3 V" ^1 S
3 D: g+ e$ y6 G: h
5ab380c5542149d996c00b4092c4764c.png 3 c7 A  ~; @+ Y1 r; A, ]

* j2 n! Q# \- e0 R) q ● 40kHz低速内部RC,可以用于驱动独立看门狗和通过程序选择驱动RTC。RTC用于从停机/ 待机模式下自动唤醒系统。* ^- i0 E3 I) j, U- ?  t1 t
● 32.768kHz低速外部晶体也可用来通过程序选择驱动RTC(RTCCLK)
1 h, W5 o6 c$ a% R
2 o7 ^- ~3 Y/ q3 h
3b13ff27648d46a3a74085fcb7bd1d31.png / Y0 \3 t  I# Y8 o0 N0 Y

1 {1 I! o  P; z, F3 r! _# v8 s2.2、系统时钟的用途& F/ Z2 B) Y  @6 N- D8 J
5 p, _3 l* b, y! N7 g3 Z8 X
5f16e2b5f46f4febb50084bee7dfaee6.png / S4 B3 g8 h- _, z  r# l. b$ ]
- T" ^, ]6 p& ^, u; y" d  }, i6 K
2.3、为外部驱动提供时钟   
3 b7 J& v# ?/ F( C
可以将时钟作为输出配置到引脚上,再用示波器查看相关的波形。- G) e% z! i3 t- ]$ Z7 @4 |$ y. T

* M9 M9 h: \0 a: I& s7 S8 O
1e2e2c0e966e44d9aaf18aa1a60d0e73.png ) }# A6 p& c; \& O( ~

; J7 B0 k  o5 K# }4 i
af6f793476624565b4f9790ea1f2b156.png   Z( Y2 c& n# v( y& p7 r, g6 c8 X+ X% m
$ @, |0 F2 O6 n* E) [, Q8 z8 g
三、时钟配置(RCC)
8 s3 @3 e2 r! U% O        电路频率越高相应的电路中间态时间就越长,其功耗也会随之变高,可以通过控制任一个时钟源都可以被独立的启动或关闭,由此优化系统功耗。  W1 _5 b) p: }! ]2 {+ L4 |( A
* i0 [- {9 I8 c, K* Y
3.1、STM32CubeMX软件配置生成时钟配置代码: F4 S" k2 Y: R! ~
  1. void SystemClock_Config(void)- N& R+ _% e6 z7 R+ A& K. t
  2. {
    - ]% A" H% N9 S2 s9 H  u
  3.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};  s0 K- z. u& K" P
  4.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};% B* s0 z- T$ a; I, k/ d
  5. 8 y( f- R3 e$ ?1 Q
  6.   /** Initializes the RCC Oscillators according to the specified parameters
    " f% Q, l# J$ M2 ]1 `
  7.   * in the RCC_OscInitTypeDef structure.   通过RCC来配置系统时钟
    : f% Y3 d& S' M
  8.   */+ H$ J: Q$ w6 d8 \$ ^; k) z
  9.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
    " `1 V* G) \6 }% P$ L4 g9 |
  10.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;& o0 p9 A, P) I1 X# ^
  11.   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
    3 `) s7 Q% Q# u4 \: w; h
  12.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;3 t& \; C% m5 Y/ l" M
  13.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;, x! a7 V1 b' D* S
  14.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;/ W( M% K& \6 |; k: e
  15.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;( E1 q+ l9 Q7 O# n: s4 K! ^+ G
  16.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
    # x7 w% k5 J+ C
  17.   {. ^6 ~* H& u. v8 Z9 A
  18.     Error_Handler();5 @9 i  o+ `4 R( O6 X. R1 x
  19.   }. }7 e' M( \- P# Z
  20.   /** Initializes the CPU, AHB and APB buses clocks$ W# O( q& @; Y% B
  21.     配置总线时钟,通过系统时钟而来$ Z$ n2 y8 I( i; l! e
  22.   */' I6 s: z5 Q  c, @2 C
  23.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK2 S7 J8 ]- L' d/ W3 S/ }: F
  24.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    9 ?( e' i: c6 t) ~+ H+ I
  25.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    0 r( X" w- A% q% j. q+ |
  26.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
      \/ E" G+ G9 d% G/ T3 g
  27.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
    ( F6 d% W  _3 v! O8 ]
  28.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    ' x8 b6 z3 u8 ~8 `9 N2 R9 b
  29. - ]9 Q6 j) M: x! G
  30.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)5 @1 r' D, {2 G
  31.   {
    ! U7 _- V, ^# V
  32.     Error_Handler();6 Q5 H* l$ ]3 V
  33.   }
    4 p* a* X2 m  _& y
  34. }
复制代码
) A! r# R  H" ?+ L5 @; I

" @2 u6 q# i# @0 k3.2、正点原子提供了系统时钟配置文件(sys.h和sys.c文件)2 z( d0 C. R3 J% o
' p1 |" Q/ k' B: M8 U) C
860ec14f7aac48a7beb6c13b6769d834.png
' K' H( u4 O% j& B1 r) |$ u, {8 j& q
在配置时钟的时候可以查看相应芯片的数据手册( ?0 M& K6 P) \6 T& P
9 w) A% J- V$ s+ [4 A* i
0de2099e5005471891c4776542323b64.png & d4 V1 e2 _- k+ Y- I: s  R" v

+ V! x# \& h% j: `; W' K: B————————————————
" B% `9 D0 D1 x' }+ @9 ~版权声明:追逐者-桥 如有侵权请联系删除( h$ s8 [6 t9 T) ~7 \1 g
5 ?7 O+ Z* i! h. a9 E- ~3 j* c

& y: o: d  X- @2 y& a1 {7 z3 @0 \
赞 收藏 评论0 发布时间:2023-3-9 14:18

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版