STMCU小助手
发布时间:2021-11-27 10:06
|
STM32f1时钟系统 2 L& R$ i9 K1 A5 R1 d4 R. u 一、祭出STM32F1的官方时钟框图
' x/ L8 W/ g6 d 二、寄存器说明# G* j$ `, _ Y! K2 t! Z! ] / w2 V5 j9 v: a 1、时钟控制寄存器RCC_CR 2 t4 {, q4 d9 C- y
第0位:HSION(0,关闭;1,开启)9 R M; J& }; i, a+ _7 d ; c3 j8 B* ^ Q& T/ n+ C1 z 第1位:HSIRDY(0,HSI未就绪;1,HSI就绪)5 ^! {5 @1 i. I( E3 f A0 \5 z4 R" c6 x, x 第16位:HSEON(0,关闭;1,开启)' A2 \0 w: A* q ~& r: _& N 第17位:HSERDY(0,HSE未就绪;1,HSE就绪) 第19位:CSSON(0,时钟检测关闭;1,时钟监控开启)6 K9 Q$ {% n( D! C 第24位:PLLON(0,关闭PLL;1,使能PLL)& I6 s/ S- _% d* h4 k 0 E2 g( g7 `/ D0 ?3 B, l 第25位:PLLRDY(0,PLL未锁定,1:PLL锁定) ) |8 ^$ h; D; J* R* k. e 2、时钟配置寄存器RCC_CFGR ~4 {, m0 u' X8 d
* M$ {0 N1 S+ O0 q; p
! O# v% V* N6 @) X4 p `: t% L! ^6 o; X: q% @ 第1:0位SW: 软件设置时钟源 00:HSI为系统时钟 * R0 Q) X+ ~5 S2 \- U 01:HSE为系统时钟 ' d: a9 L; Q5 y0 b$ g 10:PLL作为系统时钟 11:时钟不可用 第3:2位SWS:硬件指示时钟源* `( x; \8 y/ I 3 X! G- s% a( B6 ?! { 00:HSI为系统时钟 ! G; @9 e F; A 01:HSE为系统时钟 : ~5 n5 O, R) e7 f& {% O 10:PLL作为系统时钟! B6 l: k3 F; U( z( ?. Y 11:时钟不可用5 T, c) x% W, ]: g % a; }- d k2 t+ Z 第7:4位HPRE:软件设置AHB的分频系数(具体见参考手册) : D; ^0 }4 i2 ^4 X' S, B3 z
第10:8位PPPRE1:软件设置低速APB1(PCLK1)的与分频系数(具体见参考手册), Q% w# {& d8 Q( |# z- l$ X0 h
4 } f: U- x3 s" ?' n# F 第13:11位PPPRE2:软件设置高速APB2(PCLK2)的预分频系数(具体见参考手册) k4 w) [* P4 e- Q
第15:14位ADCPPE:软件设置ADC的时钟频率(最大14Mhz) . Y! C3 K' r1 }0 ]
, M7 a" X' Q% z* S0 x! ^0 m5 } 00:APB2的2分频 & @0 [1 ]; ^5 [1 w& N 01:APB2的4分频+ w: e0 A4 N* i4 u& N; n 10:APB2的6分频3 Q9 d4 ^( A# W * P% W# o F* w! z! z$ A- x 11:APB2的8分频0 _4 ~- |6 B, `' Q0 _+ `: a - r+ o5 s `, o c 第16位PLLSRC:软件选择PLL的时钟源(关闭PLL时写入)5 w! V. @& M0 r" D W
0:HSI的2分频作为PLL的输入时钟 5 A! [6 n: M+ \; ~ 1:HSE作为PLL的输入时钟 6 U- V9 q+ ?/ M: {. K) w 第17位PLLXTPRE:软件选择HSE作为PLL输入时是否分频 : Q+ R# ?! R1 Z+ C+ w7 ` 1 {6 a# @6 r# z 0:HSE不分频. I- b7 C, Q9 J' e+ s; Q 7 j) w4 l/ W- \! {$ ?2 d8 l 1:HSE 2分频) W8 |7 E6 _4 U9 O$ s- s& p & q1 U! V* _5 o) V) b. d5 }* e3 c 第21:18位PLLMUL:软件设置PLL的倍频系数(最高不超过72M,实测超过100M后还能工作)
详见参考手册 * s. y4 E F/ A+ W# Y8 o 第22位USBPRE:软件设置USB时钟
0:PLL时钟1.5倍分频作为USB时钟 ; ^; A& b: W7 N9 v, X2 ^ 1:PLL直接作为USB时钟 . U7 e, a- g1 `, H+ Z1 l3 [ 第26:24位MCO:时钟输出PA8引脚(对于STM32F1来说,最高频率不能超过IO口的频率50Mhz)$ ]4 o6 A8 r, s0 k( h2 D0 v* v h4 f " I z: p+ P2 B# U! e" O$ _6 X 0xx:无输出 $ e3 S8 R! [3 R: Z 100:输出系统时钟SYSCLK: z5 w+ z( X3 l8 p% } - k( O7 `) R: P( M) `( O# Y4 u) r 101:HSI输出! x5 x; `1 d) D# J1 _ ' B$ ?1 {6 @) q5 W$ q/ \ ~ 110:HSE输出* ^2 c; U( c8 {, ^1 U% V3 ^5 x$ z0 y 111:PLL的2分频输出 # Z( b7 U) y& k3 Q q 3 e3 D4 d$ W: ?5 J2 G, d5 K/ [ 3、时钟中断寄存器RCC_CIR 4、APB2外设复位寄存器(RCC_APB2RSTR) * c% s# V9 O6 G. ~* D* I' c) y 对应位写1复位相应外设,写0无作用 6 n" G: O% r( r/ M/ j, r+ y2 c/ K
; D! J2 H J0 h1 H4 A" R+ Q 5、APB1 外设复位寄存器 (RCC_APB1RSTR) 对应位写1复位相应外设,写0无作用
6、 AHB外设时钟使能寄存器 (RCC_AHBENR) * }, N) s) z! B9 i, K" b+ z" Y, ^8 [ % c( L& l6 E2 b9 |; t 对应位写1开启相应外设,写0关闭外设0 u3 b% a$ z3 N* V # }% Q0 I3 e6 Z ( `- h. t: x2 B6 j; M6 E 7、 APB2 外设时钟使能寄存器(RCC_APB2ENR) 对应位写1开启相应外设,写0关闭外设 # Q4 B8 [0 K" L/ ] . `/ ]4 q J# N! R, |# N 8、 APB1 外设时钟使能寄存器(RCC_APB1ENR), t9 v3 A& h4 d 1 y# W7 ~. l% v' u% A$ N8 W" v 对应位写1开启相应外设,写0关闭外设% ]7 C2 S4 b5 \' ]- {: `) H4 g 1 l; W$ Q7 s; c # a2 S+ b v' | \9 P ! i6 y3 R5 `7 ~, C1 K 9、备份域控制寄存器 (RCC_BDCR)
第0位LSEON:软件设置,外部低速振荡器使能:0:关闭,1:开启; ! H& `6 V* T6 j% P. N 第1位LSERDY:硬件指示,外部低速LSE就绪:0:未就绪,1:就绪;7 x2 V. M2 b! e# g. \% z a 第15位RTCEN:RTC时钟使能:0:关闭,1开启;# X3 m7 V/ ^# X9 o/ W8 R" U; `7 r 4 A1 T+ g0 [8 U, V X6 R2 i 10、控制/状态寄存器(RCC_CSR)7 s7 B6 ~6 r' U. {
( y0 V8 M" t3 Y- @7 S7 _" }1 h, f 第0位LSION:软件设置,内部低速振荡器就绪:0,:40kHz振荡器时钟就绪 3 z% L* Q$ W8 } 第1位LSIRDY:硬件指示,内部低速振荡器就绪:1:就绪,0:未就绪; # g/ ^- T, v( q' m8 y/ T 第29位IWDGRSTF窗口看门狗复位标志:1:发生窗口看门狗复位;0:未发生 第30位WWDGRSTF独立看门狗复位标志:1:发生独立看门狗复位;0:未发生 3 ? E" U7 ~1 Q; F 主要相关库函数: 1、void RCC_DeInit(void);//将外设RCC寄存器设为缺省值; " n6 {7 g& W. o( G p" L1 A! ]* E 2、void RCC_HSEConfig(uint32_t RCC_HSE);//设置外部高速晶振(HSE);2 o' ]( `" O8 D/ G : g( K0 w5 Y- M1 t, w- L 3、void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);//调整内部高速晶振(HSI)校准值: I6 w( F; K9 ]1 x# i$ F/ Q& K 8 C ~3 Z2 g" ~ 4、void RCC_HSICmd(FunctionalState NewState);//使能或者失能内部高速晶振(HSI)# x: c' T5 D A" u, a q# ~7 _8 @8 e" S 5、void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);//设置PLL时钟源及倍频系数 & \6 n, y/ V. f2 b 6、void RCC_PLLCmd(FunctionalState NewState);//使能或者失能PLL3 n5 w3 e6 Q" s# ^9 J" l4 k 7、void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);//设置系统时钟(SYSCLK)源- x6 q$ x M% R# ^2 u. A) Y# \, n0 A . R4 f8 i) \: V$ F: v/ c 8、void RCC_HCLKConfig(uint32_t RCC_SYSCLK);//设置AHB时钟(HCLK) , W1 V; F4 p$ m 9、void RCC_PCLK1Config(uint32_t RCC_HCLK);//设置低速AHB时钟(PCLK1)3 H1 J. C& \0 C6 T 10、void RCC_PCLK2Config(uint32_t RCC_HCLK);//设置高速AHB时钟(PCLK2)5 p4 i8 ^0 A' n 11、void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);//使能或者失能指定的RCC中断& c3 k. X) H& E$ a2 M 4 g' W+ s1 E) L D 12、 void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);//设置USB时钟(USBCLK) 0 @7 Q; ~% F& t) c# F/ A 13、void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);//设置ADC时钟(ADCCLK)! O/ M! ]% N/ s! r$ g 1 `' Q! U- X4 X4 A7 V3 P 14、void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//使能或者失能AHB外设时钟8 \# v0 i4 L' b' t5 L, |( {4 S 15、void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//使能或者失能APB2外设时钟 ; l* g* h E8 F' P M 16、void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//使能或者失能APB1外设时钟 4 Z% n2 [* x% q* E, p 17、void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//强制或者释放高速AHB外设复位: s9 K, O* a! X 18、void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//强制或者释放高速APB(APB2)外设复位& Q0 v( L/ i% H/ L6 h# w 19、void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//强制或者释放低速APB(APB1)外设复位( H- Y$ h4 }& g# Y" D. \/ H 20、void RCC_ClockSecuritySystemCmd(FunctionalState NewState);//使能或者失能时钟安全系统( r: N/ C, @: J9 `" c$ y* M 6 l5 J% V4 ?, p/ G/ n 21、void RCC_MCOConfig(uint8_t RCC_MCO);//选择在MCO管脚上输出的时钟源,警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。 ; k$ }% p" R8 T1 {( q 22、FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);//检查指定的RCC标志位9 a( g4 C2 c/ v1 r " N1 X8 h# \5 n$ F( v. k* h& ~; m //RCC_FLAG_HSIRDY ,HSI晶振就绪;RCC_FLAG_HSERDY ,HSE晶振就绪; ) f4 C! N+ g9 U7 Y$ M% b8 v //RCC_FLAG_PLLRDY ,PLL就绪;RCC_FLAG_LSERDY ,LSI晶振就绪; //RCC_FLAG_LSIRDY ,LSE晶振就绪;RCC_FLAG_PINRST ,管脚复位 ;6 T% f2 ^8 f8 E0 G) V //RCC_FLAG_PORRST ,POR/PDR复位;RCC_FLAG_SFTRST ,软件复位 ; ) W* Z, i6 I) z" x9 Q" [; T' b //RCC_FLAG_IWDGRST ,IWDG复位;RCC_FLAG_WWDGRST ,WWDG复位; //RCC_FLAG_LPWRRST ,低功耗复位 23、void RCC_ClearFlag(void);//清除RCC的复位标志位 ; Q( S$ J2 d3 _0 r+ X 24、ITStatus RCC_GetITStatus(uint8_t RCC_IT);//检查指定的RCC中断发生与否. O: W5 G' i, }3 a . B' O" S9 k' \ //输入:RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断$ o- O6 q5 ]- a+ S4 J //RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断 ' C& m& w/ s! b" K! _ //RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断 8 B4 |5 h* F5 U& q' V. A 25、void RCC_ClearITPendingBit(uint8_t RCC_IT);//清除RCC的中断待处理位! S3 \" h" w& | c: d 7 s- H% b# k* t& R. N //RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断. {0 _" x* V$ U: @) F+ e# O$ O 4 d" E0 a7 K5 a //RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断6 N" ]% b1 b" [9 n1 R //RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断; D7 q, {: a) N4 J/ S a# c8 W |
【评分有奖】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数据配置详细过程
微信公众号
手机版