0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何解决STM32在擦除内部FLASH时间过长导致IWDG复位的问题

STM32单片机 来源:未知 2019-01-29 11:53 次阅读

客户反馈在使用STM32F412的时候,擦除Sector 8~11发现时间过长,从而导致意外触发IWDG复位。

问题分析

问题详情

通过与客户邮件和电话沟通,了解到客户主要是想使用内部FLASH暂时保存IAP升级时的程序数据,在IAP升级的过程中,需要首先擦除内部FLASH中一块足够大的空间,然后再写入升级数据。客户的工程中有使用到IWDG,喂狗间隔大约1.5s,客户的通过SysTick的方式计算出擦除Sector8大约需要2ms,因此认为若一次擦除Sector8~11大约需要8ms,于是在代码中一次性擦除Sector8~11后最后再来喂狗,但是,这样会触发IWDG复位,这个与预期不一致,固此产生疑问。

问题重现

使用NUCLEO-F412ZG板尝试重现客户问题,主要代码如下:

此外,同时在每个SysTick中断输出一个波形,用来检测SysTick是否正常:

最终得出的波形如下:

如上图,黄色为PC8脚波形,表示擦除FLASH的时间,下面蓝色为PA11管脚波形,表示SysTick波形。

从上图可以看出擦除Sector8所需要的时间是800ms,这个与客户认为的2ms是不一致的。查看STM32F412的数据手册,在第6.3.12节中可以看到如下信息:

如上图,在PSIZE=32时,擦除一个128K的扇区需要大概1S(典型值)的时间,而我们从图1中实际测出的为800ms,这个基本相差不大,单与客户认为的2ms相去甚远,基本上我们认为这里的800ms是正确的结果,但是这个又是什么原因导致客户通过SysTick测出的值是错误的呢?

实际上,从图1我们也可以看出,在擦除FLASH的期间,SysTick是没有波形的(见图1下面蓝色波形),同时在参考手册3.5节中有如下信息:

这句话的意思是说,在擦除FLASH的期间,若尝试读取FLASH,则会被暂停,实际这个”读取”是指取指,我们都知道,程序的执行首先得通过从FLASH中通过I-BUS取出指令后才可以执行。这里SysTick之所以会被暂停掉,就是因为在擦除FLASH期间,为了执行SysTick中断例程,内核会尝试从FLASH取指,从而导致被暂停掉,进而全局变量uwTick的值没有机会增加。下图是调试界面:

如上图,在执行擦除扇区后,SysTick的全局变量uwTick就增加了1,但SysTick在内核中的寄存器还是有变化的。这个与我们的预想一致。

最后客户通过每擦除一个扇区喂一次狗的方式解决了问题,而在此期间不能依靠SysTick的值来计算时间。

结论

○在擦除FLASH期间,取指操作会被暂停掉,且SysTick所对应的全局变量uwTick值是不会增加的。

○另外,通过函数HAL_FLASHEx_Erase_IT()来执行擦除FLASH和通过函数HAL_FLASHEx_Erase()所花费时间没有差别,只不过前者在擦除完成后会产生一个中断,而后者没有。

○可以通过外设RTC来计算擦除FLASH的时间,从而绕开限制。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FlaSh
    +关注

    关注

    10

    文章

    1550

    浏览量

    146646
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348738
  • RTC
    RTC
    +关注

    关注

    2

    文章

    484

    浏览量

    65438

原文标题:STM32擦除内部FLASH时间过长导致IWDG复位分析

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32单片机内部FLASH的编程和擦除操作

    F1和F4系列的芯片FLASH擦除后会是0xFFFFFFFF,而L1系列的芯片FLASH擦除后是0x00000000!!!!!
    的头像 发表于 02-14 16:37 1.9w次阅读
    <b class='flag-5'>STM32</b>单片机<b class='flag-5'>内部</b><b class='flag-5'>FLASH</b>的编程和<b class='flag-5'>擦除</b>操作

    请问高手们STM32F105芯片的内部flash能快速擦除吗?

    请问高手们STM32F105芯片的内部flash能快速擦除吗?因为要做个升级系统的程序,一页一页的擦除
    发表于 04-13 15:25

    嵌入式STM32F412擦除内部FLASH时间过长

    1 前言客户反馈使用STM32F412的时候,擦除sector 8~11发现时间过长,从而导致
    发表于 04-03 13:24

    STM32内部FLASH操作过程

    一般说STM32内部FLASH就是指主存储器区域写内部FLASH操作过程解锁在对FLASH写数据
    发表于 12-09 06:37

    片上flash擦除导致蓝牙的断连怎么解决

    收发数据2.2 flash擦除时间过长使用flash_erase_sector(u32 addr)去擦除
    发表于 03-02 06:24

    为什么刷新IWDG导致FLASH->SR->CFGBSY位卡在SET上呢?

    IWDG 尚未初始化时尝试刷新它时,会导致 FLASH->SR->CFGBSY 位卡在 SET 上。它永远不会归零。我参考手册和
    发表于 01-17 08:58

    用JLINK擦除STM32内部flash,这个擦除是一个一个数据去写入擦除的吗 ?

    用JLINK擦除STM32内部flash,这个擦除是一个一个数据去写入擦除的吗
    发表于 10-12 07:35

    擦除Flash导致WWDG溢出解决方法

    开启 WWDG 后,擦除 Flash 可能导致 WWDG 溢出复位,这种情况如何解决?
    发表于 10-20 06:45

    何解STM32芯片Flash写保护导致无法下载程序,无法在线调试的问题

      本文介绍了如何解STM32芯片Flash写保护导致无法下载程序,无法在线调试的问题;如果您遇到相同的问题,希望本文可以带来一些帮助; 1 FL
    的头像 发表于 12-22 16:51 1.3w次阅读

    STM32擦除内部FLASH时间过长导致IWDG复位

    STM32擦除内部FLASH时间过长导致
    发表于 07-30 11:06 3次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>擦除</b><b class='flag-5'>内部</b><b class='flag-5'>FLASH</b><b class='flag-5'>时间</b><b class='flag-5'>过长</b><b class='flag-5'>导致</b><b class='flag-5'>IWDG</b><b class='flag-5'>复位</b>

    STM32内部Flash读写问题

    读写要注意几点keil的.map文件中包含了什么操作不当导致Flash损坏会怎样Flash上锁与解锁Keil编译器如何查看MCU寄存器的值Flash读、写、
    发表于 12-01 20:21 20次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>内部</b><b class='flag-5'>Flash</b>读写问题

    软件优化Flash擦除时间长的方法

    概述:  通过地址的偏移,巧妙的避开Flash擦除时间占用CPU的使用。  MCU-STM32H743,编译环境-Keil说明:基础知识可以看:F
    发表于 12-01 20:36 2次下载
    软件优化<b class='flag-5'>Flash</b><b class='flag-5'>擦除</b><b class='flag-5'>时间</b>长的方法

    STM32读写内部flash注意点

    STM32读写内部flash注意点先说注意点怎么写怎么读的总结先说注意点1、写之前的第一步是要先解锁flash,解锁后最好清除下所有的flag,然后是
    发表于 12-02 11:21 7次下载
    <b class='flag-5'>STM32</b>读写<b class='flag-5'>内部</b><b class='flag-5'>flash</b>注意点

    解决stm32f103同一个扇区flash只能擦除一次,再次擦除FLASH_ERROR_PG错误问题

    项目中用到stm32内部flash存储一些系统运行数据,每次上电重新加载保存的数据。早先用法如下图所示,擦除之前每次要关闭总中断,解锁flash
    发表于 12-02 11:51 16次下载
    解决<b class='flag-5'>stm32</b>f103同一个扇区<b class='flag-5'>flash</b>只能<b class='flag-5'>擦除</b>一次,再次<b class='flag-5'>擦除</b>报<b class='flag-5'>FLASH</b>_ERROR_PG错误问题

    何解STM32芯片Flash写保护的问题

    本文介绍了如何解STM32芯片Flash写保护导致无法下载程序,无法在线调试的问题;如果您遇到相同的问题,希望本文可以带来一些帮助。
    的头像 发表于 03-14 17:24 1w次阅读