如何配置系统时钟为168MHZ
时间: 2024-05-19 11:11:04 浏览: 85
要将系统时钟配置为168MHZ,需要按照以下步骤进行操作:
1. 配置PLL时钟,将外部晶体振荡器的频率提高到336MHZ。需要使用STM32的时钟配置工具,设置PLL倍频系数为16,将输入时钟频率设置为外部晶体的频率。
2. 将系统时钟设置为PLL时钟的一半,即168MHZ。需要使用STM32的时钟配置工具,将系统时钟频率设置为PLL时钟频率的一半。
3. 配置Flash存储器接口,使其能够支持168MHZ的系统时钟。需要使用STM32的时钟配置工具,将Flash存储器的读取等待时间调整为2个时钟周期。
4. 配置其他外设时钟,使其与系统时钟同步。需要使用STM32的时钟配置工具,将外设时钟分频系数设置为适当的值,以将其与系统时钟同步。
完成以上步骤后,系统时钟即可成功配置为168MHZ。
相关问题
帮我写一个配置系统时钟为168MHz的代码
以下是配置STM32系列芯片系统时钟为168MHz的代码:
```
#include "stm32f4xx.h"
void SystemClock_Config(void);
int main(void)
{
// 初始化系统时钟
SystemClock_Config();
// 在这里写你的代码
while (1)
{
// 循环执行代码
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
// 使能电源时钟
__HAL_RCC_PWR_CLK_ENABLE();
// 配置系统时钟源为PLL
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 7;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
// 配置系统时钟为168MHz
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
{
Error_Handler();
}
}
```
其中,`SystemClock_Config()`函数用于配置系统时钟,`RCC_OscInitTypeDef`和`RCC_ClkInitTypeDef`结构体用于配置时钟源和时钟分频器。在`main()`函数中,先调用`SystemClock_Config()`函数初始化系统时钟,然后在主循环中执行你的代码。
帮我配置STM32芯片系统时钟为168MHZ代码
以下是配置STM32芯片系统时钟为168MHZ的代码:
```c
#include "stm32f4xx.h"
int main(void)
{
//使能HSE时钟
RCC->CR |= RCC_CR_HSEON;
while((RCC->CR & RCC_CR_HSERDY) == 0); //等待HSE时钟稳定
//配置PLL时钟
RCC->PLLCFGR |= RCC_PLLCFGR_PLLSRC_HSE; //PLL时钟源选择HSE
RCC->PLLCFGR |= (8 << RCC_PLLCFGR_PLLM_Pos); //PLL输入时钟分频系数为8
RCC->PLLCFGR |= (168 << RCC_PLLCFGR_PLLN_Pos); //PLL倍频系数为168
RCC->PLLCFGR &= ~(RCC_PLLCFGR_PLLP_Msk | RCC_PLLCFGR_PLLP_1); //PLL输出时钟分频系数为2
RCC->PLLCFGR |= RCC_PLLCFGR_PLLQ_3; //PLL时钟输出FCLK_Q分频系数为7
//使能PLL时钟
RCC->CR |= RCC_CR_PLLON;
while((RCC->CR & RCC_CR_PLLRDY) == 0); //等待PLL时钟稳定
//配置FLASH读取延迟和预取指数
FLASH->ACR |= FLASH_ACR_LATENCY_5WS;
FLASH->ACR |= FLASH_ACR_PRFTEN;
//配置系统时钟为PLL时钟
RCC->CFGR |= RCC_CFGR_SW_PLL;
while((RCC->CFGR & RCC_CFGR_SWS_PLL) != RCC_CFGR_SWS_PLL); //等待系统时钟切换完成
//配置AHB时钟为168MHZ
RCC->CFGR |= RCC_CFGR_HPRE_DIV1;
//配置APB1时钟为42MHZ
RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;
//配置APB2时钟为84MHZ
RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;
//其他配置
SystemCoreClockUpdate(); //更新系统时钟变量SystemCoreClock
//其他初始化代码
while(1);
}
```
上述代码中,首先使能HSE时钟,并等待其稳定;然后配置PLL时钟,包括选择PLL时钟源、输入时钟分频、倍频系数、输出时钟分频和时钟输出FCLK_Q分频等;接着使能PLL时钟,并等待其稳定;然后配置FLASH读取延迟和预取指数;再将系统时钟切换为PLL时钟,并等待切换完成;最后根据168MHZ时钟频率配置AHB、APB1和APB2时钟分频系数,并更新系统时钟变量SystemCoreClock。
需要注意的是,上述代码只适用于STM32F4系列芯片,其他系列芯片的时钟配置可能有所不同。另外,如果需要使用外部晶体振荡器作为时钟源,需要将上述代码中的RCC_PLLCFGR_PLLSRC_HSE改为RCC_PLLCFGR_PLLSRC_HSE_PREDIV。
阅读全文