打印
[STM32F7]

STemwin 多次打开关闭一个窗口后死在I2C循环中

[复制链接]
1370|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wozaihuayu|  楼主 | 2016-6-2 15:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wozaihuayu 于 2016-6-2 17:03 编辑

我的程序是STemwin 在桌面有一个图标,点击图标后创建一个窗口,窗口中3个按钮,和1个listbox。
点击窗口中的CANCEL按钮窗口关闭。
当我多次打开关闭这个窗口时,程序就会死!
经调试,程序是死在了硬件I2C的while循环中,如下代码中:
static HAL_StatusTypeDef I2C_WaitOnFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Flag, FlagStatus Status, uint32_t Timeout)  
{  
  uint32_t tickstart = HAL_GetTick();
  
  /* Wait until flag is set */
  if(Status == RESET)
  {   
    while(__HAL_I2C_GET_FLAG(hi2c, Flag) == RESET)
    {
      /* Check for the Timeout */
      if(Timeout != HAL_MAX_DELAY)
      {
        if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
        {
          hi2c->State= HAL_I2C_STATE_READY;
          /* Process Unlocked */
          __HAL_UNLOCK(hi2c);
          return HAL_TIMEOUT;
        }
      }
    }
  }...........省略

或者
static HAL_StatusTypeDef I2C_IsAcknowledgeFailed(I2C_HandleTypeDef *hi2c, uint32_t Timeout)
{
  uint32_t tickstart = 0x00;
  tickstart = HAL_GetTick();
  
  if(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF) == SET)
  {
    /* Wait until STOP Flag is reset */
    /* AutoEnd should be initiate after AF */
    while(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET)
    {
      /* Check for the Timeout */
      if(Timeout != HAL_MAX_DELAY)
      {
        if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
        {
          hi2c->State= HAL_I2C_STATE_READY;
          /* Process Unlocked */
          __HAL_UNLOCK(hi2c);
          return HAL_TIMEOUT;
        }
      }
    }...........省略

这个I2C程序是操作电阻触摸屏芯片的,由TIMER3定时器定时调用。
timer3中断优先级是(0,1)。
上面程序中超时检测是用的SYSTICK,其中断优先级是(0x0f,0)。
调试发现,程序死掉后,HAL_GetTick() 返回值始终不变,这样才进入死循环!
怀疑是systick优先级低,将其改为(0,0)最高优先级后,依然会进入上面的死循环!
求高手指点!!!提一些建议也可以!!!
沙发
xmshao| | 2016-6-2 17:58 | 只看该作者
那你把SYSTICK优先级改为(0,0);TIM3改为(1,0)测试下。第一个数字代表抢占优先级。

使用特权

评论回复
板凳
wozaihuayu|  楼主 | 2016-6-3 08:24 | 只看该作者
xmshao 发表于 2016-6-2 17:58
那你把SYSTICK优先级改为(0,0);TIM3改为(1,0)测试下。第一个数字代表抢占优先级。 ...

有道理,试一下看看!

使用特权

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

本版积分规则

39

主题

261

帖子

4

粉丝