stm32的flash擦除不正常

先贴代码:
U32 Flashadd;
U8 FLASH_Sector;
FLASH_Status status = FLASH_COMPLETE;
Flashadd=addr-0x8000000;

if(Flashadd<0x10000) FLASH_Sector=(U8)(Flashadd>>14);
else if(Flashadd<=0x1ffff) FLASH_Sector=4;
else if(Flashadd<=0x1fffff) FLASH_Sector=(U8) (5+((Flashadd-0x20000)>>17));
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_PGSERR | FLASH_FLAG_PGPERR |   FLASH_FLAG_PGAERR | FLASH_FLAG_WRPERR |    FLASH_FLAG_OPERR | FLASH_FLAG_EOP); 
    FLASH_OB_WRPConfig(FLASH_Sector, DISABLE);
FLASH_OB_Unlock();

/* Check the parameters /
assert_param(IS_FLASH_SECTOR(FLASH_Sector));
/
Wait for last operation to be completed /
status = FLASH_WaitForLastOperation(ERASE_TIMEOUT);
FLASH_Sector=FLASH_Sector<<3;
if(status == FLASH_COMPLETE)
{
/
if the previous operation is completed, proceed to erase the sector */
FLASH->CR &= SECTOR_MASK;
FLASH->CR |= FLASH_CR_SER | FLASH_Sector;
FLASH->CR |= FLASH_CR_STRT;

/* Wait for last operation to be completed */
status = FLASH_WaitForLastOperation(ERASE_TIMEOUT);

/* if the erase operation is completed, disable the SER Bit */
FLASH->CR &= (~FLASH_CR_SER);
FLASH->CR &= SECTOR_MASK; 

}
FLASH_Lock();
/* Return the Erase Status */
return status;
运行这个函数的,我在线调试时会出现Could not stop Cortex-M device.
将改程序中的FLASH->CR |= FLASH_CR_STRT;语句屏蔽,就能进入调试,但是擦除flash不正常,不知道为什么,有哪位大虾指点迷津,小弟在此道谢。

1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于stm32的flash的擦除的理解
最近消化rn正点原子《STM32不完全手册》—— 第三十一章 FLASH模拟EEPROM实验rn时,对判断FLASH是否需要擦除的语句有点不理解,度娘了才知:FLASH擦除后字节存储的数据是0XFFrnvoid STMFLASH_Write(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite)    rn{rn    u32 secpos;       //扇区地址
STM32 FLASH读、写、擦除
分享STM32 FLASH 擦除(以及防止误擦除程序代码)、写入作者:黄宾山 来源:本站原创编译环境:我用的是(Keil)MDK4.7.2   stm32库版本:我用的是3.5.0一、本文不对FLASH的基础知识做详细的介绍,不懂得地方请查阅有关资料。  对STM32 内部FLASH进行编程操作,需要遵循以下流程:  FLASH解锁  清除相关标志位  擦除FLASH(先擦除后写入的原因是为了工业...
STM32F412擦除内部FLASH时间过长
1 前言nn客户反馈在使用STM32F412的时候,擦除sector 8~11发现时间过长,从而导致意外触发IWDG复位。nn2 问题分析nn2.1 问题详情nn通过与客户邮件和电话沟通,了解到客户主要是想使用内部FLASH暂时保存IAP升级时的程序数据,在IAP升级的过程中,需要首先擦除内部FLASH中一块足够大的空间,然后再写入升级数据。客户的工程中有使用到IWDG,喂狗间隔大约1.5S,客户
STM32:Flash擦除与读写操作(HAL库)
应用平台:STM32F030F4P6n ST官方库:STM32Cube_FW_F0_V1.9.0n n背景知识 n绝大多数的单片机和微控制器(ARM,x86),地址空间都是以字节为单位的,也就是说一个地址是一个字节。nFlash存储器有个特点,就是只能写0,不能写1。所以如果原来的地址有数据了,意味着有一些位为0,这些位就相当于无效了。所以必须写之前确保他们都为1,只有擦除才可以。另外每次擦除都
keil环境下stm32下载和擦除程序对Flash的影响
一、烧录两个程序,读取FLASH(实测结果:两个区域都有程序,跟烧录的顺序没有关系)n1、首先 烧录0x08004000开始的程序nn读取FLASH:只有0x08004000处有数据nnn2、烧写0x08000 0000程序nn读取FLASH:0x08000000和 0x08004000处都有数据nnn二、擦除Flash(实测结论:擦除一个,即擦除所有的芯片,跟顺序无关。不更
清除STM32保护,解决因FLASH保护不能烧程序。工具:ST-LINK
注:此教程由张杰原创,转载请注明。这个该死的保护困扰我一晚上。终于解决了,不敢独享,特写此经验,与大家共勉。nnnn1.下载stsw-link004(V4.0.0)软件。n2.安装好后打开软件,如下图所示。先点击file打开一个hex文件,随便什么hex都行,然后点击第二步烧录图标。进入烧录界面。nn3.进入烧录界面后,如下图所示。nn此时选择如图所示的选项,过一会儿后,会显示一
stm32烧录时FLASH下载失败的解决办法
网上大多是认为Flash没有擦除的原因或者没有选择正确的Flash算法,其实芯片没有解密也是一个很有可能的原因,本文档即讲述用J-Flash解密stm32芯片的过程.
嵌入式单片机应用开发--FLASH的擦除操作(擦除开始地址到结束地址内的数据)
 之前没有遇到过这方面的需求,现在遇到了,记录下来:rn 一般来说,flash芯片会支持以下几种擦除接口。rn擦除接口:rnrn1、256Byte擦除接口(页擦除)rn2、4KByte擦除接口(块擦除)rn3、32KByte擦除接口(扇区擦除)rn4、64KByte擦除接口(扇区擦除)rnrn但是,flash操作和其他不同的地方就是:rn1、最简单的全部使用256B 擦除方法(1024~52224)–需要循环200次...
用J-Flash去掉STM32写保护
用J-Flash去掉STM32写保护
基于flash的快速缓存(ringbuffer)设计,掉电恢复,擦除平衡。
先讲讲本次主题的项目需求:1、透传数据,若无连接则必须缓存数据(数据上传的环境很不理想,很可能1周后才有人处理)。2、最差情况:缓存百兆字节数据;2、缓存的数据按先进先出顺序;3、缓存数据接收每次100~4K字节,每段数据总长度10K~1M不等。4、stm32平台64K内存,64KROM;(由于USB Host驱动,再加上系统及任务本身耗费,内存裕量约40k);设计方案:首先,开发版采用的是NOR...
STM32 Flash操作(擦写)过程中器件复位导致数据丢失问题
1.问题描述nn产品在运行过程中需要保存一些断电不丢失的数据,为此将数据保存在STM32内部的flash中。但是测试人员在测试的过程中,修改了数据参数,直接断电重启机器,并没有等待flash的操作时间,导致原有的数据丢失。nn2. 原理分析nn本产品硬件平台是基于STM32F429,采用HAL库开发。在操作内部flash这部分中,查看数据手册得知: n n n对于操作128KB的扇区擦写32位数据...
关于MDK调试stm32f072vbt6(HAL库)内部flash在擦除仿真时,卡死在擦除函数,同时弹出“Cannot access target.shutting down debug sessi
关于MDK调试stm32f072vbt6(HAL库)内部flash在擦除仿真时,卡死在擦除函数,同时弹出“Cannot access target.shutting down debug sessi
关于flash擦除引起的bug问题小结
u16 irlib_get_free_block(const u8 * libno)n{n u8 i;n vu16 low, up;n u16 _libno = le16_to_cpu(*(u16*)libno);n u16 test = 0;nn if (_libno == 0)n {n irlib.libno0_use_sec = 1-irli
MDK自带下载工具不能擦除芯片和烧写FLASH
问题1:通过MDK编译好的.HEX文件无法下载到开发板上rn日期:2016年8月31日16:20:49rnrnrnMDK下载设置:rnMDK中utilities->debug ort:sw MAX:5MHzrn调试信息如下:rnJLink info:rn------------rnDLL: V4.90 , compiled Jul 28 2014 10:35:20rnFirmware: J-Lin
STM32学习之Flash 写入操作&看门狗喂狗
这两天调试的时候碰到这样一个问题,当我在向flash 中写入数据的时候,系统复位的概率高很多,而且获取复位标识,都是看门狗复位,然而我在做喂狗的定时器使用的中断优先级和抢占优先级都是最高的,应该是不会出现这样问题的。nn百度得到的原因: n 系统在写入flash 时,系统会对flash 总线进行锁定,导致中断即使发生了,也没有办法读取flash 中的指令,从而导致复位;nn摘录大神的解释 n...
提高FLASH擦写次数的方法
使用MSP430G系列单片机提高对外部FLASH擦写次数的方法
STM32下载不成功问题汇总
在某宝上买了五个最小系统核心板是STM32F103C8T6的芯片,刚拿到手准备下载程序调试,上电后板子自带LED闪烁,这是商家自己下载的示例程序,说明芯片工作着,用KEIL4进行下载自己程序,把自己编译好的程序下载。用的JLINK的四线下载调试下载口,SW的调试接口,点击下载后发现擦除成功,下载失败,提示:rnLoad "..\\Output\\STM32-DEMO.axf" rnSet JLin
宏晶科技用c语言实现的EEPROM完整底层驱动程序,包括擦除、读写,flash保护等
宏晶科技用c语言实现的EEPROM完整底层驱动程序,包括擦除、读写,flash保护等
arm端擦除nandflash的工具flash_erase
arm端擦除nandflash的工具flash_erase,用于写nand之前的擦除。
XC7Z030芯片开发从硬件到软件---- QSPI flash 烧录后的擦除
在ZYNQ7020的开发板上,把芯片的启动方式都是通过跳线帽进行设置。我们都知道boot1和boot2都为高电平时采用的是SD卡启动,都为低电平时采用的是Jtag启动,boot1为高电平,boot2为低电平时,采用的是QSPI flash启动。nn 其实在jtag和QSPI flash启动之间不需要跳线帽进行切换,也能实现jtag调试与QSPI flash烧录操作之间的切换。在嵌入式产品中,有
stm32f10x系列flash操作:看似简单却也不简单
        话说小编前几天还在玩IAP,由于工作需要,小编要在flash中开辟一段存储区来保存几个变量的值。当时小编就一声冷笑,呵,我都手握官方flash操作的库,不就是调用一下flash_read()和flash_write()吗,这有什么难的,然而。。。。现实总是残忍的,小编花了好大一番功夫才成功在重刷程序后依然能够读取到flash的值,在此记录,望各位童鞋能够不走弯路。nn       ...
TrueStudio for STM32 中常量定位到 Flash 方法
在truestudio for stm32 IDE开发中如何定义常量到内部flash中。
STM32 烧录程序后无法在内部FLASH保存数据问题解决
欢迎使用Markdown编辑器n你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。n新的改变n我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:nn全新的界面设计 ,将会带来全新的写作体...
stm32l476 内部flash HAL库操作方法
stm32l476 FLASH特征nnn • Up to 1 Mbyte of Flash memory with dual bank architecture supporting read-while-write n capability (RWW). n • Memory organization: 2 banks (Bank 1 and Bank 2) n ...
SPI---读写串行FLASH(STM32平台下)
时间:2017/06/14 SPI---读写串行FLASH HAL库版本rnG15电装.王维鋆rn一、SPI基础知识rn1.SPI(Serial Peripheral interface),即串行外围设备接口。主要应用于EEPROM、FLASH、实时时钟、AD转换器以及数字信号处理器和数字信号解码器之间。是一种高速的、全双工、同步的通信总线,在芯片管脚上只占用四根线。rnrn2.SPI接口一般使用
STM32中FLASH_Status的5个状态各表示的含义详解
获取状态:FLASH_Status FLASH_GetStatus(void);返回值是通过枚举类型定义的。 typedef enum{    FLASH_BUSY = 1,  //忙   FLASH_ERROR_PG,  //编程错误   FLASH_ERROR_WRP,  //写保护错误   FLASH_COMPLETE,   //操作完成   FLASH_TIMEOUT    //操作超时 ...
个人笔记_FLASH性质存储器SST25VF016B在STM32F1微控下的操作总结
1、该芯片的通信接口为串行SPI接口,需要注意的是由于STM32F1系列芯片引脚内部结构的特性,许多人在配置MISO引脚的时候将该引脚配置为复用推完输出(GPIO_Mode_AF_PP),这是没有错误的(图1);nnn2、模式配置需要根据芯片手册来设置,8位宽度,模式0或模式3,高字节在前等(图2);nnn3、STM32外设SPI写一个字节惯用的方式如图3,需要考虑的是,为什么该函数有
STM32读保护
STM32对读保护的设置及使用ST-Link Utility对使用读保护机制的STM32擦出FLASH
stm32 华邦flash驱动程序编写笔记
目的:读写数据芯片手册关键地方是指令模块,尤其要参考时序怎么读数据:一条指令  一个地址 一个变量buff  就可以了,没有保护注意地址的位数怎么写数据:写数据不许去除写保护,获得权限。以下重点讲怎么写:u32 secpos; u16 secoff; u16 secremain;      u16 i;     u8 * W25QXX_BUF;       W25QXX_BUF=W25QXX_BU...
STM32F4——FLASH闪存编程原理
一、简介:n    首先是对FLASH闪存的一个基本了解和认识。FLASH闪存分为多个模块。其中有:主存储器、系统存储器、OTP区域、选项字节。现在主要认识的是有关主存储器的相关结构,主存储器分为了多个扇区,每个扇区都有相关字节的存储区域,通过扇区的方式来管理内存可以方便数据的存储。n二、有关FLASH闪存的操作。n    1、锁定和解锁操作:n    为了对FLASH闪存数据做好一定的防
最近在搞SPI Flash的驱动,有一个问题迟迟不能解决
最近在搞SPI Flash的驱动,有一个问题迟迟不能解决
结合固件库探讨STM32读写FLASH步骤、HardFault问题
在单片机系统中,程序的存储一般放在flash中,不易丢失的数据一般存放在EEROM中(比如说我们经常使用的AT24C02,、AT24C256),一般情况不建议将频繁读写的数据存放在Flash中,一方面FLASH在单片机中都是1K或2K为一页,在执行擦除指令时,一次最少要擦除一页的数据。FLASH支持单字节读写,但每次在更新数据前都必须先擦除原数据,然后才能重新写入数据,而不能在原数据基础上更新内容
ESP8266flash擦除教程及工具
ESP8266flash擦除教程,擦除所需安装环境,安装环境安装包的下载地址,安装环境教程以及擦除flash的过程,擦除小工具。
W25Q64Flash芯片STM32操作
该资源包含STM32F407的SPI寄存器配置及对W25Q64进行读写及擦除所需要的函数。
【图文解说】基于飞思卡尔MC9S12XS的Flash擦除和写入操作
基于飞思卡尔MC9S12XS128的Flash擦除和写入讲解
spi_flash的操作(擦除、写数据)
SPI_FLASH的擦除、写、读操作n继续在上一节中的spi_flash.c文件中编写。n明确添加代码所要实现的功能:对spi_flash进行各种操作(去保护、擦除、(烧)写操作、读操作)。n明确对spi_flash写操作的流程:去保护 -> 擦除 -> 烧写。n完成各模块的函数4.1 去保护操作(去“两层保护”:状态寄存器,数据存储区)—将“两次去保护”放在SPI_Flash_Init函数 n—去
ESP8266flash擦除工具完整安装
里面有个readme文件,仔细阅读即可
第50章 读写内部FLASH—零死角玩转STM32-F429系列
第50章     读写内部FLASHrn全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn rn野火视频教程优酷观看网址:http://i.youku.com/firege rn rn rn rn本章参考资料:《STM32F4xx 中文参考手册》、《STM32F4xx规格书》、库说明文档《stm32f4xx_dsp_stdperiph_lib_um.chm》。
个人笔记_FLASH性质存储器扇区边界擦除算法
大部分FLASH性质存储器都有很多相似的操作规则,比如擦除方式就很特殊,最小擦出单位必须按照扇区来操作,而数据的写入地址的内容必须是擦除状态。这也是为什么EEPROM还能存在的一方面的原因吧(可以字节擦除)。由于这种特殊的性质,导致我们在利用FLASH存储数据的时候必须注意对扇区擦除的操作。这里我总结个人的两个操作技巧(以下内容是针对不带文件系统的存储器说明的,带文件系统的也可以参考)。
基于FPGA的flash板卡程序擦除与固化
1.擦除程序,程序擦除是可以用软件,但本文主要讨论用代码实现擦除。擦除已经固化好的程序需要对flash芯片(M25P94)的时序进行描述。时序原理如图所示:nnnn    这里主要是对flash的前8个扇区进行擦除,为了产生擦除标志,所以多家了一个wait_3s的标识,8个扇区总共需要24秒。nn2.固化原理描述,fpga是没有存储程序的空间的。所以需要flash芯片来存储程序,可以用ise软件固...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 stm32视频游戏开发 stm32物联网课程设计