STM32F334系统时钟的配置RCC_Config()

MCU:STM32F334C8T6

Frameware:STM32F3348-Discovery_FW_V1.0.0

RCC时钟配置步骤:

  1. 重置RCC为默认值:RCC_DeInit();  库函数中可以查到这个函数选择HSI为系统时钟(见图)
  2. 打开外部高速时钟晶振HSE
  3. 等待HSE工作
  4. 设置AHB时钟
  5. 设置高速APB(2)时钟
  6. 设置低速APB(1)时钟
  7. 设置PLL
  8. 打开PLL
  9. 等待PLL工作
  10. 设置系统时钟
  11. 等待系统时钟设置成功
  12. 打开所需时钟
代码:
void RCC_Config(void)
{
	// 1. 默认设置,HSI为系统时钟: 8M
	RCC_DeInit();
	// 2. 打开HSE : 8M
	RCC_HSEConfig(RCC_HSE_ON);
	// 3. 等待
	RCC_WaitForHSEStartUp();
	// 4. 设置AHB = SYSCLK
	RCC_HCLKConfig(RCC_SYSCLK_Div1);
	// 5. 设置APB2 = AHB
	RCC_PCLK2Config(RCC_HCLK_Div1);
	// 6. 设置APB1 = AHB/2
	RCC_PCLK1Config(RCC_HCLK_Div2);
	// 7. 设置PLL  , Source = 8M , PLLMul = 9 
	RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9);
	// 8. 打开PLL
	RCC_PLLCmd(ENABLE);
	// 9. 等等PLL 就绪
	while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
	// 10. 设置系统时钟SYSCLK=PLLCLK=8*9=72M
	RCC_
### 正点原子 STM32F4 RCC_APB1 时钟配置教程 在 STM32F4 微控制器中,`RCC_APB1` 是用于控制 APB1 总线及其连接外设的时钟分频器和使能寄存器。APB1 总线上挂载了许多低速外设(如 I2C、UART、SPI 等),因此合理配置 `RCC_APB1` 对于这些外设的工作至关重要。 #### 配置概述 STM32时钟树结构复杂,其中 `RCC_APB1` 主要涉及以下几个方面: - **PCLK1**: APB1 总线时钟。 - **AHB Prescaler (HPRE)** 和 **APB1 Prescaler (PPRE1)**: 这两个预分频器决定了 PCLK1 的实际频率。 - 外设时钟使能:通过设置特定位来启用或禁用某个外设的时钟。 以下是基于正点原子教程的一个典型配置流程: --- #### 示例代码 以下是一个简单的示例代码,展示如何配置 `RCC_APB1` 并使能 UART2 的时钟。 ```c #include "stm32f4xx.h" void Clock_Config(void) { // 启用 HSE 振荡器并等待其稳定 RCC->CR |= RCC_CR_HSEON; while (!(RCC->CR & RCC_CR_HSERDY)) {} // 设置系统时钟源为 HSE RCC->CFGR &= ~RCC_CFGR_SW; // 清除 SW[1:0] 位 RCC->CFGR |= RCC_CFGR_SW_HSE; // 选择 HSE 作为系统时钟源 // 配置 AHB 预分频器 (HPRE),假设不进行分频 RCC->CFGR &= ~(RCC_CFGR_HPRE); // 清除 HPRE[3:0] 位 RCC->CFGR |= RCC_CFGR_HPRE_DIV1; // 设置 AHB 不分频 // 配置 APB1 预分频器 (PPRE1),假设分频系数为 2 RCC->CFGR &= ~(RCC_CFGR_PPRE1); // 清除 PPRE1[2:0] 位 RCC->CFGR |= RCC_CFGR_PPRE1_DIV2; // 设置 APB1 分频系数为 2 // 使能 USART2 时钟 RCC->APB1ENR |= RCC_APB1ENR_USART2EN; // 如果需要重置 USART2,则执行以下操作 RCC->APB1RSTR |= RCC_APB1RSTR_USART2RST; RCC->APB1RSTR &= ~RCC_APB1RSTR_USART2RST; } ``` --- #### 关键点解析 1. **HSE 激活与稳定性检测** - 使用 `RCC->CR |= RCC_CR_HSEON;` 来激活外部高速晶体振荡器。 - 利用循环监控 `RCC->CR & RCC_CR_HSERDY` 是否被置位,确认 HSE 已经稳定工作[^1]。 2. **系统时钟源切换** - 将系统时钟源从内部 RC 振荡器切换到外部晶振(HSE)。这一步可以通过修改 `RCC->CFGR` 寄存器中的 `SW[1:0]` 字段完成[^1]。 3. **总线时钟分频** - AHB 总线通常不分频 (`DIV1`),而 APB1 可以根据需求调整分频因子(如 `DIV2` 表示将 AHB 时钟减半)[^1]。 4. **外设时钟使能** - 在 `RCC->APB1ENR` 中设置对应外设的时钟使能位。例如,USART2 的时钟使能由 `RCC_APB1ENR_USART2EN` 控制[^2]。 5. **外设复位** - 若需初始化某外设,可先触发该外设对应的复位信号再释放它。例如,对于 USART2,可通过 `RCC->APB1RSTR` 实现软复位功能[^2]。 --- #### 注意事项 - 当更改系统时钟配置时,请务必注意新旧时钟之间的过渡过程可能引发的问题,比如某些外设依赖当前时钟运行,在重新配置期间可能会短暂失效。 - 修改任何与时钟相关的寄存器之前应仔细阅读数据手册中关于具体微控制器型号的部分说明文档[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值