一、复位
2 ?! i5 B: s: E) A1.1、系统复位8 y! p# l+ W3 }
除了时钟控制器的RCC_CSR寄存器中的复位标志位和备份区域中的寄存器(见图4)以外,系统复位将复位所有寄存器至它们的复位状态。
( g1 P- L H: A, @$ L. @, m# J$ b* d
8 k0 f3 ?' Q1 _, ?, V W
/ _" y7 Q% C8 P/ j
当以下事件中的一件发生时,产生一个系统复位:
' }6 H, Z. a8 b1.NRST引脚上的低电平(外部复位)% q) {; T8 T0 t( U( U$ u
2.窗口看门狗计数终止(WWDG复位)
: Z% K. x* E- _% d+ J' [3.独立看门狗计数终止(IWDG复位)/ P/ G. j1 {; H4 `, J" d, X! f
4.软件复位(SW复位)/ V2 s. X" Z( o* m) j, o
5.低功耗管理复位# M" ?/ V4 k0 _) e
可通过查看RCC_CSR控制状态寄存器中的复位状态标志位识别复位事件来源。
; ]" }4 \ y( ] ~* F& p9 o) H8 J* f/ t1 M. F' _* k
1 j. V8 A u0 i/ N( h% y- U% Z1.2 电源复位6 E- [7 R7 h( m5 H+ A3 x& u
电源复位将复位除了备份区域外的所有寄存器。当以下事件中之一发生时,产生电源复位:
( i4 r+ c# ^8 e0 @3 ~1.上电/掉电复位(POR/PDR复位)
5 _' h% r0 x6 s, l6 y3 D2.从待机模式中返回0 M& `* @+ b" I: A
电源复位将复位除了备份区域外的所有寄存器。(见图4)
; ?) P( S0 o" _- v3 S, y0 ~2 I$ ~
{9 [% ~* g' B' N' |' F+ F {
1.3备份域复位
. Q' X6 o6 G. d! Q4 e- a 备份区域拥有两个专门的复位,它们只影响备份区域(见图4)。当以下事件中之一发生时,产生备份区域复位:
! I8 ?! h8 l5 e' V2 Z+ q. M1.软件复位,备份区域复位可由设置备份域控制寄存器 (RCC_BDCR)(见6.3.9节)中的 BDRST位产生。
4 m9 d" f1 T. y* N# U D: r: b( ^; M2.在VDD和VBAT两者掉电的前提下,VDD或VBAT上电将引发备份区域复位
6 R2 |* o. U0 ?3 v% A; n5 g二、时钟- _& S( y- _5 X% s+ @! a) `
对于系统时钟输入配置与用途配置可以参考芯片数据手册的电气特性中工作条件:F1系列的
( _3 Z& S; Z8 u7 e ^% |0 J6 T% S! ^ M) T- m' l6 M) i8 m+ G
( U `' ?) z) f, [. s7 w) K# h+ `5 K0 Q0 L& v) ^
2.1、时钟来源% T* E* i- t* J' ]
三种不同的时钟源可被用来驱动系统时钟(SYSCLK): O- C( Z- Z" l, C$ ^0 M% y
● HSI振荡器时钟(内部高速时钟),最高64MHz(F1系列,在PLL前经过了2分频)( r% f/ N4 a; X( r
● HSE振荡器时钟(外部高速时钟),最高可达72MHz(F1系列),F4是128MHz
* _2 n5 M; E+ F3 B8 w● PLL时钟(由HSI和HSE锁相环倍频得来)
. a! d# [) R5 z4 S& e" Z5 o' Z- J1 k
- E, T$ r% @2 F) y
; c! K* x7 t) S$ M8 b: i. ~3 g0 l# ^9 Y! R. W5 Z0 a H, ~
● 40kHz低速内部RC,可以用于驱动独立看门狗和通过程序选择驱动RTC。RTC用于从停机/ 待机模式下自动唤醒系统。
& n. A% _) C) W* F● 32.768kHz低速外部晶体也可用来通过程序选择驱动RTC(RTCCLK)7 ~ b) i1 d4 w7 D% Q
# [/ g* Q( C% T; ^. O
3 y6 \- T( i) P, {9 b- l9 W) }$ j0 k6 [
2.2、系统时钟的用途
# y* s+ J4 L4 v2 M0 d2 {
1 @* ?9 M! Y3 s4 c1 s$ f
4 a/ v/ {3 {; h2 E
, K, Q+ P5 G/ i$ `1 S( n7 z. p 2.3、为外部驱动提供时钟 ' t. e* ]7 x$ ~
可以将时钟作为输出配置到引脚上,再用示波器查看相关的波形。
2 X- ~1 `' _6 [+ {, E
" S$ A1 a$ n7 P: q
. [4 a& x8 V3 R* ?4 ]* R
$ i% C" P7 ?+ o6 ~ ` _
* D4 }: l" ]- J) G2 p3 r
, s: Y- R0 K, n5 [/ P( ~三、时钟配置(RCC)
' _! a1 d5 h, |6 B: L, \ 电路频率越高相应的电路中间态时间就越长,其功耗也会随之变高,可以通过控制任一个时钟源都可以被独立的启动或关闭,由此优化系统功耗。
/ d6 D* E }' ?
" @( v- G+ }8 J: I3.1、STM32CubeMX软件配置生成时钟配置代码
5 `' f& k/ L. {- void SystemClock_Config(void)+ j& l B4 I8 V6 d6 L5 V3 X/ D7 c
- {
" ^- _0 I& ~7 w! }6 F8 | - RCC_OscInitTypeDef RCC_OscInitStruct = {0};# v) |+ F: b+ y% f9 d
- RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};) \2 f/ G% f9 u& j" B; ]
- % A s9 o% E; B
- /** Initializes the RCC Oscillators according to the specified parameters3 \7 N7 D3 U% W K* c
- * in the RCC_OscInitTypeDef structure. 通过RCC来配置系统时钟' v t$ a, A* |1 x
- */
* r, G+ H4 T. Z# S& j- c' z - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;* U+ o* W0 G; v/ N$ b2 L
- RCC_OscInitStruct.HSEState = RCC_HSE_ON;
! f- q/ _& v, Q3 D2 Y - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;) Z! N* i9 E5 ]8 t# @5 V- ~7 w1 M2 V
- RCC_OscInitStruct.HSIState = RCC_HSI_ON;
: [' }0 k. \$ I# [9 A8 b9 i - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;4 ?* ~' o% R- o4 [. a
- RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;& ]" t5 \2 b3 c* V9 t9 E
- RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
5 X9 A2 P( D- b3 L7 x - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
! ~8 A* l" B Q4 V - {
7 X8 x& L0 }3 I6 u; M# w) H. a" q - Error_Handler();0 ?' F& \% z7 [8 z
- }. P7 R& S; X) \# K+ g, s
- /** Initializes the CPU, AHB and APB buses clocks8 ~) Q) J1 N/ M2 m, T. b1 _* W
- 配置总线时钟,通过系统时钟而来
`0 n+ d8 h: v/ O - */
6 r2 D7 F. c$ _, c6 w3 L' w$ c - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
8 l- {( i/ }, o$ C c1 z1 c - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;# [* O2 q- f7 S. Z: E8 {0 y
- RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
2 W" \9 P+ w5 p/ ]3 c7 M a - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;0 p' X Q$ F5 u. I, l
- RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;1 h) |( h/ [+ S
- RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;9 ]1 K* V2 ^$ a) [9 E# F8 r
- 7 y! x. Y4 e; T/ T* Q
- if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)& X' Q% z- V6 T% B$ |" @3 L& D
- {2 }; X5 ]9 r; B3 a
- Error_Handler();3 S0 P2 a/ y' O
- }
. M( q4 ~0 R3 J" l3 I( Q - }
复制代码
3 k3 X2 A, d9 x' D4 I
# T O- \2 I0 u; u3.2、正点原子提供了系统时钟配置文件(sys.h和sys.c文件)2 ~6 N, y2 S6 r0 n W
; Y& H" O" b# J" H8 K/ K
+ M5 @" J- Y3 q4 z) g L4 ]$ ~' V" o
, s% E# ?7 ?( ~% s' p0 V+ p& |在配置时钟的时候可以查看相应芯片的数据手册
# V2 h" X3 |, `" e% Y2 E- R8 t7 V8 E5 _( G7 M
: Z/ w# _( c2 _4 {: A
, A) b4 L+ J2 }+ x
————————————————) m, S/ `( ?7 J
版权声明:追逐者-桥 如有侵权请联系删除: N8 U! e; ^& ?6 t7 s2 @
6 b! t8 y3 j @/ R! S; r
/ f* C5 Q% I+ t- o) A; j, H4 U
|