STM32系统时钟初始化程序。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32系统时钟初始化程序。相关的知识,希望对你有一定的参考价值。

void Stm32_Clock_Init(u8 PLL)

unsigned char temp=0;
MYRCC_DeInit(); //复位并配置向量表
RCC->CR|=0x00010000; //外部高速时钟使能HSEON
while(!(RCC->CR>>17));//等待外部时钟就绪
RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;
PLL-=2;//抵消2个单位
RCC->CFGR|=PLL<<18; //设置PLL值 2~16
RCC->CFGR|=1<<16; //PLLSRC ON
FLASH->ACR|=0x32; //FLASH 2个延时周期

RCC->CR|=0x01000000; //PLLON
while(!(RCC->CR>>25));//等待PLL锁定
RCC->CFGR|=0x00000002;//PLL作为系统时钟
while(temp!=0x02) //等待PLL作为系统时钟设置成功

temp=RCC->CFGR>>2;
temp&=0x03;



RCC->CFGR|=PLL<<18; //设置PLL值 2~16
RCC->CFGR|=1<<16; //PLLSRC ON
这两句都对配置寄存器赋值,后面一句不会把前面赋的值覆盖了么?

不会的,这两句用的是位或的方式,前面那句 PLL<<18位,因为 PLL最小是2,所以
这句执行的结果是 影响 CFGR 的第 19位以上,因为 2<<18 相当于 1<<19,所以影响的最小位是19位,后面那句 1<<16,只影响到CFGR的第16位, 两者不在同一区域,所以互不影响.
而且,后面的 1<<16位,只能第16位是1,其他位全是 0,跟前面的位或,不会影响其他位.
参考技术A 看一个软件工程的时候,首先要从这个工程的启动文件开始看起,建议你看看stm32工程中的startup_stm32f10x_hd.s文件,在其中除了stm32内存堆栈的设置和中断向量入口之外,还包含了stm32启动的整个过程,在3.5的库中,你会发现这个启动文件中包含.

stm8时钟

为使系统快速启动,复位后时钟控制器自动使用HSI8分频(HSI/8)做为主时钟(2M)。其原因为HSI的稳定时间短,而8分频可保证系统在较差的VDD条件下安全启动。
一旦主时钟源稳定,用户程序可将主时钟切换到另外的时钟源 。

 

以上是关于STM32系统时钟初始化程序。的主要内容,如果未能解决你的问题,请参考以下文章

stm32为啥要配置系统时钟

stm32单片机时钟中断的配置

STM32内部时钟设置-寄存器版

mdk硬件仿真STM32 怎么查看当前系统时钟

STM32F7系列时钟相关问题:HSE模式配置(旁路模式非旁路模式

STM32时钟系统