RCC_HSE_Configuration
时间: 2023-11-16 08:55:16 浏览: 96
根据提供的引用内容,RCC_HSE_Configuration应该是一个函数名,但是在提供的引用中并没有出现这个函数。不过,我们可以根据提供的引用内容来了解一下RCC_PLLConfig和RCC_HSEConfig这两个函数的作用。
RCC_HSEConfig函数用于配置外部高速时钟(HSE),该函数的参数为RCC_HSE_ON或RCC_HSE_OFF,用于开启或关闭外部高速时钟。而RCC_PLLConfig函数用于配置PLL(锁相环)的输入时钟源和倍频因子,该函数的参数为RCC_PLLSource和RCC_PLLMul,用于设置PLL的输入时钟源和倍频因子。
综上所述,RCC_HSE_Configuration可能是一个自定义的函数名,用于配置外部高速时钟和PLL的输入时钟源和倍频因子。如果您能提供更多关于RCC_HSE_Configuration的信息,我可以更准确地回答您的问题。
相关问题
/** * @brief System Clock Configuration * @retval None */ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0};//定义结构体变量RCC_OscInitStruct RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};//定义结构体变量RCC_ClkInitStruct RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};//定义结构体变量PeriphClkInit /** Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV2; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.LSIState = RCC_LSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** Initializes the CPU, AHB and APB busses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC; PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) { Error_Handler(); } }
SystemClock_Config函数是用来配置系统时钟的。它执行了以下操作:
1. 初始化CPU、AHB和APB总线时钟。
2. 配置振荡器类型:使用LSI和HSE两种振荡器。
3. 配置HSE状态为旁路模式(BYPASS)。
4. 配置HSE预分频值为2。
5. 配置HSI状态为开启。
6. 配置LSI状态为开启。
7. 配置PLL状态为开启。
8. 配置PLL时钟源为HSE。
9. 配置PLL倍频因子为12。
10. 调用HAL_RCC_OscConfig函数配置时钟,并检查返回值是否为HAL_OK,如果不是则调用Error_Handler函数进行错误处理。
11. 初始化CPU、AHB和APB总线时钟。
12. 配置系统时钟源为PLL时钟。
13. 配置AHB时钟分频系数为1。
14. 配置APB1时钟分频系数为2。
15. 配置APB2时钟分频系数为1。
16. 调用HAL_RCC_ClockConfig函数配置时钟,并检查返回值是否为HAL_OK,如果不是则调用Error_Handler函数进行错误处理。
17. 配置外设时钟:配置ADC外设时钟分频系数为6。
18. 调用HAL_RCCEx_PeriphCLKConfig函数配置外设时钟,并检查返回值是否为HAL_OK,如果不是则调用Error_Handler函数进行错误处理。
这个函数的作用是根据具体的系统需求配置系统时钟,确保各个外设能够正常工作。
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`被赋值为一个未知的值。
阅读全文