新手上路
- 积分
- 32
- 金钱
- 32
- 注册时间
- 2018-4-16
- 在线时间
- 10 小时
|
STM32PLL时钟配置函数:
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个单位 //这里PLL减去2是因为倍频系数从2开始,但倍频寄存器值从 0000开始,即如果是9倍频,则倍频寄存器应写0111。
RCC->CFGR|=PLL<<18; //设置PLL值 2~16
RCC->CFGR|=1<<16; //由软件置’1’或清’0’来选择PLL输入时钟源。该位只有在PLL关闭时才 可以被写入。
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;
}
}
个人理解:初始值temp=0,temp!=0x02所以执行while(temp!=0x02)内语句,但RCC->CFGR>>2值应该是多少呢?求大神指导?
还有就是RCC->CFGR|=0x00000002;这条语句等效于RCC->CFGR=RCC->CFGR|0x00000002这个结果应该是多少呢?如果这个结果不知道那么RCC->CFGR>>2也就不清楚了
|
|