while((RCC->CR & RCC_CR_PLLRDY) == 0)
时间: 2024-04-15 14:25:09 浏览: 27
这段代码是用于检测PLL锁定标志位是否为1,即等待PLL锁定。在这段代码中,RCC_CR_PLLRDY是一个位掩码,用于表示RCC_CR寄存器中的PLL锁定标志位。代码使用了按位与运算符&将RCC_CR寄存器的值与RCC_CR_PLLRDY进行按位与操作,然后检查结果是否等于0。如果等于0,说明PLL锁定标志位为0,即PLL未锁定;如果不等于0,说明PLL锁定标志位为1,即PLL已经锁定。
整个代码的作用是等待PLL锁定,即在PLL启动之后,等待PLL稳定并锁定之后才继续执行后续代码。这样做是为了确保在使用PLL时,其输出时钟已经稳定可靠,避免出现不确定的情况。
请注意,这段代码是根据某个特定的硬件平台和编程环境编写的,具体含义和使用方法可能会因平台和环境的不同而有所差异。
相关问题
void SystemInit(void) { u32 timeout; /* Enable HSI */ RCC->CR = 0x00000001; RCC->CFGR &= (uint32_t)0xF8FFB80C; timeout = 2000; while((!(RCC->CR & 0x00000002)) && (timeout--)); RCC->CFGR2 = RCC_CFGR_PPRE_DIV1; /* Enable HSE */ RCC->CR |= 0x00010000; timeout = 2000; while((!(RCC->CR & 0x00020000)) && (timeout--)); /* Enable Prefetch Buffer and set Flash Latency */ FLASH->ACR |= FLASH_ACR_PRFTBE;// | FLASH_ACR_LATENCY; /* HCLK = SYSCLK */ RCC->CFGR |= (u32)RCC_CFGR_HPRE_DIV1; /* PCLK = HCLK */ RCC->CFGR |= (u32)RCC_CFGR_PPRE_DIV1; /* PLL configuration = HSE * 2 = 16 MHz */ RCC->CFGR &= (u32)((u32)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMUL)); RCC->CFGR |= (u32)(RCC_CFGR_PLLSRC_HSE_PREDIV | RCC_CFGR_PPRE_DIV1 | RCC_CFGR_PLLMUL2); /* Enable PLL */ RCC->CR |= RCC_CR_PLLON; /* Wait till PLL is ready */ while((RCC->CR & RCC_CR_PLLRDY) == 0) { } /* Select PLL as system clock source */ RCC->CFGR &= (u32)((u32)~(RCC_CFGR_SW)); RCC->CFGR |= (u32)RCC_CFGR_SW_PLL; /* Wait till PLL is used as system clock source */ while ((RCC->CFGR & (u32)RCC_CFGR_SWS) != (u32)RCC_CFGR_SWS_PLL) { } }
这段代码中,`void SystemInit(void)`是一个函数的声明,函数名为`SystemInit`。这个函数没有参数,返回值为`void`。
在函数体中,第一行声明了一个变量`timeout`,这个变量是一个无符号整型(`u32`)。然后是一个结构体指针的成员赋值,`RCC->CR`被赋值为`0x00000001`。接下来,又有一个结构体指针的成员赋值,`RCC->CFGR`被赋值为一个未知的值。
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个单位(因为是从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; } }
这是一段 STM32 的初始化代码,它主要的功能是初始化系统时钟。其中,PLL 表示的是锁相环倍频器的倍数,通过设置 PLL 值来调整系统时钟频率。代码中还包括了外部高速时钟使能、等待外部时钟就绪、设置 APB1、APB2 和 AHB 总线的分频系数、等待 PLL 锁定等操作。最后,将 PLL 作为系统时钟并等待 PLL 作为系统时钟设置成功。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)