中级会员
 
- 积分
- 353
- 金钱
- 353
- 注册时间
- 2019-4-22
- 在线时间
- 83 小时
|
1金钱
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个单位(因为是从2开始的,设置0就是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;
}
}
最后while循环内应是判断RCC->CFGR寄存器 SWS[1:0]是否置1,如果未置1,则不断在while内循环;若置1,右移2位后最低位为1,与上0x03还是0x03,并不与while内的0x02相等,这样不是一直都在while内循环了?还请各位朋友指导一下,谢谢
|
|