STM32系统时钟设置详解

配置主要代码如下,看起来挺简单,实际设计的东西还是挺多的,需要多看几遍,下面进行详解:

//系统时钟初始化函数

//pll:选择的倍频数,从2开始,最大值为16


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;
}    

}


(1)、MYRCC_DeInit(); 配置向量表

(2)、RCC->CR|=0x00010000;  使能外部高速时钟,由时钟控制寄存器(RCC_CR)的第16位控制。

              

                   

(3)、while(!(RCC->CR>>17));等待外部时钟就绪,外部时钟就绪后硬件置1

              

(4)、RCC->CFGR=0X00000400; 时钟配置寄存器(RCC_CFGR),设置低速APB1最大不超过36Mhz,由于系统最大为72Mhz,这里只需要设置为2分频,即100

              

                 

                       

(5)、 PLL-=2;和RCC->CFGR|=PLL<<18;   用来设置锁相环,由于外部使用的晶振为8Mhz,这样我们调用系统时钟时会设置为9(Stm32_Clock_Init(9);),这样会得到72Mhz的系统时钟,但是这样PLL 11倍频输出,这样系统时钟变成了8*11=88Mhz,因此需要先将PLL减2得到7,即0111,这样得到PLL 9倍频输出,8*9=72Mhz,这样就OK啦。

                

(6)、RCC->CFGR|=1<<16; 打开PLL时钟源。

              

                  

                          

(7)、FLASH->ACR|=0x32;延时一下,让CPU歇会

(8)、RCC->CR|=0x01000000;   PLL使能

              

                 

                         

(9)、while(!(RCC->CR>>25));PLL时钟就绪硬件置1

(10)、RCC->CFGR|=0x00000002;设置PLL作为系统时钟

                 

                      

(11)、while(temp!=0x02)     //等待PLL作为系统时钟设置成功
{   
temp=RCC->CFGR>>2;
temp&=0x03;
}  用来查询系统时钟设置是否正常,配置正常后相应位硬件置1

        

(12)完成


总的来说有以下8部分组成:

1、打开外部晶振振荡器,由第16位控制,检测外部振荡器打开是否正常,由第17位指示

2、配置APB1时钟不超过36Mhz

3、设置锁相环的值

4、设置外部时钟PLL作为输入

5、稍微延时

6、启动锁相环,并检测工作是否正常

7、锁相环时钟正常之后,将它作为系统时钟

8、等待配置成功

        

                      

  • 9
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32系统时钟是指控制STM32芯片内部各个模块和外设运行的时钟信号。STM32时钟系统相对复杂,对于初学者来说可能会感到困惑。时钟系统的重要性不言而喻,它类似于人体的心脏脉搏,是整个系统的基础。\[1\] 为了更好地理解STM32时钟系统,初学者可以参考开发板的源码进行设置,但这种方法可能会导致在遇到问题或需要修改代码时感到困惑。要深入理解STM32时钟系统,以便进行底层驱动设计,需要对其有更深入的了解。\[2\] 在配置STM32时钟系统时,可以根据实际情况进行自定义设置。一般情况下,可以以大容量芯片72MHz的系统时钟为例进行讲解,原理都是一样的。\[3\] 总之,STM32系统时钟是控制芯片内部各个模块和外设运行的关键信号,对于深入理解和设计底层驱动非常重要。 #### 引用[.reference_title] - *1* *3* [STM32-时钟系统详解](https://blog.csdn.net/qq_44016222/article/details/123223733)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【STM32】初学者必读STM32时钟系统详解](https://blog.csdn.net/m0_54916619/article/details/130182697)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值