/*********程序测试读写通过***********/ #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; }