ST意法半导体
直播中

刘玉兰

8年用户 1096经验值
私信 关注
[问答]

STM32F407VGT6使用PLL倍频后芯片会反复重启怎么解决?

STM32F407VGT6使用内部16M晶振,没有使用PLL倍频,直接用HSI做时钟源程序可以正常跑通,但是使用PLL倍频后芯片就会反复重启,就算倍频到16M也会反复重启,,每33ms重启一起。

回帖(3)

杨秀英

2025-3-12 14:44:53
提供些检查建议供参考:


1、检查系统供电是否充足和稳定;


2、PLL参数配置是否有问题,是否存在超频配置的情况;尽量使用CubeMx进行配置;


3、检查下芯片的各个电源脚的连接情况,不要漏接,重点确认VDDA的连接、焊接及供电情况;
举报

陈鹏

2025-3-12 14:44:58
检查一下设置倍频部分的代码,是否有异常。
举报

李猛

2025-3-12 17:49:09

STM32F407VGT6 在使用 PLL 倍频后反复重启,可能是由于时钟配置不正确或电源问题导致的。以下是一些可能的原因和解决方法:




1. 检查时钟配置



  • PLL 配置是否正确:确保 PLL 的输入时钟源和倍频系数配置正确。STM32F407VGT6 的 PLL 输入可以是 HSI(16 MHz)或 HSE(外部晶振)。如果使用 HSI 作为 PLL 输入,确保 PLL 倍频系数在允许范围内。

  • 系统时钟配置:在切换到 PLL 作为系统时钟源之前,确保 PLL 已经锁定(通过检查 RCC_CR 寄存器中的 PLLRDY 位)。


  • 时钟树配置:检查时钟树配置是否正确,包括 AHB、APB1 和 APB2 的分频系数是否合理。


    示例代码(使用 HSI 作为 PLL 输入,倍频到 16 MHz):


    RCC_DeInit(); // 复位 RCC 配置
    RCC_HSICmd(ENABLE); // 启用 HSI
    while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); // 等待 HSI 就绪

    RCC_PLLConfig(RCC_PLLSource_HSI, RCC_PLLMul_1); // PLL 输入 = HSI, 倍频系数 = 1 (16 MHz)
    RCC_PLLCmd(ENABLE); // 启用 PLL
    while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); // 等待 PLL 锁定

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // 切换系统时钟源为 PLL
    while (RCC_GetSYSCLKSource() != 0x08); // 等待系统时钟切换完成





2. 检查电源配置



  • 电压调节器配置:STM32F407VGT6 支持多种电压调节器模式(如 PWR_MainRegulator_ONPWR_LowPowerRegulator_ON 等)。如果 PLL 倍频后系统时钟频率较高,确保电压调节器配置正确。


  • 电源电压:确保供电电压在允许范围内(通常为 1.8V 到 3.6V)。如果电压不足,可能导致芯片在高速运行时不稳定。


    示例代码(配置电压调节器):


    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); // 启用 PWR 时钟
    PWR_VoltageScalingConfig(PWR_VoltageScaling_Range1); // 配置电压调节器为 Range1





3. 检查复位源



  • 复位标志:检查复位标志寄存器 RCC_CSR,确定芯片重启的原因(如电源复位、看门狗复位等)。


  • 看门狗:如果启用了看门狗(IWDG 或 WWDG),确保在程序运行期间及时喂狗。


    示例代码(检查复位标志):


    if (RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET) {
       // 电源复位
    }
    if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET) {
       // 独立看门狗复位
    }
    RCC_ClearFlag(); // 清除复位标志





4. 检查外部晶振(如果使用)



  • 如果使用外部晶振(HSE),确保晶振电路设计正确(包括负载电容和匹配电阻)。

  • 如果外部晶振未启用或故障,可能导致 PLL 无法锁定,从而引发重启。




5. 调试工具



  • 使用调试工具(如 ST-Link 和 STM32CubeIDE)观察程序运行状态,检查时钟配置和复位原因。

  • 设置断点或使用调试信息输出,确认程序在切换到 PLL 时钟源后是否正常运行。




6. 参考官方例程



  • 参考 STM32CubeMX 生成的时钟配置代码或 STM32 官方例程,确保配置正确。




总结


根据你的描述,问题可能出在时钟配置或电源配置上。建议按照以下步骤排查:



  1. 检查 PLL 配置是否正确。

  2. 确保电压调节器配置合理。

  3. 检查复位标志,确定重启原因。

  4. 使用调试工具观察程序运行状态。


如果问题仍未解决,可以提供更多详细信息(如代码片段、电路设计等),以便进一步分析。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分