STM32F412擦除内部FLASH时间过长 -
来源: 网络用户发布,如有版权联系网管删除 2018-09-11
[导读]1 前言客户反馈在使用STM32F412的时候,擦除sector 8~11发现时间过长,从而导致意外触发IWDG复位。2 问题分析2.1 问题详情通过与客户邮件和电话沟通,了解到客户主要是想使用内部FLASH暂时保存IAP升级时的程序数据,
1 前言
客户反馈在使用STM32F412的时候,擦除sector 8~11发现时间过长,从而导致意外触发IWDG复位。
本文引用地址: http://www.21ic.com/app/mcu/201809/781457.htm
2 问题分析2.1 问题详情通过与客户邮件和电话沟通,了解到客户主要是想使用内部FLASH暂时保存IAP升级时的程序数据,在IAP升级的过程中,需要首先擦除内部FLASH中一块足够大的空间,然后再写入升级数据。客户的工程中有使用到IWDG,喂狗间隔大约1.5S,客户的通过SysTick的方式计算出擦除Sector8大约需要2ms,因此认为若一次擦除sector8~11大约需要8ms,于是在代码中一次性擦除sector8~11后最后再来喂狗,但是,这样会触发IWDG复位,这个与预期不一致,固此产生疑问。
2.2 问题重现使用NUCLEO-F412ZG板尝试重现客户问题,主要代码如下:
intmain(void){/*USERCODEBEGIN1*/uint32_tbeginTick=0,endTick=0;uint32_tcurSysTick=0,endSysTick=0;/*USERCODEEND1*//*MCUConfiguration----------------------------------------------------------*//*Resetofallperipherals,InitializestheFlashinterfaceandtheSystick.*/HAL_Init();/*Configurethesystemclock*/SystemClock_Config();/*Initializeallconfiguredperipherals*/MX_GPIO_Init();MX_IWDG_Init();/*USERCODEBEGIN2*/if(__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST)!=RESET)//如果是看门狗复位{/*Clearresetflags*/HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET);__HAL_RCC_CLEAR_RESET_FLAGS();Error_Handler();}HAL_FLASH_Unlock();/*FillEraseInitstructure*/EraseInitStruct.TypeErase=FLASH_TYPEERASE_SECTORS;EraseInitStruct.VoltageRange=FLASH_VOLTAGE_RANGE_3;EraseInitStruct.Sector=FLASH_SECTOR_8;EraseInitStruct.NbSectors=1;//if(HAL_FLASHEx_Erase(&EraseInitStruct,&SECTORError)!=HAL_OK)//{//Error_Handler();/
查看评论 回复
"STM32F412擦除内部FLASH时间过长 -"的相关文章
- 上一篇:C51固定ROM地址初始化数据方法 -
- 下一篇:STM32F0(9)串口初始化 -