STM32L内部EEPROM?

手机看到的文章:https://blog.csdn.net/WangSanHuai2010/article/details/7932867

今天想自己分析一下:

STM32L471

【0--255】
一共256页
每页2K一共512Kflash
page255起始地址0X0807F800
如果有下页(其实没有了)
起始地址是0X0807F800+0X800=0X08080000

整个FLASH地址是[0X0800 0000-->0X0808 0000)512K

STM32L内部EEPROM?_第1张图片
问题:[0X0808 0000-->0x0810 0000)是什么?也是512k

回答:我们的骗子是512K 有的是1M呀

 

开始做文章的代码:

#define uint16 uint16_t
#define uint8  uint8_t

#define EEPROM_BASE_ADDR	0x08080000	
#define EEPROM_BYTE_SIZE	0x0FFF

void EEPROM_ReadBytes(uint16 Addr,uint8 *Buffer,uint16 Length)
{
	uint8 *wAddr;
	wAddr=(uint8 *)(EEPROM_BASE_ADDR+Addr);
	while(Length--){
		*Buffer++=*wAddr++;
	}	
}
#define EN_INT      	__enable_irq();		//系统开全局中断
#define DIS_INT     	__disable_irq();	//系统关全局中断
#define PEKEY1	0x89ABCDEF		//FLASH_PEKEYR
#define PEKEY2	0x02030405		//FLASH_PEKEYR
void EEPROM_WriteBytes(uint16 Addr,uint8 *Buffer,uint16 Length)
{
	uint8 *wAddr;
	wAddr=(uint8 *)(EEPROM_BASE_ADDR+Addr);
	DIS_INT
	FLASH->KEYR=PEKEY1;				//unlock
	FLASH->KEYR=PEKEY2;
	while(FLASH->CR&FLASH_CR_LOCK);
	FLASH->CR|=FLASH_CR_FSTPG;		//not fast write
	while(Length--){
		*wAddr++=*Buffer++;
		while(FLASH->SR&FLASH_SR_BSY);
	}
	FLASH->CR|=FLASH_CR_LOCK;
	EN_INT
}

void EEPROM_test(void)
{
	uint8 test[]={"HELLO"};
	EEPROM_WriteBytes(EEPROM_BASE_ADDR,test,sizeof(test));
	
	

}

我写不下去了。。。。

EEPROM_WriteBytes(EEPROM_BASE_ADDR,test,sizeof(test));这里有问题 需要地址是U16的

我上哪儿给你地址?你自己定义的地址是U32的!!!文档没有找到介绍 说明:没有EEPROM!!

荒谬啊!

或者--再后来,突然发现STM32L15x竟然有自带EEPROM,不禁大喜!

算了 没价值的东西!

你可能感兴趣的:(STM32L内部EEPROM?)