Stm32的Flash模拟EEPROM与BOOT基本了解_第1页
Stm32的Flash模拟EEPROM与BOOT基本了解_第2页
Stm32的Flash模拟EEPROM与BOOT基本了解_第3页
Stm32的Flash模拟EEPROM与BOOT基本了解_第4页
Stm32的Flash模拟EEPROM与BOOT基本了解_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第页Stm32的Flash模拟EEPROM与BOOT基本了解闪存模块存储器组织按照不同容量,存储器组织成32个1K字节/页(小容量),128个1K字节/页(中容量),256个2K字节/页(大容量)的主存储器和一些信息块等下面这张图是大容量产品的Flash内部图:主要分为三个部分:主存储器、信息块和闪存存储器接口寄存器;

主存储器:也就是我们常说的储存量的大小,比如:stm32ZET6的flash有512K,说的就是这块的容量;该部分用来存放代码和数据常数(如const类型的数据)。对于大容量产品,其被划分为256页,每页2K字节。注意,小容量和中容量产品则每页只有1K字节。从上图可以看出主存储器的起始地址就是0X08000000;起始地址时说的是stm32通用地址空间的绝对地址,下面会说到通用地址空间。信息块:该部分分为2个小部分,其中启动程序代码(系统存储器),是用来存储ST自带的启动程序,用于串口下载代码,当B0接V3.3,B1接GND的时候,运行的就是这部分代码。用户选择字节,则一般用于配置写保护、读保护等功能。

闪存存储器接口寄存器:该部分用于控制闪存读写等,是整个闪存模块的控制机构。

三个部分中,主存储器和信息块是可以由stm32的外部引脚BOOT[1-0]来选择启动的,下面是控制BOOT[1-0]改变启动空间:

信息块(系统存储器):B0接V3.3,B1接GND的时候主存储器:B0、B1都接GND

通用地址空间Cortex-M3的地址空间有4G,但它只对这4G空间作了预先的定义,把4G空间分成8个块,每块大小为512M,并指出各段该分给哪些设备。具体的实现由芯片厂商决定,厂商可以设计出具有自己特色的产品。下图是Cortex-M3的存储器映射图可以看出前边讲的flash主存储器的起始地址就是0X08000000,对应的就是上面的地址空间,CPU访问外部器件以及数据都是通过地址线来访问的,所以每个器件都会占用一段通用地址空间的一段连续的地址。

FLASH闪存的读取由上面的通用地址空间可以看出内置闪存模块可以在通用地址空间直接寻址,任何32位数据的读操作都能访问闪存模块的内容并得到相应的数据。例如,我们要从地址addr,读取一个半字(半字为16为,字为32位),可以通过如下的语句读取:data=(vu16)addr;

下面是stm32Flash模拟EEPROM的手册资料链接:/download/weixin_39780116/11019310

FLASH编程步骤:解锁FLASH://解锁闪存器voidSTMFLASH_Unlock(){FLASH->KEYR=FLASH_KEY1;FLASH->KEYR=FLASH_KEY2;}

对FLASH编程

在这//写入半字//faddr:写入的地址dat:写入的数据u8STMFLASH_WriteHalfWord(u32faddr,u16dat){u8res;res=STMFLASH_WaitDone(0xff);//判断是否忙,有其他未完成操作if(res==0)//不忙{FLASH->CR|=1CR//清除PG位.}}returnres;}

里插入代码片

FLASH擦除页://擦除页//paddr:要擦除的地址u8STMFLASH_ErasePage(u32paddr){u8res;res=STMFLASH_WaitDone(0x5fff);//判断是否忙,有其他未完成操作if(res==0)//不忙{FLASH->CR|=1AR|=paddr;//选择要擦除的页FLASH->CR|=1CR//清除擦除使能位}}returnres;}

驱动代码:

#ifndef__FLASH_H#define__FLASH_H#include"stm32f10x.h"#defineSTM32_FLASH_SIZE512//用于控制大容量和小容量的选择#defineSTM32_FLASH_WREN1//写使能

//stm32的其实地址#defineSTM32_FLASH_BASE0x08000000

//stm32的键值#defineFLASH_KEY10x45670123#defineFLASH_KEY20xCDEF89AB

voidSTMFLASH_Unlock(void);//flash解锁voidSTMFLASH_Lock(void);//flash上锁u8STMFLASH_GetStatues(void);//获取Flash的状态u8STMFLASH_WaitDone(u16time);//等待写操作结束u8STMFLASH_ErasePage(u32paddr);//擦除页u8STMFLASH_WriteHalfWord(u32faddr,u16dat);//写入半字u16STMFLASH_ReadHalfWord(u32faddr);//读出半字voidSTMFLASH_WriteLenByte(u32WritAddr,u32DataToWrite,u16Len);//指定地址开始写入指定长度的数据u32STMFLASH_ReadLenByte(u32ReadAddr,u16len);//指定地址开始读取指定长度数据voidSTMFLASH_Write(u32WriteAddr,u16*pBuffer,u16NumToWrite);//从指定地址开始写入指定长度的数据voidSTMFLASH_Read(u32ReadAddr,u16*pBuffer,u16NumToRead);//从指定地址开始读出指定长度的数据

#endif

#include"flash.h"#include"delay.h"

//解锁闪存器voidSTMFLASH_Unlock(){FLASH->KEYR=FLASH_KEY1;FLASH->KEYR=FLASH_KEY2;}

//flash上锁voidSTMFLASH_Lock(void){FLASH->CR|=1SR;if(SR//忙elseif(SR//编程错误。对非0xffff的地址编程了elseif(SR//写保护错误return0;//操作结束}

//等待写操作结束//time:延时多少USu8STMFLASH_WaitDone(u16time){u8sr;do{sr=STMFLASH_GetStatues();//获取状态if(sr!=1)break;//不忙delay_us(1);time--;}while(time);if(time==0)return0xff;//等待超时returnsr;}

//擦除页//paddr:要擦除的地址u8STMFLASH_ErasePage(u32paddr){u8res;res=STMFLASH_WaitDone(0x5fff);//判断是否忙,有其他未完成操作if(res==0)//不忙{FLASH->CR|=1AR|=paddr;//选择要擦除的页FLASH->CR|=1CR//清除擦除使能位}}returnres;}

//写入半字//faddr:写入的地址dat:写入的数据u8STMFLASH_WriteHalfWord(u32faddr,u16dat){u8res;res=STMFLASH_WaitDone(0xff);//判断是否忙,有其他未完成操作if(res==0)//不忙{FLASH->CR|=1CR//清除PG位.}}returnres;}

//读出半字//faddr:要读的地址dat:u16STMFLASH_ReadHalfWord(u32faddr){return*(vu16*)faddr;}

//从指定地址开始读出指定长度的数据//ReadAddr:起始地址//pBuffer:数据指针//NumToWrite:半字(16位)数voidSTMFLASH_Read(u32ReadAddr,u16*pBuffer,u16NumToRead){u16i;for(i=0;i=(STM32_FLASH_BASE+1024*STM32_FLASH_SIZE)))return;//非法地址STMFLASH_Unlock();offaddr=WriteAddr-STM32_FLASH_BASE;//减去基地址后的剩余偏移量secpos=offaddr/STM_PAGE_SIZE;//地址在第几个页secoff=(offaddr%STM_PAGE_SIZE)/2;//剩余不足一个页区偏移量在一个页偏移多少、secremain=STM_PAGE_SIZE/2-secoff;//页区剩余空间大小if(Nu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论