
STM32f1时钟系统* J" M g6 i( \3 @5 y0 `8 S6 h7 {7 w 一、祭出STM32F1的官方时钟框图; ]7 M* P, x/ t1 M0 t2 H( E' j $ N5 {( a' W( b6 a! s4 j ![]() ![]() # q& f! G! y. t* k 二、寄存器说明 1、时钟控制寄存器RCC_CR ![]() M. p0 r2 ]- [% y- {9 b/ L% H 第0位:HSION(0,关闭;1,开启)5 U$ k; M: [% U( ]8 F8 ~2 u+ s 8 y& \$ w( ]& e- [$ a" ? 第1位:HSIRDY(0,HSI未就绪;1,HSI就绪)7 {0 Z( A' U9 Y& e) ]1 k6 P M & w, w. J! ?2 | K5 H0 B$ R: q 第16位:HSEON(0,关闭;1,开启)1 c" o% X! w( N# W8 V0 c/ w + X; m3 m( [6 a/ Q3 p. P 第17位:HSERDY(0,HSE未就绪;1,HSE就绪). E9 P( v6 ]0 y1 |, L 0 ^! Z- R4 x2 V- j1 `4 b; C 第19位:CSSON(0,时钟检测关闭;1,时钟监控开启)0 J. y) V! ]# g0 A# E/ \ ; ]/ `2 \& Z9 Z' B4 O, A3 W2 Q1 |( z4 G 第24位:PLLON(0,关闭PLL;1,使能PLL)( W% k9 ?( }0 ~4 [4 t% E9 W 0 T' {" h. M x* B 第25位:PLLRDY(0,PLL未锁定,1:PLL锁定) 2、时钟配置寄存器RCC_CFGR 3 U. k2 W2 i1 H, \! k ![]() ![]() 4 C) {* l5 s0 y- f/ T y1 D+ Y 第1:0位SW: 软件设置时钟源 , f4 ` O8 t2 f9 x' G7 w) K" ` 00:HSI为系统时钟 / B1 h2 D/ a- |: d; B! R; a 7 u' X E9 f1 y. F0 s! d/ v+ K 01:HSE为系统时钟 10:PLL作为系统时钟7 h" m2 M9 _ O, ~) S. H% j 5 O s1 q" g5 e* @6 S+ A I, w0 j, n 11:时钟不可用1 t# B- O& k( @& Z& b 第3:2位SWS:硬件指示时钟源( |9 a! ?) F3 z7 n: v. ? 00:HSI为系统时钟 7 w8 G# `7 O/ s3 [3 B " a0 p# i/ O# o1 |8 w6 H, I* l 01:HSE为系统时钟' m4 P( P3 T/ @/ _+ m. d: c J 10:PLL作为系统时钟 11:时钟不可用. b1 O9 h& v% i' f& t( q; ~- `% v5 O 1 C5 y3 r* N X' p& J 第7:4位HPRE:软件设置AHB的分频系数(具体见参考手册)' Z/ l7 e* G/ o- @' t9 L2 _! Z ![]() 第10:8位PPPRE1:软件设置低速APB1(PCLK1)的与分频系数(具体见参考手册) ![]() ( |* m1 H2 `; E) U/ s" c( ~ 第13:11位PPPRE2:软件设置高速APB2(PCLK2)的预分频系数(具体见参考手册) 4 u3 a3 o ]' q+ b0 U) | ![]() 1 n) P- a0 _& h1 C3 }9 c& I& W 第15:14位ADCPPE:软件设置ADC的时钟频率(最大14Mhz)3 ~( h6 v. s5 @3 L0 @ # g8 t3 F( R2 J0 W1 T5 @3 v ![]() % q3 H. z: N0 v ^. P% N 00:APB2的2分频 01:APB2的4分频 " _& @8 \. R0 |- B 10:APB2的6分频/ m, \+ ?$ g0 B$ u % T8 Y4 d: C2 E+ Q: n# i 11:APB2的8分频, j4 t3 d) z' P+ [ 第16位PLLSRC:软件选择PLL的时钟源(关闭PLL时写入) ?4 t( z! E6 X+ [3 N- r ![]() 0:HSI的2分频作为PLL的输入时钟 ( l+ Q/ m3 @8 s* B( ~1 M 1:HSE作为PLL的输入时钟$ d5 U; c/ ]0 T # h1 h0 p! Q4 e+ c& J% P# d5 c 第17位PLLXTPRE:软件选择HSE作为PLL输入时是否分频 6 d2 b% }6 F) @6 H+ L: m% g 0:HSE不分频+ x9 H9 V: s" o: s) W 4 l5 e4 e- l- _3 [$ [ @ 1:HSE 2分频& M0 ~# F' f2 J$ z % d0 ]8 Y2 S& i* k; g/ p. V 第21:18位PLLMUL:软件设置PLL的倍频系数(最高不超过72M,实测超过100M后还能工作)2 R2 D: \' d4 i% T1 }) @% [ * v4 v1 o, M8 c$ _" s1 x$ Q" i ![]() 详见参考手册 4 f; p( s0 S4 p1 i1 ]# P 第22位USBPRE:软件设置USB时钟, D9 S0 p& R! Q ![]() 0:PLL时钟1.5倍分频作为USB时钟 1:PLL直接作为USB时钟 $ ~# n t, U+ ^" u v0 T4 C 第26:24位MCO:时钟输出PA8引脚(对于STM32F1来说,最高频率不能超过IO口的频率50Mhz) 0xx:无输出 4 H' D& _$ g9 {/ C/ Y# h 100:输出系统时钟SYSCLK# Y/ t4 m1 V# R) z( ^$ Z 101:HSI输出& v5 ^8 d1 X) K 110:HSE输出 4 O5 E& M2 N+ ~$ x3 K, [ 111:PLL的2分频输出 1 _2 R) _+ A% ]$ ]$ S & o, R& a) N6 O" Q % l7 j; y$ V# ~6 |/ Z, r 3、时钟中断寄存器RCC_CIR $ B: l, o( U0 `$ D! t9 y- w$ n 4、APB2外设复位寄存器(RCC_APB2RSTR)+ @, m3 U) }2 p7 ]) ~ 对应位写1复位相应外设,写0无作用 ![]() 5、APB1 外设复位寄存器 (RCC_APB1RSTR)! z/ s, u: c$ ~: Z: t 2 d/ m( A6 ^2 C' u$ K R9 ~ 对应位写1复位相应外设,写0无作用 " v. D* e/ y& p S2 N0 i ![]() ! r$ `4 O/ {3 r7 O D2 `* M0 u 6、 AHB外设时钟使能寄存器 (RCC_AHBENR) 8 Y& Z' K H5 F' J% _ " `% K( \% G+ U7 N. O 对应位写1开启相应外设,写0关闭外设: V R" u. B- y- ^/ m + A) f! N) g1 N4 f1 ~0 { 5 B) N2 z0 N. i/ E( I+ M 7、 APB2 外设时钟使能寄存器(RCC_APB2ENR) 对应位写1开启相应外设,写0关闭外设 9 ?+ O5 n* y& L" t+ \# U ) @$ _* L7 p, x3 R; F& M5 ] 8、 APB1 外设时钟使能寄存器(RCC_APB1ENR) 6 J4 |+ F& O9 X" i/ e 对应位写1开启相应外设,写0关闭外设! |) V3 P* @/ J; D7 ^. o5 j ) C+ w4 W( a7 z7 m( f 9、备份域控制寄存器 (RCC_BDCR) ![]() : P b5 R2 ^& g9 B# d+ F/ K) s( B" t 第0位LSEON:软件设置,外部低速振荡器使能:0:关闭,1:开启; 第1位LSERDY:硬件指示,外部低速LSE就绪:0:未就绪,1:就绪; 第15位RTCEN:RTC时钟使能:0:关闭,1开启; b% q' P) K) \- { a 8 t8 M2 I# _; V$ ]) W0 a! ? 10、控制/状态寄存器(RCC_CSR)+ O" u6 I1 I. p S; H! R+ D+ Z" L ![]() 第0位LSION:软件设置,内部低速振荡器就绪:0,:40kHz振荡器时钟就绪; M v- {9 L7 t! e7 W 第1位LSIRDY:硬件指示,内部低速振荡器就绪:1:就绪,0:未就绪; / q/ I2 R2 l3 w, v5 L8 e0 m- q; q 第29位IWDGRSTF窗口看门狗复位标志:1:发生窗口看门狗复位;0:未发生( `3 L" p }$ @1 f* s5 B3 ? 4 _) u3 e# M3 t Q9 X 第30位WWDGRSTF独立看门狗复位标志:1:发生独立看门狗复位;0:未发生 ' h9 z: J& X6 d. k6 \/ @# f Z ! i1 Z1 l# ^; m v/ I3 |9 [) e 主要相关库函数: 0 G" A7 j$ ]- L" W7 n6 l3 A 1、void RCC_DeInit(void);//将外设RCC寄存器设为缺省值; 2 t+ k* G/ C+ J# ] \7 z: X 2、void RCC_HSEConfig(uint32_t RCC_HSE);//设置外部高速晶振(HSE); . c) j0 a3 r# C8 N" @, H* W: R 3、void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);//调整内部高速晶振(HSI)校准值- W) L% M3 a4 z* Z1 U- B 5 Z6 i) t0 B2 x* ]' T7 i 4、void RCC_HSICmd(FunctionalState NewState);//使能或者失能内部高速晶振(HSI) 5、void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);//设置PLL时钟源及倍频系数0 G) x1 w9 F1 U% H l: c7 x S; i9 P 6、void RCC_PLLCmd(FunctionalState NewState);//使能或者失能PLL ( k* ]) m" ?5 L$ n$ t 7、void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);//设置系统时钟(SYSCLK)源 8、void RCC_HCLKConfig(uint32_t RCC_SYSCLK);//设置AHB时钟(HCLK) 9、void RCC_PCLK1Config(uint32_t RCC_HCLK);//设置低速AHB时钟(PCLK1) 10、void RCC_PCLK2Config(uint32_t RCC_HCLK);//设置高速AHB时钟(PCLK2)+ M* ~6 H# M7 k. H7 @7 x/ E6 I 1 _$ ?& l" l3 I, D 11、void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);//使能或者失能指定的RCC中断2 w) P3 Y% z0 ]: P, w 12、 void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);//设置USB时钟(USBCLK) 8 \& T) r+ B" P8 v8 L. ^7 w 13、void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);//设置ADC时钟(ADCCLK) 4 [ e3 o1 e# e& z2 y 14、void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//使能或者失能AHB外设时钟1 m/ d+ o1 }+ F u & f q* ]6 `0 s0 t" \ z6 _7 y 15、void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//使能或者失能APB2外设时钟 16、void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//使能或者失能APB1外设时钟 , d6 ]- }4 D) U: ] 17、void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//强制或者释放高速AHB外设复位 z6 `4 ^6 E7 z+ o: u' b 6 c0 v, Q/ q! B& z 18、void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//强制或者释放高速APB(APB2)外设复位 8 N5 t/ b; _. D9 M8 {7 J2 | 19、void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//强制或者释放低速APB(APB1)外设复位. s! S/ O8 E$ I3 e9 O9 C + r1 L% m, j: d9 @ }# L0 c/ F. Z 20、void RCC_ClockSecuritySystemCmd(FunctionalState NewState);//使能或者失能时钟安全系统! U/ Q% l& s m4 Q: q 3 G+ ^% \* b* K- d! J' [8 } 21、void RCC_MCOConfig(uint8_t RCC_MCO);//选择在MCO管脚上输出的时钟源,警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。3 C1 b) s) X0 ~ 22、FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);//检查指定的RCC标志位$ f1 s3 @" F- V; W6 v( _; ^, ^5 H. x //RCC_FLAG_HSIRDY ,HSI晶振就绪;RCC_FLAG_HSERDY ,HSE晶振就绪; ! c+ p. j) K2 x //RCC_FLAG_PLLRDY ,PLL就绪;RCC_FLAG_LSERDY ,LSI晶振就绪;/ r) l p M& R$ p% a //RCC_FLAG_LSIRDY ,LSE晶振就绪;RCC_FLAG_PINRST ,管脚复位 ; //RCC_FLAG_PORRST ,POR/PDR复位;RCC_FLAG_SFTRST ,软件复位 ;1 I! ~- y+ p t, X //RCC_FLAG_IWDGRST ,IWDG复位;RCC_FLAG_WWDGRST ,WWDG复位; V) M8 Y$ r. i b6 f8 I //RCC_FLAG_LPWRRST ,低功耗复位9 X. ?4 f2 K, A, g3 m; L 23、void RCC_ClearFlag(void);//清除RCC的复位标志位( T4 ~$ j6 G4 } 24、ITStatus RCC_GetITStatus(uint8_t RCC_IT);//检查指定的RCC中断发生与否 $ h" h' q8 m' ~ //输入:RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断 //RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断7 |; ]# j" ^8 D( A; \# O* | //RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断; b) n( K! \( h/ t X4 s 25、void RCC_ClearITPendingBit(uint8_t RCC_IT);//清除RCC的中断待处理位 //RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断9 {- q Y' g& M8 A //RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断# Q* f2 e$ K' {; t % R2 X* J/ J; f( f2 { //RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断 & b: U6 i' k% j, { 7 _& A: N; \2 ~& P! h |
【经验分享】STM32F1 GPIO工作原理
【经验分享】STM32F0xx_DMA收发USART数据配置详细过程
【经验分享】STM32F1和STM32F4 区别
【经验分享】STM32F1系列之常用外设说明
【经验分享】STM32介绍
【经验分享】STM32F1x系列——Flash 模拟 EEPROM
【经验分享】STM32F1在MDK下新建标准库函数工程
【经验分享】stm32f1的存储器与复位
【经验分享】STM32F10X-架构
【经验分享】stm32F1 us延时函数