参考:http://download.csdn.net/detail/my_friend_ship/4166970
要点: 将数据写入flash之前,每次都要擦除,否则会写入不成功,出现的错误状态为:FLASH_Status=FLASH_ERROR_PG
写入数据成功后可以在Memory 中查看刚刚写入的数据,具体在Memory 窗口中输入:0x08010000,既可以看到此处的数据为 :Data = 0x15041979;//要写入的地址
擦除的起始地址与终止地址
#define StartAddr ((u32)0x08010000)
#define EndAddr ((u32)0x0807ffff)
//擦除
char IAP_Init()//初始化loaded 的flash
{
FLASHStatus = FLASH_COMPLETE;
//MemoryProgramStatus = PASSED;
/* Unlock the Flash Program Erase controller */
FLASH_Unlock();
/* Define the number of page to be erased */
NbrOfPage = (EndAddr - StartAddr) / FLASH_PAGE_SIZE;
/* Clear All pending flags */
FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
/* Erase the FLASH pages */
for(EraseCounter = 0; (EraseCounter < NbrOfPage) && (FLASHStatus == FLASH_COMPLETE); EraseCounter++)
{
FLASHStatus = FLASH_ErasePage(StartAddr + (FLASH_PAGE_SIZE * EraseCounter));
}
return FLASHStatus;
}
int main(void)
{
u8 t;
u8 key;
u16 oldcount=0; //老的串口接收数据值
u16 applenth=0; //接收到的app代码长度
u8 clearflag=0;
u32 FlashDestination;
FLASH_Unlock();
RCC_Configuration();
GPIO_Configuration();
NVIC_Configuration();
SysTick_Config();
UART_init(9600);//串口初始化为9600 5648
IAP_Init();
Data = 0x15041979;//要写入的地址
u32 Address;
while(1)//循环擦除写入
{
{
IAP_Init();
int j,x;
u32 RamSource;
FLASHStatus = FLASH_COMPLETE;
/* Program the data received into STM32F10x Flash */
FLASHStatus=FLASH_ProgramWord(StartAddr, Data);
if( FLASHStatus == FLASH_COMPLETE )
{
Address = StartAddr;
if (*(u32*)Address != Data )
{
/* End session */
RFID_SendString("IAP XXXXX !"); //写入失败
}
else
RFID_SendString("IAP WRITE !");//写入成功
}
}
关键字:STM32 Flash 擦除 读写
引用地址:
STM32 Flash 擦除 读写 成功
推荐阅读最新更新时间:2024-03-16 16:11
基于闪烁存储器的DSP并行引导装载方法
TMS320VC5409 是TI公司推出的第一代的高性能、低价位、低功耗数字信号处理器(DSP)。与现在流行的TMS320C5409相比,性能提高了60%,功耗效率提高了 50%。它的应用对象大多是要求能脱机运行的内嵌式系统,如机顶盒(STB)、个人数字助理(PDA)和数字无线通信等。闪烁存储器(FLASH MEMORY)是可以在线电擦写、掉电后信息不丢失的存储器。FLASH与EPROM相比,具有更高的性能价格比,而且体积小、功耗低、擦写速度快、使用比较方便。因此,采用FLASH存储程序和固定数据是一种比较好的选择。AMD公司的Am29LV400B FLASH可以直接与DSP相接。 1 Am29LV400B的主要特点及编程方
[嵌入式]
STM32 CAN 通讯 标示符过滤器设置
简介:最近看了下STM32 CAN 通讯其中标示符过滤器设置大有讲究。特别是你要使用ST库函数时,当过滤器工作在屏蔽模式下,并且你把屏蔽位设了1也就是标示符对应位必须全部匹配才能通过,这是由其要小心。 举个例子吧,过滤器长度为32位,模式为屏蔽模式,假如我要发送的标示符为0x1314;那过滤器设置如下 一、过滤器完全无效 接收到的标示符全部通过 0x1314 二进制码: 0000 0000 0000 0000 0001 0011 0001 0100 CAN_Filter xxxx xxxx xxxxxxxx xxxx xxxx xxxx xxxx CAN_FilterMask 0000 0000 0000 00
[单片机]
STM32-一文读懂EXTI外部中断/事件系统
STM32的外部中断/事件系统简介 注意这里的外部中断指的是EXTI,是芯片的外部中断,主要是由芯片外部事件触发的中断,不是内核的外部中断!在《STM32-异常与中断》中提到的外部中断均是相对于内核而言的,比如串口中断、定时器中断等等都是(内核的)外部中断。 大部分的STM32外部中断/事件控制器由19个产生事件/中断请求的边沿检测器组成,支持 19 个外部中断/事件请求,这19 个外部分别中断为: (互联型 )产品有20个) 线 0~15:对应外部 IO 口的输入中断。 线 16:连接到 PVD 输出。 线 17:连接到 RTC 闹钟事件。 线 18:连接到 USB 唤醒事件。 每个中断设有状态位,每个中断/事件都有独
[单片机]
STM32与SD卡通信分层思考
最近做了一些 STM32 和SD卡通信的一些思考,一直以来SD的驱动和应用困扰了我很久,寒假的时候看到SD简化版物理层协议的时候就傻掉了,看到SD的驱动快3000行的代码也动摇了。这几天几种地看了一下SD卡的相关内容,总结了一些体会,感觉也没有那么恐怖了。我决定从分层上来讨论SD的驱动和应用,因为这样可以构建一个清晰的逻辑,且不知哪位计算机大师曾说过:一切计算机问题都可以用分层的方法来解决。 我自己把SD卡从驱动到应用共分为4层,从下至上依次为:驱动层、物理层、文件系统层、应用层。下面一一来介绍各层的一些重要的操作。 1)驱动层 驱动层,对应到ST的库,就是stm32f10x_sdio.c/.h这个两文件。其实使用任
[单片机]
STM32高级开发(14)-使用CubeMX生成STM32工程
在我们了解libopencm3的使用后,发现libopencm3只适用于小型工程,其最大的特色只是在USB方面的使用方便,那么在我们配置大型工程的时候有没有一种更快捷的方式呢,显然是有的。它就是CubeMX,ST官方出的神器,可以使得我们像配置FPGA一样配置STM32的功能。CubeMX早期是运行在windows下的,但由于是Java写成的它也可以同样的运行在Linux环境中。 安装JAVA环境 在Ubuntu中可以使用的java环境有很多我们这里使用软件中心的默认安装。 $ sudo apt-get install default-jre 安装完毕后可使用指令查看java版本验证安装成功 $ java -version
[单片机]
STM32CUBEMX(10)--Flash读写
概述 本例程主要讲解如何对芯片自带Flash进行读写,用芯片内部Flash可以对一些需要断电保存的数据进行保存,无需加外部得存储芯片,本例程采用的是STM32F030R8T6,64K大小的Flash。 硬件准备 首先需要准备一个开发板,这里我准备的是NUCLEO-F030R8的开发板: 选择芯片型号 使用STM32CUBEMX选择芯片stm32f030r8,如下所示: 配置时钟源 HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用内置的时钟源,故都选择Disable选项,如下所示: 配置时钟树 STM32F0的最高主频到48M,所以配置48即可: 串口配置 本次实验使用的串口1进行串口通信,波特率配置为1
[单片机]
意法半导体Open.MEMS授权计划可加快新产品开发并缩短研发周期
免费授权单节点开发软件,只需简单的五个步骤即可在五分钟内启动设计项目。 中国,2014年12月5日 —— 横跨多重电子应用领域、全球领先的半导体供应商、世界第一大MEMS产品制造商、世界最大的消费电子及移动应用MEMS产品供应商 及汽车应用MEMS产品供应商 意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)发布了其Open.MEMS授权计划。通过提供快速简易的单节点 (single-node) 应用评估授权,该开发计划将加快新产品开发并缩短研发周期。 为了向所有用户和开放式开发社区推广MEMS传感器的应用,该计划将准许Open.MEMS授权用户免费使用驱动程序、中间件和应用软
[半导体设计/制造]
一文了解STM32启动过程
1 概述 说明 每一款芯片的启动文件都值得去研究,因为它可是你的程序跑的最初一段路,不可以不知道。通过了解启动文件,我们可以体会到处理器的架构、指令集、中断向量安排等内容,是非常值得玩味的。 STM32作为一款高端 Cortex-M3系列单片机,有必要了解它的启动文件。打好基础,为以后优化程序,写出高质量的代码最准备。 本文以一个实际测试代码--START_TEST为例进行阐述。 整体过程 STM32整个启动过程是指从上电开始,一直到运行到 main函数之间的这段过程,步骤为(以使用微库为例): ①上电后硬件设置SP、PC ②设置系统时钟 ③软件设置SP ④加载.data、.
[单片机]