下面是使用寄存器操作内部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++;
}
}
我为什么不直接用库函数操作?!!!
——回复可见内容——
我要赚赏金
