STMCU小助手
发布时间:2021-11-27 10:06
|
STM32f1时钟系统 , T6 f0 {2 @# P: {5 f' q% H9 d 一、祭出STM32F1的官方时钟框图 ! N* l* d$ P! B7 L' F
( g. O, x7 ^$ W( K
. e5 @3 ~1 P' [3 @ $ u) W6 N" O# j/ | 二、寄存器说明8 b+ C* ]5 m& k9 V1 T0 T 1、时钟控制寄存器RCC_CR A) g4 P- `9 o
第0位:HSION(0,关闭;1,开启) 第1位:HSIRDY(0,HSI未就绪;1,HSI就绪) : T2 ~! d5 P% \ 第16位:HSEON(0,关闭;1,开启) 第17位:HSERDY(0,HSE未就绪;1,HSE就绪) 8 k; z% i, C( ^9 O. [7 e$ Y 第19位:CSSON(0,时钟检测关闭;1,时钟监控开启): n# @3 p: G. N, d* W' ^% H8 G- n) J) G 第24位:PLLON(0,关闭PLL;1,使能PLL)2 x- j' I( B4 R7 u& n2 b4 N N ! K' n O8 A$ t/ s: v) ^4 z 第25位:PLLRDY(0,PLL未锁定,1:PLL锁定) : R6 m& v l# |, e, b z4 Y 2、时钟配置寄存器RCC_CFGR- w. S+ Z6 X* ?$ F/ d" N0 L/ I0 a E
7 `2 {& v6 u: B7 s1 G1 @! M 第1:0位SW: 软件设置时钟源 ! z* [$ |) `- v& F3 u$ L8 q 00:HSI为系统时钟 `8 V& q5 ]8 ]0 z8 c8 K n 01:HSE为系统时钟2 w/ j( o$ u) T; j' e& e * G: F% T' `( N1 X" H: ? 10:PLL作为系统时钟- c7 K- `5 D: Q* G) j+ H 11:时钟不可用 第3:2位SWS:硬件指示时钟源 7 [1 o6 D+ q. L/ u2 D9 V4 v) O! \0 A 00:HSI为系统时钟 01:HSE为系统时钟5 U8 m: Z2 C: E& h! B6 c ~ 10:PLL作为系统时钟 $ N: @) g% d; H5 x 11:时钟不可用# `0 E F, n0 B$ j9 M/ C+ ? 第7:4位HPRE:软件设置AHB的分频系数(具体见参考手册) M% l& K0 Q; N8 Y: F5 N7 C1 k7 d# | 5 y3 h. y1 h7 k+ E
+ C L; \4 T+ d5 B 第10:8位PPPRE1:软件设置低速APB1(PCLK1)的与分频系数(具体见参考手册) : E) C a" f Z+ V
. a: o, e c( ?6 n/ x9 }) [2 U! Q0 K 第13:11位PPPRE2:软件设置高速APB2(PCLK2)的预分频系数(具体见参考手册)5 F6 ^- L- g5 O4 I- ]( z7 o: Z
第15:14位ADCPPE:软件设置ADC的时钟频率(最大14Mhz)
6 ?7 \# y/ I" W, l; i3 A* m' F 00:APB2的2分频4 z7 ]& N, V6 w B5 d8 s; k & u. \7 q0 _) }; d 01:APB2的4分频 , x0 B" X Q; W. ?* ], ~ 10:APB2的6分频- m" u- |( q v6 \1 N" B) g) j 11:APB2的8分频+ S0 Y0 K/ r/ M- z; k; b( m 第16位PLLSRC:软件选择PLL的时钟源(关闭PLL时写入)' a" w0 @$ N! X( l' A+ d) j 9 F9 Y/ m* Y: b5 ~
0 g! l7 |5 c! D 0:HSI的2分频作为PLL的输入时钟3 e/ U9 r: f" [8 \! ^ " m: J+ c) {. W8 D 1:HSE作为PLL的输入时钟 + I6 F; n+ G# P9 T 第17位PLLXTPRE:软件选择HSE作为PLL输入时是否分频 D4 j0 q: X% P' Z% A% X. p % z# m$ u: ?! P+ C7 ]: x; w8 z + u+ X9 ~( P% r/ R5 P7 A9 l% e 0:HSE不分频 - J# S, [# l8 T: w& \ 1:HSE 2分频 # N! C; ~ p: \* a* D/ ^ 第21:18位PLLMUL:软件设置PLL的倍频系数(最高不超过72M,实测超过100M后还能工作)( _. U1 P# X9 j! X N% K2 ` ; S5 ~+ `% L2 |+ ^8 d5 W
详见参考手册 第22位USBPRE:软件设置USB时钟* J6 R3 c, K! l9 l. h4 r 4 d0 D7 N) [# g$ Y( ^* ]2 M! e: O, ]
& c0 b( @6 ^6 u 0:PLL时钟1.5倍分频作为USB时钟 . o/ c( h0 F8 v$ Y 1:PLL直接作为USB时钟 / T; U. l; B# A. O 第26:24位MCO:时钟输出PA8引脚(对于STM32F1来说,最高频率不能超过IO口的频率50Mhz) + ]" }3 N& m1 @# ~- a , T1 O& Y: X6 q5 [* v9 q. D: C/ F 0xx:无输出/ _# a. C, ?' l9 x 100:输出系统时钟SYSCLK 101:HSI输出 % F# T3 O6 H) v2 v 110:HSE输出 5 _% @0 r+ U/ i( |" A 111:PLL的2分频输出. `4 K' ?- h! [+ f( p / ^7 @2 F$ e6 l 3、时钟中断寄存器RCC_CIR 4、APB2外设复位寄存器(RCC_APB2RSTR)" L3 \/ `; F$ R" D; F% Z; R+ W8 I # v# Y) i7 O6 ]- a+ O( f 对应位写1复位相应外设,写0无作用& N7 G+ ?* X, p x1 V : ?$ ]# ?) W5 p- q7 F
9 a2 k' W4 d6 d( \, e) x L 5、APB1 外设复位寄存器 (RCC_APB1RSTR) / C' _' e# V l: p G8 Q 对应位写1复位相应外设,写0无作用$ d3 e& V* ~8 K+ i3 a' i* l. y 3 p" F, q( w* U( r3 W; f
6、 AHB外设时钟使能寄存器 (RCC_AHBENR) " u/ K& A( c9 t& o 对应位写1开启相应外设,写0关闭外设: [% F: `0 D/ G* Y, V" Q# a4 y 0 S# R- }' d6 x' q/ l! A3 A/ L5 x$ e 6 Y0 w w- O8 r 7、 APB2 外设时钟使能寄存器(RCC_APB2ENR) 对应位写1开启相应外设,写0关闭外设 ! ], h2 A9 f& q" a* D) Y 8、 APB1 外设时钟使能寄存器(RCC_APB1ENR)% K0 v( O3 ], n 9 e* T) @, _$ p8 [6 d( j& c# Q. t! F 对应位写1开启相应外设,写0关闭外设 , Z' O) a5 z6 n Y) q 9、备份域控制寄存器 (RCC_BDCR) - o" B4 U5 h6 i0 e9 X# F) A
第0位LSEON:软件设置,外部低速振荡器使能:0:关闭,1:开启; 9 {+ r2 P! l% u 第1位LSERDY:硬件指示,外部低速LSE就绪:0:未就绪,1:就绪;: s* }+ d: ^1 A1 H0 O + z2 o) h5 V. b 第15位RTCEN:RTC时钟使能:0:关闭,1开启; ' d9 r; F2 V! ~ 10、控制/状态寄存器(RCC_CSR) y1 q+ g% l1 w5 s4 E+ W
& N! e/ e& y9 ^/ q- \* K% A. M 第0位LSION:软件设置,内部低速振荡器就绪:0,:40kHz振荡器时钟就绪 第1位LSIRDY:硬件指示,内部低速振荡器就绪:1:就绪,0:未就绪; . g) o8 t+ Z! J' Q2 q) B 第29位IWDGRSTF窗口看门狗复位标志:1:发生窗口看门狗复位;0:未发生 6 X& S1 v) B& l, h, X/ q 第30位WWDGRSTF独立看门狗复位标志:1:发生独立看门狗复位;0:未发生+ j, Y( e- a+ E* _5 w' p; j% Z ' f& O+ l4 r3 @- M* S ) `" h% ^* |3 D5 q, P! I$ y) F2 ` 主要相关库函数:; L4 Z% L, W4 n | 1、void RCC_DeInit(void);//将外设RCC寄存器设为缺省值;+ V V( Y/ x2 k n/ W# z 2、void RCC_HSEConfig(uint32_t RCC_HSE);//设置外部高速晶振(HSE);/ F9 s; Y, V) g; o) K; [ . V' k% j% c8 a: v( Q" l3 M 3、void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);//调整内部高速晶振(HSI)校准值. v, }9 n; ~. U3 Q # \' g8 J k. k 4、void RCC_HSICmd(FunctionalState NewState);//使能或者失能内部高速晶振(HSI)7 y, a. ~. x5 M7 U5 D) m& j 5 z% b: [+ s# s8 q' |: h \ 5、void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);//设置PLL时钟源及倍频系数5 m# L3 S. p% I( V. s 6、void RCC_PLLCmd(FunctionalState NewState);//使能或者失能PLL 3 b5 N" F' T6 y* D 7、void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);//设置系统时钟(SYSCLK)源4 Q9 J( G S9 I- f- q1 e. r: s 8、void RCC_HCLKConfig(uint32_t RCC_SYSCLK);//设置AHB时钟(HCLK)# f. f& Y Y3 M! h9 z+ m# ?$ ` 9、void RCC_PCLK1Config(uint32_t RCC_HCLK);//设置低速AHB时钟(PCLK1)& F& G0 I$ N' e3 V- R 5 W# {5 y& A9 y9 F 10、void RCC_PCLK2Config(uint32_t RCC_HCLK);//设置高速AHB时钟(PCLK2)2 K6 D6 l3 \& I 11、void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);//使能或者失能指定的RCC中断( R( o3 a9 c9 U 3 P4 j" R/ A' a/ S 12、 void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);//设置USB时钟(USBCLK) 8 h& G8 T$ E/ F, W# @/ ? 13、void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);//设置ADC时钟(ADCCLK) ; ~. x0 |, H. g1 B! L4 [ 14、void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//使能或者失能AHB外设时钟% j: x6 }' b, b/ P/ i 15、void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//使能或者失能APB2外设时钟) }+ q* n' f O8 @ R( t ' F& t# l$ W# Z5 ^ 16、void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//使能或者失能APB1外设时钟/ a2 B: e; W, G1 `4 u% a& ~0 } 17、void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//强制或者释放高速AHB外设复位 " w% W- h8 h0 u; [7 u1 G* l5 {) P" K 18、void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//强制或者释放高速APB(APB2)外设复位: x9 T3 k: o, | 19、void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//强制或者释放低速APB(APB1)外设复位 + `- b1 U4 J5 g 20、void RCC_ClockSecuritySystemCmd(FunctionalState NewState);//使能或者失能时钟安全系统# t& z' h% ^( h/ r* H% S( O 21、void RCC_MCOConfig(uint8_t RCC_MCO);//选择在MCO管脚上输出的时钟源,警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。4 P1 ^! l8 h! D8 S 22、FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);//检查指定的RCC标志位 //RCC_FLAG_HSIRDY ,HSI晶振就绪;RCC_FLAG_HSERDY ,HSE晶振就绪; //RCC_FLAG_PLLRDY ,PLL就绪;RCC_FLAG_LSERDY ,LSI晶振就绪; //RCC_FLAG_LSIRDY ,LSE晶振就绪;RCC_FLAG_PINRST ,管脚复位 ; 2 w7 B' x" u6 w) u2 T P //RCC_FLAG_PORRST ,POR/PDR复位;RCC_FLAG_SFTRST ,软件复位 ;$ K" }5 c+ ^! o //RCC_FLAG_IWDGRST ,IWDG复位;RCC_FLAG_WWDGRST ,WWDG复位; //RCC_FLAG_LPWRRST ,低功耗复位 23、void RCC_ClearFlag(void);//清除RCC的复位标志位 24、ITStatus RCC_GetITStatus(uint8_t RCC_IT);//检查指定的RCC中断发生与否 . q; G9 W1 N/ Q1 L //输入:RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断0 C6 b w* j i6 p 1 N1 y1 \8 @3 V. C$ { //RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断# x! Y8 r* m+ ~$ r - X+ p5 W7 q7 [0 v+ \7 }* n8 v //RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断8 G6 s9 w( d) R5 d! x9 F8 Q ( Z7 X W, t$ R- T- q5 E, z 25、void RCC_ClearITPendingBit(uint8_t RCC_IT);//清除RCC的中断待处理位 //RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断3 J2 O+ j- N3 W3 R- _ //RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断 W y! h5 v: V" b# }$ _ //RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断 2 ?* L( j( \6 c5 ~9 k |
【评分有奖】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数据配置详细过程
微信公众号
手机版