打印
[STM32F2]

求助!F205进入STOP模式后,唤醒恢复时钟时异常卡死!

[复制链接]
846|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zwl3615473|  楼主 | 2019-7-7 11:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为了进一步降低功耗,使用STOP模式。但是恢复时就出问题了。卡死处为以下代码处:
while (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }
原始代码应为“if”,但是为了找到问题替换成了“while”,果真就卡死了在这里,返回的值是HAL_ERROR和HAL_TIMEOUT。
跟踪函数流程,具体返回HAL_ERROR位置为如下代码处:
  /*-------------------------------- PLL Configuration -----------------------*/

/* Check the parameters */
  assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState));
  if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE)
  {
    /* Check if the PLL is used as system clock or not */
    if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL)
    {……}else{<font color="Red">return HAL_ERROR;//此处返回错误!</font>}


返回HAL_TIMEOUT位置代码如下:
  /*-------------------------------- PLL Configuration -----------------------*/
  /* Check the parameters */
  assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState));
  if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE)
  {
    /* Check if the PLL is used as system clock or not */
    if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL)
    {
      if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
      {
        /* Check the parameters */
        assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource));
        assert_param(IS_RCC_PLLM_VALUE(RCC_OscInitStruct->PLL.PLLM));
        assert_param(IS_RCC_PLLN_VALUE(RCC_OscInitStruct->PLL.PLLN));
        assert_param(IS_RCC_PLLP_VALUE(RCC_OscInitStruct->PLL.PLLP));
        assert_param(IS_RCC_PLLQ_VALUE(RCC_OscInitStruct->PLL.PLLQ));

        /* Disable the main PLL. */
        __HAL_RCC_PLL_DISABLE();

        /* Get Start Tick */
        tickstart = HAL_GetTick();

        /* Wait till PLL is ready */
        while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
        {
          if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
          {
            <font color="DarkOrange">return HAL_TIMEOUT;//此处返回超时错误</font>
          }
        }
问题:
1、当出现如上两种错误时,在不重启的情况下,我应该如何解决?
2、在main中进入停止模式,使用外部中断进行唤醒后,系统先执行main进入停止模式后面的代码,还是首先执行外部中断的代码?
3、在main中及中断函数中都增加了时钟恢复函数,是否会造成时钟恢复失败?

使用特权

评论回复
沙发
xuanhuanzi| | 2019-7-7 19:04 | 只看该作者
恢复后再次运行时钟初始化程序。

使用特权

评论回复
板凳
xuanhuanzi| | 2019-7-7 19:04 | 只看该作者
看看是不是初始化问题造成的。听说STOP后,有一些初始化要重置。比如时钟系统。

使用特权

评论回复
地板
八层楼| | 2019-8-6 10:55 | 只看该作者
再次初始化试试看

使用特权

评论回复
5
观海| | 2019-8-6 11:04 | 只看该作者
在恢复的时候再次初始化就可以了

使用特权

评论回复
6
guanjiaer| | 2019-8-6 11:08 | 只看该作者
我习惯啥都定时进行初始化

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝