口诀:山药,你切,你撒,药酒,要我,摇摇,切,散。 //你爸,你死,你定,要裸。要你,爸,死,定。
寄存器查看时对照stm32参考手册
void Stm32_Clock_Init(u8 PLL)//(2到16倍频)
{
unsigned char temp=0; //用于判断目前系统时钟的来源
u32 temp1=0;//用于判断高外时钟就绪(位17)
//MYRCC_DeInit(); //复位并配置向量表
RCC->APB1RSTR = 0x00000000;//内设时钟复位结束
RCC->APB2RSTR = 0x00000000;
RCC->AHBENR = 0x00000014; //闪存和SRAM睡眠下开。其他关闭.
RCC->APB2ENR = 0x00000000; //内设时钟关闭.
RCC->APB1ENR = 0x00000000;
RCC->CR |= 0x00000001; //高内时钟开 HSION
RCC->CFGR &= 0xF8FF0000; //时钟脚输出关。内设时钟全不分频。系统切换高内时钟
RCC->CR &= 0xFEF6FFFF; //倍频器关。安全时钟关。高外时钟关
RCC->CR &= 0xFFFBFFFF; //高外旁路关(高外关了才能改旁路)
RCC->CFGR &= 0xFF80FFFF; //usb1.5倍频,PLL2倍频,高外不分频,倍频器时钟来源(高内2分频)
RCC->CIR = 0x00000000; //关闭晶振所有中断
//配置向量表
//NVIC_VectTab:基址0x08000000
//Offset:偏移量0x0
SCB->VTOR = NVIC_VectTab|(Offset & (u32)0x1FFFFF80);//设置NVIC的向量表偏移寄存器
RCC->CR|=0x00010000; //高外开HSEON
temp1=RCC->CR;//用于仿真时查看位17
while(!(RCC->CR>>17));//等待高外时钟就绪
RCC->CFGR=0X00000400; //系统用高内时钟,APB1为2分频
PLL-=2;//抵消2个单位(晶振8M要72M倍率9写值需要0111)
RCC->CFGR|=PLL<<18; //设置PLL范围2~16(21 20 19 18设置0000是2倍频0111是9倍频)
RCC->CFGR|=1<<16; //倍频器钟源 高外
FLASH->ACR|=0x32; //FLASH 2个延时周期
RCC->CR|=0x01000000; //倍频器开
while(!(RCC->CR>>25));//等待PLL锁定
RCC->CFGR|=0x00000002;//PLL作为系统时钟
while(temp!=0x02) //等待PLL作为系统时钟设置成功
{
temp=RCC->CFGR>>2;
temp&=0x03;//判断位3位2的状态(RCC->CFGR寄存器10为系统钟源PLL)
}
}
谁能帮我发下参考手册56页那张图啊。{图8 时钟树} |