使用HSE配置系统时钟

编程入门 行业动态 更新时间:2024-10-27 10:20:48

使用HSE配置系统<a href=https://www.elefans.com/category/jswz/34/1769919.html style=时钟"/>

使用HSE配置系统时钟

配置时钟顺序需要按照时钟树的顺序来配置。

  我们使用STM32时基本都是使用 HSE(外部高速时钟),然后 HSE 经过 PLL 倍频之后作为系统时钟。通常的配置是:HSE=8M,PLL 的倍频因子为:9,PLL时钟就设置成:72M,选择PLLCLK为系统统时钟源;则SYSCLK = PLLCLK8M * 9 = 72M。
编写代码步骤

1. 复位时钟

固件库:RCC_DeInit();
  在系统启动时已经将时钟配置好了是开启(enable)的状态,有些时钟寄存器在enable的情况下是不能配置的,所以第一步要复位时钟。

2.使能HSE外部高速时钟并等待其准备就绪

RCC_HSEConfig(RCC_HSE_ON);//使能HSE
  操作时钟控制寄存器(RCC_CR)将其第16位置1就开启了HSE时钟。
RCC_WaitForHSEStartUp();等待其准备就绪,成功返回SUCCESS。

3.选择PLL寄存器的信号源和倍频数

设置 HSE为PLL 时钟来源 ,设置 PLL 倍频因子
// PLLCLK = 8MHz * RCC_PLLMul_2 = 16 M
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_2);

4.使能PLL

// 开启 PLL并判断是否ready准备就绪。
RCC_PLLCmd(ENABLE);
RCC_GetFlagStatus(RCC_FLAG_PLLRDY);//Checks whether the specified RCC flag is set or not。

5.把 PLL 时钟切换为系统时钟 (SYSCLK)

//选择系统时钟源
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//specifies the clock source used as system clock

6配置预设分屏器APB/APB1/APB2

AHB 预分频因子设置为 1 分频, HCLK = SYSCLK
RCC_HCLKConfig(RCC_SYSCLK_Div1);
// APB2 预分频因子设置为 1 分频, PCLK2 = HCLK
RCC_PCLK2Config(RCC_HCLK_Div1);
// APB1 预分频因子设置为 2分频, PCLK1 = HCLK/2因为APB1最大允许36M的时钟。
RCC_PCLK1Config(RCC_HCLK_Div2);

7.检查

// 读取时钟切换状态位,确保 PLLCLK 被选为系统时钟
while (RCC_GetSYSCLKSource() != 0x08);

void HSE_SETSYS_CLK()
{ErrorStatus HSEStatus;RCC_DeInit();//使能HSE,开启外部晶振RCC_HSEConfig(RCC_HSE_ON);//等待HSE起振HSEStatus = RCC_WaitForHSEStartUp();if(HSEStatus == SUCCESS){// 设置 PLL 时钟来源为 HSE,设置 PLL 倍频因子// PLLCLK = 8MHz * RCC_PLLMul_2 = 16 MRCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_2);// 开启 PLLRCC_PLLCmd(ENABLE);// 等待 PLL 稳定while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);// 当 PLL 稳定之后,把 PLL 时钟切换为系统时钟 SYSCLKRCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/*设置预分频器*/// AHB 预分频因子设置为 1 分频, HCLK = SYSCLKRCC_HCLKConfig(RCC_SYSCLK_Div1);// APB2 预分频因子设置为 1 分频, PCLK2 = HCLKRCC_PCLK2Config(RCC_HCLK_Div1);// APB1 预分频因子设置为 2分频, PCLK1 = HCLK/2RCC_PCLK1Config(RCC_HCLK_Div2);// 读取时钟切换状态位,确保 PLLCLK 被选为系统时钟while (RCC_GetSYSCLKSource() != 0x08);}

在MOC引脚输出时钟

初始化MCO引脚PA8
  • 在F1系列中MCO引脚只有一个,即PA8
	MOC_GPIO_init();RCC_MCOConfig(RCC_MCO_SYSCLK);//选择MOC输出的时钟源

更多推荐

使用HSE配置系统时钟

本文发布于:2024-03-05 14:38:13,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1712567.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:时钟   系统   HSE

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!