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


问题:[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,不禁大喜!

算了 没价值的东西!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值