RCC_PCLK2Config(RCC_HCLK_Div2);是什么意思
时间: 2024-06-04 18:06:20 浏览: 7
这是一条STM32的代码,用于配置RCC(Reset and Clock Control)时钟模块的PCLK2时钟源。其中,RCC_HCLK_Div2表示将系统的HCLK时钟(高速总线时钟)除以2后作为PCLK2时钟的输入源,即PCLK2时钟频率为HCLK时钟频率的一半。PCLK2时钟主要用于一些外设的时钟控制,比如定时器、SPI、I2C等外设。
相关问题
#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_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_DIV4; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) { Error_Handler(); } }
这段代码是使用HAL库进行STM32的时钟配置。首先,通过设置RCC_ClkInitStruct.ClockType来选择要配置的时钟类型,包括HCLK、SYSCLK、PCLK1和PCLK2。然后,将RCC_ClkInitStruct.SYSCLKSource设置为RCC_SYSCLKSOURCE_PLLCLK,以将PLL作为系统时钟源。接着,设置RCC_ClkInitStruct.AHBCLKDivider为RCC_SYSCLK_DIV1,将AHB时钟分频系数设置为1。然后,设置RCC_ClkInitStruct.APB1CLKDivider为RCC_HCLK_DIV4,将APB1时钟分频系数设置为4。最后,设置RCC_ClkInitStruct.APB2CLKDivider为RCC_HCLK_DIV2,将APB2时钟分频系数设置为2。调用HAL_RCC_ClockConfig函数来配置时钟,并通过判断返回值是否等于HAL_OK来检查是否配置成功。如果配置失败,则会调用Error_Handler函数进行错误处理。