STM32
直播中

tr4578

8年用户 843经验值
擅长:模拟技术
私信 关注
[问答]

HAL_GetTick()获取不到计时,IIC等待超时函数无法跳出的原因?怎么解决?

不是固定时间出现该问题,程序进入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;}

回帖(1)

徐振方

2024-3-21 10:20:34
可以关掉看门狗,调试一下,看看Tick 有没有增加,或者为什么get 不到。 找到原因了也就能解决了。
举报

更多回帖

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