STMCU小助手
发布时间:2022-7-1 13:00
|
在时钟树的讲解中我们知道,通过修改PLLMUL中的倍系数值(2-16)可以改变系统的时钟频率。在库函数中也有对时钟倍频因子配置的函数,如下: void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);8 A1 ^2 s/ H$ P) ~2 T$ v 第一个参数是PLL时钟源选择,例程中一般采用的都是HSE作为PLL的时钟源,可以设置为RCC_PLLSource_HSE_Div1/RCC_PLLSource_HSE_Div2。第二个参数就是倍频因子值可以是RCC_PLLMul_2~RCC_PLLMul_16。方便修改系统时钟,这里自定义一个系统时钟初始化函数,将函数放在对应实验程序的main.c中。自定义系统时钟,可以通过修改PLL时钟源和倍频系数实现时钟调整具体代码如下: void RCC_HSE_Config(u32 div,u32 pllm) //自定义系统时间(可以修改时钟) { RCC_DeInit(); //将外设RCC寄存器重设为缺省值2 T* G3 t% m. T! I RCC_HSEConfig(RCC_HSE_ON);//设置外部高速晶振(HSE) if(RCC_WaitForHSEStartUp()==SUCCESS) //等待 HSE 起振 {4 j2 _# ?& S- \4 ]: u RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置AHB时钟(HCLK)6 U9 }1 Q' @; i7 C0 G. } RCC_PCLK1Config(RCC_HCLK_Div2);//设置低速AHB时钟(PCLK1)1 J+ [ J0 V/ j RCC_PCLK2Config(RCC_HCLK_Div1);//设置高速AHB时钟(PCLK2) RCC_PLLConfig(div,pllm);//设置PLL时钟源及倍频系数( `. J/ n3 j& `) z$ p {- {) r, Z9 G8 S RCC_PLLCmd(ENABLE); //使能或者失能PLL //检查指定的RCC标志位设置与否,PLL就绪 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET); //设置系统时钟(SYSCLK)+ j" n$ V* M4 d RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //返回用作系统时钟的时钟源,0x08:PLL作为系统时钟 while(RCC_GetSYSCLKSource()!=0x08); } } 函数具体实现过程在程序中已经注释,大家可以参考注释。在函数中设置倍频因子时,我们给他传递了形参中的变量,这样做的好处是当你调用此函数时,只需要修改传递给函数形参内的值即可修改系统时钟,无需修改函数内部程序。在未修改系统时钟时,系统初始化后的时钟是72M,对应着此函数参数设置如下: RCC_HSE_Config(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);* f# S! w" Y/ S. C1 Y 如果想让系统时钟为36M,只需要将参数值修改即可:/ g2 R+ P8 }- e RCC_HSE_Config(RCC_PLLSource_HSE_Div2,RCC_PLLMul_9); 此时修改的是div这个参数值,此参数用来对HSE时钟分频系数设置,从时钟树可知,HSE可以直接流入到PLLSRC,还可以经过2分频后给PLLSRC。它的取值为RCC_PLLSource_HSE_Div1或RCC_PLLSource_HSE_Div2。 最后我们可以通过一个LED指示灯闪烁速度来反映系统时钟修改后的效果。主函数代码如下: ! V: \3 B& V6 J int main() { RCC_HSE_Config(RCC_PLLSource_HSE_Div2,RCC_PLLMul_9); //36M LED_Init(); while(1)% q% k3 i& K6 v5 u {9 d* {3 O) T# ^" N ?- ~# r6 k GPIO_ResetBits(LED_PORT,GPIO_Pin_0);//点亮D1# V( d+ n4 j) S* _2 g4 h delay(6000000); GPIO_SetBits(LED_PORT,GPIO_Pin_0); delay(6000000);/ _& V2 `! o r: S" ? } } 如果将div原先的1值修改为2,此时系统时钟即为36M,相当于速度慢了一倍。LED闪烁的速度也就慢了一倍。注意:不要把STM32系统时钟设置超过72M使用,否则容易崩溃。 6 D/ V& ?" y+ Q5 m& [# A- V$ d1 ^ |
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于STM32时钟系统经验分享
STM32中的时钟系统
【经验分享】STM32G4之SysTick系统时钟
【经验分享】STM32F4系统时钟
【经验分享】STM32G4之RTC实时时钟
【经验分享】STM32入门系列-STM32时钟系统,STM32时钟树
【经验分享】STM32入门系列-STM32时钟系统,时钟使能配置函数
DFSDM 时钟配置问题
【经验分享】详解STM32的时钟系统
微信公众号
手机版