STMCU小助手
发布时间:2021-11-27 10:06
|
STM32f1时钟系统 一、祭出STM32F1的官方时钟框图 $ ~# ^' r; Z/ o
) E( m q' T2 l5 W, G
二、寄存器说明 1、时钟控制寄存器RCC_CR
第0位:HSION(0,关闭;1,开启) ; a! V9 `; T3 Z: T! U4 N7 r 第1位:HSIRDY(0,HSI未就绪;1,HSI就绪) / \9 Y; u7 d7 k; Q! h 第16位:HSEON(0,关闭;1,开启)1 D- `3 `4 M' n7 Q3 a$ P( r6 Z b# _$ |3 L( x7 M. m( ? 第17位:HSERDY(0,HSE未就绪;1,HSE就绪) 第19位:CSSON(0,时钟检测关闭;1,时钟监控开启) 第24位:PLLON(0,关闭PLL;1,使能PLL) # q: Q) D& e8 C$ F/ V5 W$ R- U 第25位:PLLRDY(0,PLL未锁定,1:PLL锁定)( z, j- D. `( r3 O* E6 X 2、时钟配置寄存器RCC_CFGR3 {6 s; M' R& T+ z* h" p
第1:0位SW: 软件设置时钟源 00:HSI为系统时钟 5 P6 j: k& H* }2 E- \4 w 01:HSE为系统时钟8 n% k7 W6 `* I- U7 X! H" A4 y6 }8 m 10:PLL作为系统时钟 11:时钟不可用 第3:2位SWS:硬件指示时钟源 1 f. \+ j% r. Z4 Z# D. f& f4 @: y( B 00:HSI为系统时钟 ' A8 h0 J1 E9 _1 c" Z- r$ a8 M 01:HSE为系统时钟 10:PLL作为系统时钟 ! `7 x" q$ J' I9 e7 s 11:时钟不可用 第7:4位HPRE:软件设置AHB的分频系数(具体见参考手册) , |$ X& W; q% N
' e5 x( A# o0 r/ @& c) D& M8 O: ~! I 第10:8位PPPRE1:软件设置低速APB1(PCLK1)的与分频系数(具体见参考手册)% B7 a6 V _6 W: J . T& I# F% W( K% T8 I9 r
5 C+ F# O3 F- x: E! [ 第13:11位PPPRE2:软件设置高速APB2(PCLK2)的预分频系数(具体见参考手册)
第15:14位ADCPPE:软件设置ADC的时钟频率(最大14Mhz) # D4 U/ V5 |8 F' M3 Z) P
00:APB2的2分频; S% t6 D. v6 p3 ^( I6 Z 01:APB2的4分频9 d# E9 f0 I$ P; F8 U5 m: ` ( y* c/ {/ k7 ?1 Y* {, s. i1 H2 c: e 10:APB2的6分频 11:APB2的8分频 7 |& ~" C" D' k( h R0 n 第16位PLLSRC:软件选择PLL的时钟源(关闭PLL时写入) m% {6 v1 T3 X3 C" t% t
0 `5 t! h: m1 _0 O# A+ a7 B5 t 0:HSI的2分频作为PLL的输入时钟 F* q! w) i8 h* ]/ P7 f9 k8 i 1:HSE作为PLL的输入时钟) N/ x5 u- g. z; k7 R 第17位PLLXTPRE:软件选择HSE作为PLL输入时是否分频 0:HSE不分频& ~* j- E1 ]# Z2 i, t. Z 1:HSE 2分频! `" S/ B( ?+ F5 h( \+ M2 j4 c( f ( p4 b1 }) k5 m6 N 第21:18位PLLMUL:软件设置PLL的倍频系数(最高不超过72M,实测超过100M后还能工作)# Z1 s2 @. G) E
详见参考手册 5 \- W5 U: }5 I+ E% j 第22位USBPRE:软件设置USB时钟
I+ W5 Z% J7 \ 0:PLL时钟1.5倍分频作为USB时钟 + Y9 q7 k3 G' y: o+ \& Z5 C 1:PLL直接作为USB时钟+ d) v& A' x# H 第26:24位MCO:时钟输出PA8引脚(对于STM32F1来说,最高频率不能超过IO口的频率50Mhz) ! s* W+ D+ }4 o1 h% u" F 0xx:无输出 100:输出系统时钟SYSCLK # c+ S2 Y7 G% d+ ]% h: h0 u 101:HSI输出# R5 {% I+ X8 D. W9 @( O ) n) n' {* [6 u) U" _2 L 110:HSE输出' g" N1 l0 i8 V9 Z A 111:PLL的2分频输出 + N1 _- w; `. B) A # c6 D ?, `" D' q% Q 2 `/ T Q% p9 @3 a1 [ 3、时钟中断寄存器RCC_CIR / i. u: t: G( S, n9 v) f 4、APB2外设复位寄存器(RCC_APB2RSTR)% q( D2 x+ l" M2 S- E ' y+ t; |- h; H4 E8 [- [ 对应位写1复位相应外设,写0无作用 , T6 ]# l/ E! P# w! Q# |! ?8 ]
0 s8 O) ?( I; ^& G; C 5、APB1 外设复位寄存器 (RCC_APB1RSTR) 对应位写1复位相应外设,写0无作用2 R( D! U& u' W3 u. s/ T 0 v6 b' U/ N4 g* i' A2 M
- F j+ u8 S- l& B M' J0 O- ^ 6、 AHB外设时钟使能寄存器 (RCC_AHBENR) ], j3 E- ]( \$ E2 M 5 c4 R! ?: C3 C7 }9 e, F( \4 E 对应位写1开启相应外设,写0关闭外设 7、 APB2 外设时钟使能寄存器(RCC_APB2ENR) " i% U: q# a9 ]+ X8 G2 n 对应位写1开启相应外设,写0关闭外设 2 B& G( @1 j5 h. e6 o) `" r 8、 APB1 外设时钟使能寄存器(RCC_APB1ENR)# ^0 k# o( F+ z7 b- l ' O+ h- {& v2 x. e: H- _% P+ S 对应位写1开启相应外设,写0关闭外设 7 q& k+ j [0 `/ B! A7 {* c 0 T9 P) {, g8 K) C/ q 9、备份域控制寄存器 (RCC_BDCR)7 D, e; x- Z/ W* u6 q& M% t$ a/ D7 b
! z' y9 Z9 b; G4 m 第0位LSEON:软件设置,外部低速振荡器使能:0:关闭,1:开启;4 B; J; @ i Z5 {! J( L: g 第1位LSERDY:硬件指示,外部低速LSE就绪:0:未就绪,1:就绪; " X F! i% |" C7 U0 Y: x 第15位RTCEN:RTC时钟使能:0:关闭,1开启;8 i2 G8 F. F" }4 K6 E 10、控制/状态寄存器(RCC_CSR) ) {" P% x% k( j7 V9 \
$ b# T# m9 Q! T) K# R. l 第0位LSION:软件设置,内部低速振荡器就绪:0,:40kHz振荡器时钟就绪 # D0 ~& C' K* D3 ^7 U 第1位LSIRDY:硬件指示,内部低速振荡器就绪:1:就绪,0:未就绪; 第29位IWDGRSTF窗口看门狗复位标志:1:发生窗口看门狗复位;0:未发生, k. G& t9 b% ?' T, K8 u4 x* i: {5 l # X# j6 ^' e0 \# G+ h7 n 第30位WWDGRSTF独立看门狗复位标志:1:发生独立看门狗复位;0:未发生 ^; h& K% g' C2 |, V 主要相关库函数: + W& |" G" ~" G4 o0 [# V* e 1、void RCC_DeInit(void);//将外设RCC寄存器设为缺省值; 2、void RCC_HSEConfig(uint32_t RCC_HSE);//设置外部高速晶振(HSE);- W; H$ i# T/ `. p . R5 x% T. R3 W& y* L. m' N 3、void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);//调整内部高速晶振(HSI)校准值, \( o2 C" U) m; \7 y 4 B/ E# [# t9 R8 j3 d& S8 ? 4、void RCC_HSICmd(FunctionalState NewState);//使能或者失能内部高速晶振(HSI) 3 S3 {+ h1 _$ K3 {+ x 5、void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);//设置PLL时钟源及倍频系数 4 `% C1 k' [, A& C) `" ^4 _ 6、void RCC_PLLCmd(FunctionalState NewState);//使能或者失能PLL 7、void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);//设置系统时钟(SYSCLK)源 : R0 ]! I) E% P3 d$ s6 | 8、void RCC_HCLKConfig(uint32_t RCC_SYSCLK);//设置AHB时钟(HCLK)% Z; X0 ^! G) l. v |8 h+ z) Q4 z; F& h; @8 Q+ h 9、void RCC_PCLK1Config(uint32_t RCC_HCLK);//设置低速AHB时钟(PCLK1)" r1 m8 o7 `0 u8 g Y% m 10、void RCC_PCLK2Config(uint32_t RCC_HCLK);//设置高速AHB时钟(PCLK2)1 ]9 W8 h" c; r D8 r 11、void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);//使能或者失能指定的RCC中断% k( D4 Q9 L( Q 12、 void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);//设置USB时钟(USBCLK) 7 y+ n. ~: `/ I+ \( ? 13、void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);//设置ADC时钟(ADCCLK)% w: D) b/ r d e" }; R3 Y& m $ ^7 m+ P* M- Y5 C# ^) a3 h7 w 14、void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//使能或者失能AHB外设时钟 15、void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//使能或者失能APB2外设时钟7 @7 ~7 ?* O2 Y9 ^5 C 16、void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//使能或者失能APB1外设时钟 @# `, G" B. k8 I" d) O! `- R 17、void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//强制或者释放高速AHB外设复位; g& q$ x+ g0 d0 ]( a: a 18、void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//强制或者释放高速APB(APB2)外设复位 19、void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//强制或者释放低速APB(APB1)外设复位 ) [4 z4 K5 E' X& D7 _; H1 K& X. r 20、void RCC_ClockSecuritySystemCmd(FunctionalState NewState);//使能或者失能时钟安全系统" F' N) m& e3 m' ]3 {; W! M & M' P* g% ~7 |/ l7 H$ h( M 21、void RCC_MCOConfig(uint8_t RCC_MCO);//选择在MCO管脚上输出的时钟源,警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。 & Z1 \* Q: a, T- ~5 R$ X* g6 |7 J 22、FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);//检查指定的RCC标志位 //RCC_FLAG_HSIRDY ,HSI晶振就绪;RCC_FLAG_HSERDY ,HSE晶振就绪;9 S5 a7 i5 k0 H //RCC_FLAG_PLLRDY ,PLL就绪;RCC_FLAG_LSERDY ,LSI晶振就绪; 9 j, Q: x% y% r8 H* {2 b5 K2 V- o //RCC_FLAG_LSIRDY ,LSE晶振就绪;RCC_FLAG_PINRST ,管脚复位 ; //RCC_FLAG_PORRST ,POR/PDR复位;RCC_FLAG_SFTRST ,软件复位 ;( T5 e2 z" G3 h4 a7 l' B2 D- H3 x0 c //RCC_FLAG_IWDGRST ,IWDG复位;RCC_FLAG_WWDGRST ,WWDG复位; + |9 F, M5 g6 W C( y/ Y+ } //RCC_FLAG_LPWRRST ,低功耗复位 23、void RCC_ClearFlag(void);//清除RCC的复位标志位 24、ITStatus RCC_GetITStatus(uint8_t RCC_IT);//检查指定的RCC中断发生与否 //输入:RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断 //RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断 - \7 W; C+ n! ?# B% I9 M' E //RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断 25、void RCC_ClearITPendingBit(uint8_t RCC_IT);//清除RCC的中断待处理位- H5 Y8 A8 S. M B3 b $ m9 Q7 C% ~, u- c0 D3 k/ F- | //RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断 6 w. `$ v5 W& o+ r- { L7 \! Z //RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断 . t/ ?( F8 z) ]2 z, O //RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断, O+ n% x* [5 l/ O- Q7 X ! W) D2 _9 `+ M6 u4 I |
【评分有奖】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数据配置详细过程
微信公众号
手机版