SystemClock_Config 函数解析

SystemClock_Config 函数解析

这个函数用于配置STM32微控制器的系统时钟。以下是每一行设置的详细解释:

1. 电源配置

HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);
  • 配置电源供应为LDO(低压差线性稳压器)模式

2. 调节器输出电压配置

__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3);
  • 设置内部稳压器输出电压为Scale3模式(最低电压模式,用于低功耗)

3. 等待稳压器就绪

while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
  • 等待直到电压调节器稳定并准备就绪(VOSRDY标志置位)

4. 振荡器配置

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48|RCC_OSCILLATORTYPE_HSI;
  • 指定要配置的振荡器类型:HSI48(48MHz高速内部时钟)和HSI(高速内部时钟)

RCC_OscInitStruct.HSIState = RCC_HSI_DIV1;
  • 配置HSI时钟不分频(保持原始频率)

RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  • 使用默认的HSI校准值

RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
  • 启用HSI48时钟

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  • 不启用PLL(锁相环)

if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
    Error_Handler();
}
  • 应用振荡器配置,如果失败则调用错误处理函数

5. 时钟树配置

RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                            |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
                            |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;
  • 指定要配置的所有时钟类型:系统时钟、AHB总线时钟、APB1/APB2总线时钟等

RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  • 选择HSI作为系统时钟源

RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
  • 系统时钟不分频

RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV1;
  • AHB总线时钟不分频

RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV1;
  • APB3总线时钟不分频

RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV1;
  • APB1总线时钟不分频

RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV1;
  • APB2总线时钟不分频

RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV1;
  • APB4总线时钟不分频

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
{
    Error_Handler();
}
  • 应用时钟配置,设置FLASH等待状态为1(因为时钟频率较低),如果失败则调用错误处理函数

总结

这个配置将系统设置为:

  • 使用内部HSI时钟作为系统时钟源

  • 所有总线时钟都不分频

  • 工作在低电压模式(Scale3)

  • 不使用PLL,因此系统时钟频率就是HSI的原始频率(通常是16MHz或更低,取决于具体芯片)

  • 这是一个相对低功耗的基本时钟配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值