[其他ST产品] 操作FLASH的等待时间怎么理解

[复制链接]
1325|7
 楼主| qhtflsw 发表于 2020-10-26 10:30 | 显示全部楼层 |阅读模式
flash, TI, ge, ck, ic
HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout)
{
  uint32_t error;
  uint32_t eccerr;
  /* Wait for the FLASH operation to complete by polling on BUSY flag to be reset.
     Even if the FLASH operation fails, the BUSY flag will be reset and an error
     flag will be set */
  uint32_t timeout = HAL_GetTick() + Timeout;

  /* Wait if any operation is ongoing */
  while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY) != 0x00U)
  {
    if (HAL_GetTick() >= timeout)
    {
      return HAL_TIMEOUT;
    }
  }

这里的 if (HAL_GetTick() >= timeout)怎么理解?
貌似是1MS的基准,如果是FLASH_WaitForLastOperation(1000),就是等待1秒时间吗?
那么HAL_GetTick() >= timeout等同于上一刻的HAL_GetTick() >= HAL_GetTick() + Timeout,意义是啥?
jiekou001 发表于 2020-10-26 14:04 | 显示全部楼层
那是初始化条件的。
jiekou001 发表于 2020-10-26 14:05 | 显示全部楼层
就是你要计时5吧,你要先读取当前的是多少,比如读出来是3,那么想要计时5,就要等到读取为8的时候就到时候了。
jiekou001 发表于 2020-10-26 14:05 | 显示全部楼层
所以要你要记的时间段+当前的时间点,就等于停止计时的时间点了。
函数不想导 发表于 2020-10-26 22:52 | 显示全部楼层
是在现有的时间段上加上Timeout的时间
x史可法 发表于 2020-10-26 23:21 | 显示全部楼层
先读取当前的时间点哦
 楼主| qhtflsw 发表于 2020-10-27 14:22 | 显示全部楼层
x史可法 发表于 2020-10-26 23:21
先读取当前的时间点哦

如果我定义了滴答计时,也是1000=1ms中断一次.那么这里应该最大只有1000.假如现在计数到500,那最多也只有500=0.5秒的延时?
 楼主| qhtflsw 发表于 2020-10-29 17:21 | 显示全部楼层
x史可法 发表于 2020-10-26 23:21
先读取当前的时间点哦

字面上确实是延时1秒
__weak void HAL_IncTick(void)
{
  uwTick += uwTickFreq;
}

/**
  * @brief Provides a tick value in millisecond.
  * @NOTE This function is declared as __weak to be overwritten in case of other
  *       implementations in user file.
  * @retval tick value
  */
__weak uint32_t HAL_GetTick(void)
{
  return uwTick;
}


这里好像没有做溢出处理,32位=4294967295,如果刚好是4294967295 那么 4294967295》4294967295+1000吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

168

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部