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

HAL_GetTick()获取不到计时,IIC等待超时函数无法跳出

[复制链接]
772984087@qq.co 提问时间:2023-2-16 13:20 / 未解决

不是固定时间出现该问题,程序进入IIC超时函数时,由于HAL_GetTick()函数获取到的值没有更新,导致循环无法跳出,并且在获取计时前enable()打开中断也无用,随后看门狗复位

static HAL_StatusTypeDef I2C_WaitOnFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Flag, FlagStatus Status, uint32_t Timeout, uint32_t Tickstart)
{
  /* Wait until flag is set */
  while (__HAL_I2C_GET_FLAG(hi2c, Flag) == Status)
  {
    /* Check for the Timeout */
    if (Timeout != HAL_MAX_DELAY)
    {
      if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
      {
        hi2c->PreviousState     = I2C_STATE_NONE;
        hi2c->State             = HAL_I2C_STATE_READY;
        hi2c->Mode              = HAL_I2C_MODE_NONE;
        hi2c->ErrorCode         |= HAL_I2C_ERROR_TIMEOUT;

        /* Process Unlocked */
        __HAL_UNLOCK(hi2c);

        return HAL_ERROR;
      }
    }
  }
  return HAL_OK;
}
收藏 评论5 发布时间:2023-2-16 13:20

举报

5个回答
butterflyspring 回答时间:2023-2-16 14:12:13

可以关掉看门狗,调试一下,看看Tick 有没有增加,或者为什么get 不到。 找到原因了也就能解决了。

yklstudent 回答时间:2023-2-16 20:28:49

系统时钟没有开启,还是HAL_IncTick()没有被调用执行

772984087@qq.co 回答时间:2023-2-17 09:22:32

yklstudent 发表于 2023-2-16 20:28
系统时钟没有开启,还是HAL_IncTick()没有被调用执行

已经开启了,是运行一段时间后复位的,关闭看门狗后发现卡在这个地方

772984087@qq.co 回答时间:2023-2-17 09:23:32

butterflyspring 发表于 2023-2-16 14:12
可以关掉看门狗,调试一下,看看Tick 有没有增加,或者为什么get 不到。 找到原因了也就能解决了。
[/m ...

[md]关掉看门狗,调试结果是tick没有增加,才导致时间相减不变

butterflyspring 回答时间:2023-2-17 09:42:48

772984087@qq.co 发表于 2023-2-17 09:23
关掉看门狗,调试结果是tick没有增加,才导致时间相减不变

应该可以调试再看看是不是TICK的中断出了问题,是计数逻辑问题还是中断被关闭了。

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版