STM32L031 LL库读写内部EEPROM

Posted シ゛甜虾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32L031 LL库读写内部EEPROM相关的知识,希望对你有一定的参考价值。

由于STM32L031没有找到FLASH_PECR_FTDW寄存器,这里就把这个注释掉了

#include "eeprom.h"
#include "main.h"

//eeprom读测试
void eeprom_test_read()

	uint32_t temp;
	uint16_t i = 0;
	for(i=0;i<256;i++)
	
		temp = *(__IO uint32_t*)(EEPROM_BASE_ADDR+(i*4));
#ifdef ENABLE_PRINT
		printf("data:%08x\\t",temp);
#endif
	


/*------------------------------------------------------------
 Func: EEPROM数据按字节写入
 Note:
-------------------------------------------------------------*/
void eeprom_write_bytes(uint16_t Addr,uint8_t *Buffer,uint16_t Length)

	uint8_t *wAddr;
	wAddr=(uint8_t *)(EEPROM_BASE_ADDR+Addr);
	DIS_INT
	FLASH->PEKEYR=PEKEY1;				//unlock
	FLASH->PEKEYR=PEKEY2;
	while(FLASH->PECR&FLASH_PECR_PELOCK);
	//FLASH->PECR|=FLASH_PECR_FTDW;        //not fast write //没找到这个寄存器
	while(Length--)
		*wAddr++=*Buffer++;
		while(FLASH->SR&FLASH_SR_BSY);
	
	FLASH->PECR|=FLASH_PECR_PELOCK;
	EN_INT


//eeprom写测试
void eeprom_test_write()

	uint8_t datas[256];
	uint16_t i = 0;
  for(i=0;i<256;i++)
	
		datas[i] = 0x2F;
	
	eeprom_write_bytes(0,datas,256);
	eeprom_write_bytes(256,datas,256);
	eeprom_write_bytes(512,datas,256);
	eeprom_write_bytes(768,datas,256);

头文件

#ifndef __EEPROM_H
#define __EEPROM_H

#define PEKEY1	0x89ABCDEF		//FLASH_PEKEYR
#define PEKEY2	0x02030405		//FLASH_PEKEYR

#define EEPROM_BASE_ADDR	0x08080000	
#define EEPROM_BYTE_SIZE	0x03FF

#define EN_INT      	__enable_irq();		//系统开全局中断
#define DIS_INT     	__disable_irq();	//系统关全局中断


void eeprom_test_write();
void eeprom_test_read();

#endif

串口打印的EERPOM数据 

 

以上是关于STM32L031 LL库读写内部EEPROM的主要内容,如果未能解决你的问题,请参考以下文章

STM32L031F6 LL库硬件I2C使用,中断模式

STM32L031写Flash不使用HAL库

Stm32L0 内部EEPROM使用

STM32Cube STM32L053闹钟唤醒LL库和HAL库

STM32L151 LL库串口发送丢数据解决办法

STM32L151 LL库串口发送丢数据解决办法