Files
SM-1000M/IAPV1.1/Driver/eeprom/eeprom.c
2026-04-23 10:50:18 +08:00

116 lines
2.7 KiB
C

/*********程序测试读写通过***********/
#include "eeprom.h"
#include "bsp.h"
#include "stm32l1xx_flash.h"
Init_Data Init_Data_Equipment;
/*------------------------------------------------------------
Func: EEPROM数据按字节读出
Note:
-------------------------------------------------------------*/
void EEPROM_ReadBytes(u16 Addr,u8 *Buffer,u16 Length)
{
u8 *wAddr;
wAddr=(u8 *)(EEPROM_BASE_ADDR+Addr);
while(Length--){
*Buffer++=*wAddr++;
}
}
/*------------------------------------------------------------
Func: EEPROM数据读出
Note:
-------------------------------------------------------------*/
void EEPROM_ReadWords(u16 Addr,u16 *Buffer,u16 Length)
{
u32 *wAddr;
wAddr=(u32 *)(EEPROM_BASE_ADDR+Addr);
while(Length--){
*Buffer++=*wAddr;
wAddr+=2;
}
}
/*------------------------------------------------------------
Func: EEPROM数据读出双字
Note:
-------------------------------------------------------------*/
void EEPROM_ReadDWords(u16 Addr,u32 *Buffer,u16 Length)
{
u32 *wAddr;
wAddr=(u32 *)(EEPROM_BASE_ADDR+Addr);
while(Length--){
*Buffer++=*wAddr;
wAddr+=4;
}
}
/*------------------------------------------------------------
Func: EEPROM数据按字节写入
Note:
-------------------------------------------------------------*/
void EEPROM_WriteBytes(u16 Addr,u8 *Buffer,u16 Length)
{
u8 *wAddr;
wAddr=(u8 *)(EEPROM_BASE_ADDR+Addr);
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;
}
/*------------------------------------------------------------
Func: EEPROM数据按字写入
Note: 字当半字用
-------------------------------------------------------------*/
void EEPROM_WriteWords(u16 Addr,u16 *Buffer,u16 Length)
{
u32 *wAddr;
wAddr=(u32 *)(EEPROM_BASE_ADDR+Addr);
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++;
wAddr+=2;
while(FLASH->SR&FLASH_SR_BSY);
}
FLASH->PECR|=FLASH_PECR_PELOCK;
}
/*------------------------------------------------------------
Func: EEPROM数据按双字写入
Note:
-------------------------------------------------------------*/
void EEPROM_WriteDWords(u16 Addr,u32 *Buffer,u16 Length)
{
u32 *wAddr;
wAddr=(u32 *)(EEPROM_BASE_ADDR+Addr);
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++;
wAddr+=4;
while(FLASH->SR&FLASH_SR_BSY);
}
FLASH->PECR|=FLASH_PECR_PELOCK;
}