打印

stm32f205写FLASH时间太长和看门狗复位怎么办??

[复制链接]
4813|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
john78|  楼主 | 2013-7-15 22:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stm32f205写FLASH时间太长和看门狗复位怎么办??
特别是格式化FLASH时间太长了,看门狗动作了,怎么办????
沙发
自然的天逸| | 2013-7-16 10:41 | 只看该作者
这个程序上可以解决的  你在等待flash 操作成功这段时间要想想办法清狗 。有操作系统话就方便以一些 CPU

使用特权

评论回复
板凳
自然的天逸| | 2013-7-16 10:43 | 只看该作者
可以调度 清狗 可以单独建立任务 由系统调度完成。 编写代码的时候尽量不写死等的程序。用状态机写软件

使用特权

评论回复
地板
john78|  楼主 | 2013-7-16 12:51 | 只看该作者
void ClearDataflash(void)
{
  u32 i;
  FLASH_Unlock();
   
  Iwdog_rst();
    /* Clear pending flags (if any) */  
  FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR |
                  FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR);

  /* Get the number of the start and end sectors */
  StartSector = GetSector(FLASH_USER_START_ADDR);
  EndSector = GetSector(FLASH_USER_END_ADDR);

  for (SectorCounter = StartSector; SectorCounter <= EndSector; SectorCounter += 8)
  {
     Iwdog_rst();
    /* Device voltage range supposed to be [2.7V to 3.6V], the operation will
       be done by word */
    if (FLASH_EraseSector(SectorCounter, VoltageRange_3) != FLASH_COMPLETE)
    {
      /* Error occurred while sector erase.
         User can add here some code to deal with this error  */
      for(i=0;i<0xFFFFFF;i++)
      {
         Iwdog_rst();
      }
    }
  }
}
----------------------------------------------------------------------------

这样吗?还是没有用啊

使用特权

评论回复
5
zeluo| | 2013-7-16 18:40 | 只看该作者
不是很了解   楼主   我帮你顶一个    看看别人的意见吧   顶一个

使用特权

评论回复
6
自然的天逸| | 2013-7-16 21:00 | 只看该作者
你要看是那条狗复位了才去清狗。

使用特权

评论回复
7
自然的天逸| | 2013-7-16 21:01 | 只看该作者
也可以把狗放长一点吗

使用特权

评论回复
8
john78|  楼主 | 2013-7-17 13:46 | 只看该作者
狗已经放的最长了,现在只能不放狗

使用特权

评论回复
9
logeee| | 2013-7-17 16:24 | 只看该作者
将 if (FLASH_EraseSector(SectorCounter, VoltageRange_3) != FLASH_COMPLETE)
    {
      /* Error occurred while sector erase.
         User can add here some code to deal with this error  */
      for(i=0;i<0xFFFFFF;i++)
      {
         Iwdog_rst();
      }
    }
改成while (FLASH_EraseSector(SectorCounter, VoltageRange_3) != FLASH_COMPLETE)
    {
      /* Error occurred while sector erase.
         User can add here some code to deal with this error  */
      //for(i=0;i<0xFFFFFF;i++)
      {
         Iwdog_rst();
      }
    }

使用特权

评论回复
10
cjhk| | 2013-7-17 18:50 | 只看该作者
需要及时清狗   清零后  一般的问题  基本上没有什么的   楼主

使用特权

评论回复
11
无帝老三| | 2016-8-9 16:31 | 只看该作者
logeee 发表于 2013-7-17 16:24
将 if (FLASH_EraseSector(SectorCounter, VoltageRange_3) != FLASH_COMPLETE)
    {
      /* Error occ ...

这个看着应该可以

使用特权

评论回复
12
这个可以这样解决,不好的话请谅解:
         当你等待清除FLASH的这段时间,你使用定时器定时的在中断中清除Watchdog

使用特权

评论回复
13
泰山特曲123| | 2016-8-9 23:28 | 只看该作者
你看门狗的周期是多少?确定是看门狗复位的,而不是其他?

使用特权

评论回复
14
无帝老三| | 2016-12-22 09:24 | 只看该作者
楼主解决了吗?分享一下经验

使用特权

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

本版积分规则

70

主题

220

帖子

1

粉丝