STM32F103ZET6时钟配置避坑指南:从启动文件到72MHz稳定运行的完整流程

STM32F103ZET6时钟配置避坑指南:从启动文件到72MHz稳定运行的完整流程

对于嵌入式开发者而言,时钟系统就像人体心脏,为整个芯片提供动力。但很多人在STM32F103ZET6项目中会遇到这样的场景:代码逻辑没问题,外设却工作异常;系统运行一段时间后莫名重启;ADC采样值飘忽不定...这些问题的罪魁祸首,往往隐藏在时钟配置的细节中。

1. 启动文件与时钟初始化全流程解析

当按下复位键时,STM32的执行顺序并非直接从main函数开始。实际执行路径是:

  1. 硬件复位后PC指针指向0x00000000(启动文件定义的复位向量)
  2. 执行 Reset_Handler 中的初始化操作
  3. 调用 SystemInit() 进行时钟系统预配置
  4. 最后跳转到main函数

关键点在于 SystemInit() 的实现 。标准库中的这个函数会完成以下关键操作:

void SystemInit(void)
{
    // 复位时钟相关寄存器
    RCC->CR |= (uint32_t)0x00000001;  // 使能HSI
    RCC->CFGR &= (uint32_t)0xF8FF0000; // 复位时钟配置
    RCC->CR &= (uint32_t)0xFEF6FFFF;  // 关闭HSE/PLL/CSS
    RCC->CR &= (uint32_t)0xFFFBFFFF;  // 关闭HSE旁路
    RCC->CFGR &= (uint32_t)0xFF80FFFF; // 复位PLL配置
    RCC->CIR = 0x009F0000;           // 清除所有时钟中断标志
    
    // 调用时钟设置函数
    SetSysClock();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值