×
单片机 > 单片机程序设计 > 详情

STM32F103 时钟配置

发布时间:2020-08-27 发布时间:
|

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 );

}

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址