下面是使用寄存器操作内部EEPROM的函数,操作FLASH的可自行对照库函数修改即可。
void Flash_Init(void) { FLASH->CR1 = FLASH_CR1_RESET_VALUE; FLASH->CR2 = FLASH_CR2_RESET_VALUE; FLASH->NCR2 = FLASH_NCR2_RESET_VALUE; FLASH->IAPSR &= (u8)(~FLASH_IAPSR_DUL); FLASH->IAPSR &= (u8)(~FLASH_IAPSR_PUL); (void) FLASH->IAPSR; /* Reading of this register causes the clearing of status flags */ } void Flash_Unlock(void) { FLASH->DUKR = 0xAE; /* Warning: keys are reversed on data memory !!! */ FLASH->DUKR = 0x56; } void FLASH_ProgramByte(u32 Address,u8 data) { *(char __far *)Address = data; } void Flash_Lock(void) { /* Lock memory */ FLASH->IAPSR &= (u8)0xF7; } u8 FLASH_ReadByte(u32 Address) { return ( *(char __far *)Address); } /* * Write one byte to the data EEPROM memory. */ void eeprom_program_byte(unsigned char __near * dst, unsigned char v) { FLASH_ProgramByte((u32)dst, (u8)v); } /* * Write one 4-byte long word to the data EEPROM memory. The address * must be 4-byte aligned. void eeprom_program_long(unsigned char __near * dst, unsigned long v) { FLASH_ProgramWord((u32)dst, (u32)v); } */ void eeprom_init(void) { } /************************************************************************** * 函数名:eeprom_BufferWrite * 描述 :使用页写命令写多个页的数据到内部eeprom * 输入 :- pBuffer:指向要写入内部eeprom中的数据的指针 * - WriteAddr:将写入的eeprom的地址 * - NumByteToWrite:要写入eeprom的字节数 * 调用 :外部调用 *************************************************************************/ void eeprom_BufferWrite(u8* pBuffer, u32 WriteAddr, u16 NumByteToWrite) { while (NumByteToWrite--) /* 计数 */ { FLASH_ProgramByte((u32)WriteAddr,(u8)*pBuffer); pBuffer++; WriteAddr++; } } /******************************************************************************* * 函数名 : eeprom_BufferRead * 描述 : 从FLASH读取NumByteToRead字节的数据. * 输入 : - pBuffer : 存放从FLASH读取的数据的缓冲区的指针 * - ReadAddr : 从FLASH的该地址处读数据 * - NumByteToRead : 要读取的字节数 *******************************************************************************/ void eeprom_BufferRead(u8* pBuffer, u32 ReadAddr, u16 NumByteToRead) { while (NumByteToRead--) /* 计数 */ { /* 读一个字节的数据 */ *pBuffer = FLASH_ReadByte(ReadAddr); pBuffer++; ReadAddr++; } }
我为什么不直接用库函数操作?!!!
——回复可见内容——