你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32晶振启动问题

[复制链接]
泥碗泥锅 提问时间:2022-1-18 14:16 / 未解决
使用STM32F103,从停止模式唤醒时调用以下函数进行时钟初始化,外部晶振故障的情况下,单片机多次唤醒后会有死机情况,怀疑是在外部晶振故障的情况下启动外部晶振,会有导致单片机死机的概率。请问有没有遇到这个问题或者清楚这个问题的老铁????????
void sysclocksetback(void)
{
     __IO uint32_t StartUpCounter = 0,time_out=0x500,HES_status=0;
  
    /*根据标志状态选择启动外部时钟*/
        RCC_HSEConfig(RCC_HSE_ON);   
        while((HES_status==0)&&(StartUpCounter <= time_out))
        {
            HES_status=RCC_GetFlagStatus(RCC_FLAG_HSERDY);
            StartUpCounter++;  
        }
    if(HES_status)
    {
        /*使能时钟故障监测*/
        RCC_ClockSecuritySystemCmd(ENABLE);
    /*!< PLLCLK = 8MHz(HSE) * 6 = 48 MHz */
        RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_6);
        /*使能pll*/
        RCC_PLLCmd(ENABLE);
        StartUpCounter=0;
        while((RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==0)&&(StartUpCounter <= time_out))
        {
            StartUpCounter++;  
        }
        /*选择pll做时钟源*/
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
        StartUpCounter=0;
        while((RCC_GetSYSCLKSource()!=0x08)&&(StartUpCounter <= time_out))
        {
            StartUpCounter++;  
        }
  }
  else
  {
        /*禁能时钟故障监测*/
        RCC_ClockSecuritySystemCmd(DISABLE);
    /*!< PLLCLK = 8MHz(HSI)/2 * 6 = 48 MHz */
        RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_12);
        /*使能pll*/
        RCC_PLLCmd(ENABLE);
        StartUpCounter=0;
        while((RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==0)&&(StartUpCounter <= time_out))
        {
            StartUpCounter++;  
        }
        /*选择pll做时钟源*/
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
        StartUpCounter=0;
        while((RCC_GetSYSCLKSource()!=0x08)&&(StartUpCounter <= time_out))
        {
            StartUpCounter++;  
        }
  }
}
收藏 评论4 发布时间:2022-1-18 14:16

举报

4个回答
废鱼 回答时间:2022-1-19 15:30:23

楼主,time_out是多长时间。RCC_HSEConfig(RCC_HSE_ON);失败以后再关闭一下HSE时钟。

butterflyspring 回答时间:2022-1-19 17:09:51
通常低功耗唤醒之后是由内部HSI 作为启动后的时钟,然后再去初始化外部时钟和锁相环等
1. 如果HSE之前能正常工作的话,通常再次启动很少会启动不了的。当然启动是要一点时间。楼主的软件timeout很难估算多长时间。建议延长这个值。 另外楼主怀疑晶振启动故障,不妨只用HSI 试试,看看会不会还出现故障。
2.  可以在时钟配置处增加跟踪代码,看看是不是此处引起的。
泥碗泥锅 回答时间:2022-3-8 17:32:26

废鱼 发表于 2022-1-19 15:30
楼主,time_out是多长时间。RCC_HSEConfig(RCC_HSE_ON);失败以后再关闭一下HSE时钟。
...

感谢

泥碗泥锅 回答时间:2022-3-8 17:32:44

butterflyspring 发表于 2022-1-19 17:09
通常低功耗唤醒之后是由内部HSI 作为启动后的时钟,然后再去初始化外部时钟和锁相环等</p>
<ol>
<li>如果HSE之前能正 ...

感谢

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版