STM32F103 时钟配置

STM32F103 时钟配置

STM32F103外部8M的振荡器,经过倍频后最高可以达到72M。

void RCC_DeInit(void)        将外设RCC寄存器重设为缺省值
void RCC_HSEConfig(u32 RCC_HSE)    设置外部高速晶振(HSE)
    RCC_HSE    取值如下:
        RCC_HSE_OFF     HSE晶振OFF
        RCC_HSE_ON     HSE晶振ON

        RCC_HSE_Bypass     HSE晶振被外部时钟旁路
ErrorStatus RCC_WaitForHSEStartUp(void) 等待HSE起振
该函数将等待直到HSE就绪,或者在超时的情况下退出
    返回值
一个ErrorStatus枚举值:
SUCCESS:HSE晶振稳定且就绪
ERROR:HSE晶振未就绪
void RCC_HCLKConfig(u32 RCC_HCLK) 设置AHB时钟(HCLK)
AHB(HCLK)时钟源自系统时钟(SYSCLK)
RCC_HCLK 取值如下:
RCC_SYSCLK_Div1 AHB时钟 = 系统时钟
RCC_SYSCLK_Div2 AHB时钟 = 系统时钟 / 2
RCC_SYSCLK_Div4 AHB时钟 = 系统时钟 / 4
RCC_SYSCLK_Div8 AHB时钟 = 系统时钟 / 8
RCC_SYSCLK_Div16 AHB时钟 = 系统时钟 / 16
RCC_SYSCLK_Div64 AHB时钟 = 系统时钟 / 64
RCC_SYSCLK_Div128 AHB时钟 = 系统时钟 / 128
RCC_SYSCLK_Div256 AHB时钟 = 系统时钟 / 256
RCC_SYSCLK_Div512 AHB时钟 = 系统时钟 / 512
void RCC_PCLK2Config(u32 RCC_PCLK2) 设置高速AHB时钟(PCLK2)
PCLK2时钟源自AHB时钟(HCLK)
RCC_PCLK2输入参数:
RCC_HCLK_Div1 APB2时钟 = HCLK
RCC_HCLK_Div2 APB2时钟 = HCLK / 2
RCC_HCLK_Div4 APB2时钟 = HCLK / 4
RCC_HCLK_Div8 APB2时钟 = HCLK / 8
RCC_HCLK_Div16 APB2时钟 = HCLK / 16
void RCC_PCLK1Config(u32 RCC_PCLK1) 设置低速AHB时钟(PCLK1)
RCC_PCLK1输入参数
RCC_HCLK_Div1 APB1时钟 = HCLK
RCC_HCLK_Div2 APB1时钟 = HCLK / 2
RCC_HCLK_Div4 APB1时钟 = HCLK / 4
RCC_HCLK_Div8 APB1时钟 = HCLK / 8

RCC_HCLK_Div16 APB1时钟 = HCLK / 16
void RCC_PLLConfig(u32 RCC_PLLSource, u32 RCC_PLLMul) 设置PLL时钟源及倍频系数
RCC_PLLSource输入参数
RCC_PLLSource_HSI_Div2 PLL的输入时钟 = HSI时钟频率除以2
RCC_PLLSource_HSE_Div1 PLL的输入时钟 = HSE时钟频率
RCC_PLLSource_HSE_Div2 PLL的输入时钟 = HSE 时钟频率除以2
RCC_PLLMul输入参数
RCC_PLLMul_2 PLL输入时钟 x 2
RCC_PLLMul_3 PLL输入时钟 x 3
RCC_PLLMul_4 PLL输入时钟 x 4
RCC_PLLMul_5 PLL输入时钟 x 5
RCC_PLLMul_6 PLL输入时钟 x 6
RCC_PLLMul_7 PLL输入时钟 x 7
RCC_PLLMul_8 PLL输入时钟 x 8
RCC_PLLMul_9 PLL输入时钟 x 9
RCC_PLLMul_10 PLL输入时钟 x 10
RCC_PLLMul_11 PLL输入时钟 x 11
RCC_PLLMul_12 PLL输入时钟 x 12
RCC_PLLMul_13 PLL输入时钟 x 13
RCC_PLLMul_14 PLL输入时钟 x 14
RCC_PLLMul_15 PLL输入时钟 x 15
RCC_PLLMul_16 PLL输入时钟 x 16
void RCC_PLLCmd(FunctionalState NewState) 使能或者失能PLL
NewState输入参数

ENABLE 或者 DISABLE
FlagStatus RCC_GetFlagStatus(u8 RCC_FLAG) 检查指定的RCC标志位设置与否
RCC_FLAG输入参数
RCC_FLAG_HSIRDY HSI晶振就绪
RCC_FLAG_HSERDY HSE晶振就绪
RCC_FLAG_PLLRDY PLL就绪
RCC_FLAG_LSERDY LSI晶振就绪
RCC_FLAG_LSIRDY LSE晶振就绪
RCC_FLAG_PINRST 管脚复位
RCC_FLAG_PORRST POR/PDR复位
RCC_FLAG_SFTRST 软件复位
RCC_FLAG_IWDGRST IWDG复位
RCC_FLAG_WWDGRST WWDG复位
RCC_FLAG_LPWRRST 低功耗复位
返回值
SET RESET
void RCC_SYSCLKConfig(u32 RCC_SYSCLKSource) 设置系统时钟(SYSCLK)
RCC_SYSCLKSource输入参数    
RCC_SYSCLKSource_HSI 选择HSI作为系统时钟
RCC_SYSCLKSource_HSE 选择HSE作为系统时钟
RCC_SYSCLKSource_PLLCLK 选择PLL作为系统时钟
u8 RCC_GetSYSCLKSource(void)        返回用作系统时钟的时钟源
返回值
0x00:HSI作为系统时钟
0x04:HSE作为系统时钟
0x08:PLL作为系统时钟

例程    HSE作为PLL,PLL作为SYSCLK
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
if (RCC_WaitForHSEStartUp() == SUCCESS) {
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while( RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET ) {
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while( RCC_GetSYSCLKSource() != 0x08 );
}
}

库手册下载: https://download.****.net/download/youshijian99/10371974