while(RCC_GetFlagStatus(RCC_FLAG_HSERDY)==RESET)这句代码什么意思
时间: 2024-06-02 16:11:27 浏览: 18
这行代码是在等待外部高速晶体振荡器(HS)就绪。在使用HS作为系统时钟源之前,必须等待HS稳定并就绪。RCC_GetFlagStatus函数用于检查指定的RCC标志是否已设置。在这里,RCC_FLAG_HSERDY是指HS就绪标志。当HS就绪时,函数返回SET,否则返回RESET。因此,while循环等待HS就绪,直到函数返回SET,然后程序才会继续执行。
相关问题
#include "stm32f10x.h" ErrorStatus HSEStartUpStatus; int main(void) { RCC_ClocksTypeDef clocks; RCC_DeInit(); RCC_HSEConfig(RCC_HSE_ON); HSEStartUpStatus=RCC_WaitForHSEStartUp(); if( HSEStartUpStatus==SUCCESS) {//继续正常RCC操作 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); FLASH_SetLatency(FLASH_Latency_1); RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLK2Config(RCC_HCLK_Div1); RCC_PCLK1Config(RCC_HCLK_Div2); RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//8*9=72MHz RCC_PLLCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET); RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while(RCC_GetSYSCLKSource()!=0x08);//等待SYSCLK为PLLCLK RCC_GetClocksFreq(&clocks); while(1);//在此设中断后可通过读取clocks变量的成员值获取当前的时钟 } }改写此代码要求HSE8MHz、SYSCLK、HCLK、PCLK2为36MHz,PCLK1为18MHz。
#include "stm32f10x.h"
ErrorStatus HSEStartUpStatus;
int main(void) {
RCC_ClocksTypeDef clocks;
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if (HSEStartUpStatus == SUCCESS) {
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_1);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_4); // 8 * 4 = 32MHz
RCC_PLLCmd(ENABLE);
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while (RCC_GetSYSCLKSource() != RCC_CFGR_SWS_PLL); // 等待SYSCLK为PLLCLK
RCC_HCLKConfig(RCC_SYSCLK_Div1); // HCLK = SYSCLK = 32MHz
RCC_PCLK2Config(RCC_HCLK_Div1); // PCLK2 = HCLK = 32MHz
RCC_PCLK1Config(RCC_HCLK_Div2); // PCLK1 = HCLK / 2 = 16MHz
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); // 8 * 9 = 72MHz
RCC_PLLCmd(ENABLE);
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while (RCC_GetSYSCLKSource() != RCC_CFGR_SWS_PLL); // 等待SYSCLK为PLLCLK
RCC_GetClocksFreq(&clocks);
while (1);
}
}
RCC_Configuration()解读代码
RCC(Reset and Clock Control)是STM32系列芯片中的一个模块,用于控制系统时钟和复位信号。RCC_Configuration()是一个函数,用于配置RCC模块的各个参数。
以下是该函数的代码解读:
```c
void RCC_Configuration(void)
{
/* Enable HSE */
RCC_HSEConfig(RCC_HSE_ON);
/* Wait till HSE is ready */
while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);
/* Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* Flash 2 wait state */
FLASH_SetLatency(FLASH_Latency_2);
/* AHB = HCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* APB1 = HCLK/2 */
RCC_PCLK1Config(RCC_HCLK_Div2);
/* APB2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1);
/* PLLCLK = 8MHz * 9 = 72 MHz */
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
/* Enable PLL */
RCC_PLLCmd(ENABLE);
/* Wait till PLL is ready */
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
/* Select PLL as system clock source */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/* Wait till PLL is used as system clock source */
while (RCC_GetSYSCLKSource() != 0x08);
}
```
1. `RCC_HSEConfig(RCC_HSE_ON)`:使能外部高速时钟(HSE)。
2. `while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET)`:等待HSE稳定。
3. `FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable)`:使能Flash预取指缓存。
4. `FLASH_SetLatency(FLASH_Latency_2)`:设置Flash访问延迟为2个时钟周期。
5. `RCC_HCLKConfig(RCC_SYSCLK_Div1)`:设置AHB总线时钟(HCLK)为系统时钟(SYSCLK)的1分频。
6. `RCC_PCLK1Config(RCC_HCLK_Div2)`:设置APB1总线时钟(PCLK1)为HCLK的2分频。
7. `RCC_PCLK2Config(RCC_HCLK_Div1)`:设置APB2总线时钟(PCLK2)为HCLK的1分频。
8. `RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9)`:配置PLL时钟源为HSE,倍频因子为9,计算得到PLLCLK=8MHz*9=72MHz。
9. `RCC_PLLCmd(ENABLE)`:使能PLL。
10. `while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)`:等待PLL稳定。
11. `RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK)`:将PLLCLK作为系统时钟源。
12. `while (RCC_GetSYSCLKSource() != 0x08)`:等待PLLCLK成为系统时钟源。
总的来说,该函数的作用是将系统时钟设置为外部高速时钟经过PLL倍频后得到的72MHz,并对Flash预取指缓存、AHB总线时钟、APB1总线时钟、APB2总线时钟等进行了相关配置。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)