STM32的时钟到底如何配置?

2025-01-01 13:08:41
推荐回答(1个)
回答1:

时钟配置的话,你可以先想好自己的程序里面需要用到哪些外设,然后根据时钟树打开相应的外设时钟就行了。我这里给你一个一般的时钟配置的子程序吧:
void rcc_configuration(void)
{
ErrorStatus HSEStartUpStatus; //定义变量HSEStartUpStatus
RCC_DeInit(); //RCC重新配置
RCC_HSEConfig(RCC_HSE_ON); //打开HSE时钟
HSEStartUpStatus = RCC_WaitForHSEStartUp(); //读入RCC状态
if(HSEStartUpStatus == SUCCESS) //HSE时钟稳定
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Flash预取缓冲使能;
FLASH_SetLatency(FLASH_Latency_2); //72MHz运行时,Flash需要等到2个周期;
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //使用外部时钟的9倍作为PLL时钟;
RCC_PLLCmd(ENABLE); //使能PLL;

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) //等待PLL时钟稳定;
{
}

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //把系统时钟切换到PLL时钟;

while(RCC_GetSYSCLKSource() != 0x08) //判断PLL是否是系统时钟
{
}
}

下面这个是总线上的时钟配置:
RCC_HCLKConfig(RCC_SYSCLK_Div1); //主时钟为72MHz
RCC_PCLK2Config(RCC_HCLK_Div1); //APB2时钟为72MHz
RCC_PCLK1Config(RCC_HCLK_Div2); //APB1时钟为36MHz
RCC_ADCCLKConfig(RCC_PCLK2_Div4); //ADC时钟为18MHz

你也可以去看一下ST官方介绍库函数的文档,在官网上面有的。