STMCU小助手
发布时间:2021-11-27 10:06
|
STM32f1时钟系统6 {+ U$ N5 H Q3 s8 s M 一、祭出STM32F1的官方时钟框图+ G x$ j. U( v+ V" g7 ]
6 P ^ G- a9 J' A1 ?( U- S" x
' y# E) r4 u: H/ C" V1 w5 l5 q 二、寄存器说明 1、时钟控制寄存器RCC_CR4 |3 o, ^" m J- [, U g
9 w+ x9 q% J5 X: | 第0位:HSION(0,关闭;1,开启)0 J8 ]7 J$ X+ h: ~ 第1位:HSIRDY(0,HSI未就绪;1,HSI就绪), v* i- v, v: k" g8 i1 K# V2 m1 M o $ s4 l" p Z; v* b* k \ 第16位:HSEON(0,关闭;1,开启) O0 x2 q' m/ {$ ] 第17位:HSERDY(0,HSE未就绪;1,HSE就绪)( d* _! \+ c; E) t 第19位:CSSON(0,时钟检测关闭;1,时钟监控开启) 5 {. _- W: ^! W" X7 |% l% p' L 第24位:PLLON(0,关闭PLL;1,使能PLL) 第25位:PLLRDY(0,PLL未锁定,1:PLL锁定) + \: L7 K0 a) n# P! w 2、时钟配置寄存器RCC_CFGR 2 J+ r! k- t3 b2 H( m
. Q8 Q- K! A6 A, }
第1:0位SW: 软件设置时钟源5 A8 h" ^9 h3 V, @ : G! }, }( P3 q4 W1 }% ~ 00:HSI为系统时钟 ( x: E0 Q" @$ R8 M6 N1 k. Q& J2 j * U1 ~0 M! q% p# _4 y 01:HSE为系统时钟 # N% j( n$ j9 J! w3 ]5 q& ?" ~ 10:PLL作为系统时钟# P Z: ^. V- D7 F2 L; E! k , o6 E6 q" f9 C2 Z4 H( R 11:时钟不可用 第3:2位SWS:硬件指示时钟源 3 W0 n$ U2 [3 [ 00:HSI为系统时钟 ; z# w/ l; I6 B9 D; x! D B 01:HSE为系统时钟 8 _4 ~9 o3 S+ K5 d 10:PLL作为系统时钟 6 q. E( O+ `" G9 F8 |& J 11:时钟不可用* ]5 p$ E" t: y/ y 第7:4位HPRE:软件设置AHB的分频系数(具体见参考手册)( ]% G9 m d2 n% e - A& E/ O9 H+ B9 h
8 B9 }$ n+ X2 C9 m/ _/ U 第10:8位PPPRE1:软件设置低速APB1(PCLK1)的与分频系数(具体见参考手册)
第13:11位PPPRE2:软件设置高速APB2(PCLK2)的预分频系数(具体见参考手册): T) y$ [; ]+ S' D" `1 p+ `: u . ?& r' l) a @: U* P
第15:14位ADCPPE:软件设置ADC的时钟频率(最大14Mhz)+ I% a( L7 b/ T' A1 _" k0 ^' u* W
# }9 c$ i5 K7 \) E3 r* U9 K 00:APB2的2分频5 I4 Z8 m$ r2 p0 e' F 01:APB2的4分频. c+ H' o h4 W ( Q% F8 M* A9 \9 A4 Z# v# o" ~ 10:APB2的6分频 11:APB2的8分频 第16位PLLSRC:软件选择PLL的时钟源(关闭PLL时写入). n# z9 ]% x; N, l h " V7 F4 h, o& Z- y% ?
' U- C: a7 e% V, o 0:HSI的2分频作为PLL的输入时钟 1:HSE作为PLL的输入时钟7 G. X) ~/ r* ?3 g U, \8 P. i3 C; j 7 a1 ?* d% _* V 第17位PLLXTPRE:软件选择HSE作为PLL输入时是否分频* i( u, V' |/ e 5 k9 e9 D/ E9 V, } / o5 O N5 @6 Z. l2 a1 n7 Z 0:HSE不分频 % I0 l9 e0 |0 i4 J: P& r 1:HSE 2分频 0 ^+ w9 B; A/ e) o1 O 第21:18位PLLMUL:软件设置PLL的倍频系数(最高不超过72M,实测超过100M后还能工作)" f& I! ?% V9 Z! B0 }/ r
详见参考手册 第22位USBPRE:软件设置USB时钟0 }5 @5 g2 g+ S, s! M' f2 R5 H : m1 T. v8 P' m" ]% t7 R$ e
0:PLL时钟1.5倍分频作为USB时钟 7 X8 ]" g' D+ |: c9 y X 1:PLL直接作为USB时钟" v0 n$ X6 X" z8 q u0 M" R* E; D- f1 B: {2 v2 M 第26:24位MCO:时钟输出PA8引脚(对于STM32F1来说,最高频率不能超过IO口的频率50Mhz)$ Q: ^2 S( q, h 7 T9 d# c& U0 i. f x % _& w0 ]; d) [% w 0xx:无输出 ) ~1 e; g% W" L" D! D 100:输出系统时钟SYSCLK6 i) ^" v h/ d : m, ~( B& q! F5 \ 101:HSI输出- W8 I1 }$ N' v- o c/ z* j5 `; W$ e; C3 V 110:HSE输出 111:PLL的2分频输出8 ?. v. Q/ u% P, d/ ?! X, f& L- p ) z5 N$ {% s7 \' K1 b# l 3、时钟中断寄存器RCC_CIR 4、APB2外设复位寄存器(RCC_APB2RSTR)) D6 w5 _* v) s" S( [- |* s) c; ]; x 对应位写1复位相应外设,写0无作用 1 s* {9 j: `+ {0 k% q
5 P# Q5 W p7 C/ V 5、APB1 外设复位寄存器 (RCC_APB1RSTR) , \5 O: o+ R4 A& y6 z. o 对应位写1复位相应外设,写0无作用' d" ~' X4 |4 v+ }7 x ; k) n6 q$ F% j" P. z
m5 x0 t$ c8 K1 x! z; K 6、 AHB外设时钟使能寄存器 (RCC_AHBENR) & t( f' j7 y3 u0 J e# l! T" V 对应位写1开启相应外设,写0关闭外设 * R0 v$ W6 ~) h 7、 APB2 外设时钟使能寄存器(RCC_APB2ENR) $ V' `8 Q* k! x 对应位写1开启相应外设,写0关闭外设 ' A' D( e' `3 _0 Y - @( l) t, p6 u! i( [* i 8、 APB1 外设时钟使能寄存器(RCC_APB1ENR)1 f! }; c$ a" B: q. h' B! v 对应位写1开启相应外设,写0关闭外设 & ]' o0 L4 `3 K/ G ' `5 U3 j/ W0 n' O. G) G& Z 9、备份域控制寄存器 (RCC_BDCR) % @ ]: S4 s5 u" w4 [6 M
第0位LSEON:软件设置,外部低速振荡器使能:0:关闭,1:开启; $ {3 A2 q9 F0 M2 j9 s- V2 [ 第1位LSERDY:硬件指示,外部低速LSE就绪:0:未就绪,1:就绪;1 U: |) ^2 P. L8 G, L9 | 第15位RTCEN:RTC时钟使能:0:关闭,1开启; 10、控制/状态寄存器(RCC_CSR) $ Y' b1 O; i. P0 `
第0位LSION:软件设置,内部低速振荡器就绪:0,:40kHz振荡器时钟就绪 第1位LSIRDY:硬件指示,内部低速振荡器就绪:1:就绪,0:未就绪;. q) `# ?/ H5 J 第29位IWDGRSTF窗口看门狗复位标志:1:发生窗口看门狗复位;0:未发生 第30位WWDGRSTF独立看门狗复位标志:1:发生独立看门狗复位;0:未发生% O) `& ]3 k* y , P. `. O& X! J0 l/ _( u 主要相关库函数: 1 [6 d. O) P1 l7 q) a; M9 P* l( m 1、void RCC_DeInit(void);//将外设RCC寄存器设为缺省值;. D1 M8 _ f6 l% |- J 2、void RCC_HSEConfig(uint32_t RCC_HSE);//设置外部高速晶振(HSE); 3、void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);//调整内部高速晶振(HSI)校准值 9 g3 E# N+ K. x 4、void RCC_HSICmd(FunctionalState NewState);//使能或者失能内部高速晶振(HSI) Y+ e" {" r& @4 p1 B7 F+ E 5、void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);//设置PLL时钟源及倍频系数 6、void RCC_PLLCmd(FunctionalState NewState);//使能或者失能PLL: w; Z) E+ D2 f 7、void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);//设置系统时钟(SYSCLK)源 2 c4 L4 E/ C i$ W$ O) t 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) j1 s# l' w" i K. f0 B 5 T! k! x& A$ c% P( J4 Y7 b4 e& y3 @ 11、void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);//使能或者失能指定的RCC中断0 g& }" ], w: x6 B7 m) P S 6 w1 v( U8 c' b7 s/ `5 _' E 12、 void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);//设置USB时钟(USBCLK)! p' U! o2 E/ E% R6 H 13、void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);//设置ADC时钟(ADCCLK)/ t4 Q& _9 }9 M' z5 Z ( @! f8 K4 [9 h4 y6 W 14、void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//使能或者失能AHB外设时钟, {% p6 m, v g) [( b: X 15、void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//使能或者失能APB2外设时钟 9 ?" ^) z$ ]6 Z( F9 L5 H 16、void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//使能或者失能APB1外设时钟 9 F- C% F1 ^5 }7 C: y) _ 17、void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//强制或者释放高速AHB外设复位/ k7 M; V4 j3 T, W" Z7 s2 B $ b# O p7 f8 @! c 18、void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//强制或者释放高速APB(APB2)外设复位: x. [" e& t4 j# h4 \ / M& Q6 N8 Y6 X9 y) ?8 E 19、void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//强制或者释放低速APB(APB1)外设复位0 {# M7 V4 G* p/ ^& S' P7 V5 b 7 d d# ~8 l( { 20、void RCC_ClockSecuritySystemCmd(FunctionalState NewState);//使能或者失能时钟安全系统 ' P3 |. B s: T* _ f# f 21、void RCC_MCOConfig(uint8_t RCC_MCO);//选择在MCO管脚上输出的时钟源,警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。 22、FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);//检查指定的RCC标志位 ; H4 Y8 _8 O& r. b) k; j9 z! v //RCC_FLAG_HSIRDY ,HSI晶振就绪;RCC_FLAG_HSERDY ,HSE晶振就绪;1 Q2 n9 P* U3 Y3 V$ V. C ! ^+ j7 Y* S! x! D: t9 Q. | //RCC_FLAG_PLLRDY ,PLL就绪;RCC_FLAG_LSERDY ,LSI晶振就绪; //RCC_FLAG_LSIRDY ,LSE晶振就绪;RCC_FLAG_PINRST ,管脚复位 ;6 W2 |$ U0 u+ ~9 R/ U" ], { //RCC_FLAG_PORRST ,POR/PDR复位;RCC_FLAG_SFTRST ,软件复位 ;6 j* [6 c: z3 i& y. V2 {! t ' `+ |: W) ~# @6 l, I/ W //RCC_FLAG_IWDGRST ,IWDG复位;RCC_FLAG_WWDGRST ,WWDG复位; //RCC_FLAG_LPWRRST ,低功耗复位2 o" Z' p% X- P$ O . Y# i' `! D+ I 23、void RCC_ClearFlag(void);//清除RCC的复位标志位& L* C9 g6 {8 E 24、ITStatus RCC_GetITStatus(uint8_t RCC_IT);//检查指定的RCC中断发生与否 3 k, T3 j$ M6 l2 Z! v //输入:RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断 ) e2 Y6 K( G# W( g% r //RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断 //RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断 T, w9 J1 C3 k: m9 m; j! C P$ ? 25、void RCC_ClearITPendingBit(uint8_t RCC_IT);//清除RCC的中断待处理位 //RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断 % j4 j# B; p1 g; r: ? //RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断 ; L7 G3 F, j: h; O% c* U //RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断1 f. ]( @" T& e- O1 s% G/ a# M - i6 |( J/ k" g0 e# h7 a; X+ g |
【评分有奖】STM32 AI Sidekick聊天工具上线,快来体验一下吧!
ST TouchGFX 实操系列视频+如何选择正确的帧缓冲区策略
ST TouchGFX 实操系列视频++如何添加图像
ST TouchGFX 实操系列视频+如何进行屏幕转换
ST TouchGFX 实操系列视频+控件的淡入淡出
ST TouchGFX 实操系列视频+移动控件的三种方法
ST TouchGFX 实操系列视频+如何创建用户界面(UI)
ST TouchGFX 实操系列视频+如何安装TouchGFX Designer和STM32Cube软件环境
【经验分享】STM32F1 GPIO工作原理
【经验分享】STM32F0xx_DMA收发USART数据配置详细过程
微信公众号
手机版