请选择 进入手机版 | 继续访问电脑版

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

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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版