116 lines
2.7 KiB
C
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;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|