当前位置: 首页 > news >正文

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或更低,取决于具体芯片)

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

http://www.lryc.cn/news/602610.html

相关文章:

  • Office-PowerPoint-MCP-Server – 基于MCP的开源PPT生成与编辑工具
  • 【WRF-Chem第二期】WRF-Chem有关 namelist 详解
  • Leaflet 综合案例-矢量图层控制
  • Python Pandas.merge_ordered函数解析与实战教程
  • OpenLayers 综合案例-区域掩膜
  • springCloudAlibaba集成Dubbo
  • Yolo底层原理学习--(第二篇)
  • 【HTTP】防XSS+SQL注入:自定义HttpMessageConverter过滤链深度解决方案
  • window显示驱动开发—Direct3D 11 视频设备驱动程序接口 (DDI)
  • 网络编程接口htonl学习
  • CMakelists.txt 实现多级目录编译
  • 星辰大海的征途:星宸科技的中国芯片突围战
  • GaussianMesh运行指南
  • MySQL的常用数据类型详解
  • 飞算科技重磅出品:飞算 JavaAI 重构 Java 开发效率新标杆
  • 塔能科技物联运维平台及城市照明市场竞争力分析
  • kruscal重构树
  • 【Java EE】多线程-初阶-线程的状态
  • Ettus USRP X410/X440 运行 ADC 自校准
  • ubuntu qt环境下出现No suitable kits found解决方案
  • 2025最新Mybatis-plus教程(三)
  • 目前市面上有Android 16KB的手机吗
  • 【Bluedroid】bta_av_sink_media_callback(BTA_AV_SINK_MEDIA_CFG_EVT)流程源码分析
  • OSPF路由协议(上)
  • Linux驱动22 --- RV1126 环境搭建设备树修改
  • 【Linux篇】进程间通信:进程IPC
  • java每日精进 7.28【流程设计6.0(泳池和泳道)】
  • 重生之我在暑假学习微服务第三天《Docker-上篇》
  • 采用黑翅鸢优化算法BKA-CNN-LSTM、CNN-LSTM、LSTM、CNN四模型多变量回归预测,多输入单输出(Matlab)
  • 轻资产革命:连合直租如何用DaaS模式重塑企业资产逻辑