stm8s開(kāi)發(fā)(九) EEPROM的使用:使用EEPROM存儲數據!
EEPROM是單片機應用系統中經(jīng)常會(huì )用到的存儲器,它主要用來(lái)保存一些掉電后需要保持不變的數據。在以前的單片機系統中,通常都是在單片機外面再擴充一個(gè)EEPROM芯片,這種方法除了增加成本外,也降低了可靠性?,F在,很多單片機的公司都推出了集成有小容量EEPROM的單片機,這樣就方便了使用,降低了成本,提高了可靠性。
本文引用地址:http://dyxdggzs.com/article/201709/364741.htmSTM8單片機芯片內部也集成有EEPROM,容量從640字節到2K字節。最為特色的是,在STM8單片機中,對EEPROM的訪(fǎng)問(wèn)就象常規的RAM一樣,非常方便。EEPROM的地址空間與內存是統一編址的,地址從004000H開(kāi)始,大小根據不同的芯片型號而定。
為了管理方便,定義EEPROM的地址
#define EP_HEADER_ADDR 0x4000
操作EEPROM需要初始化,也就是FLASH解鎖,解鎖需要兩個(gè)密鑰,順序還不能調換。
void EEPROM_init(void)
{
do
{
FLASH_CR1=0x00;
FLASH_CR2=0x00;
FLASH_NCR2=0xFF;
FLASH_DUKR = 0xAE; // 寫(xiě)入第一個(gè)密鑰
FLASH_DUKR = 0x56; // 寫(xiě)入第二個(gè)密鑰
} while((FLASH_IAPSR & 0x08) == 0); // 若解鎖未成功,則重新再來(lái)
}
還有一個(gè)加鎖的功能,一般來(lái)說(shuō)操作完EEPROM之后需要加鎖保護。
void EEPROM_lock(void)
{
FLASH_IAPSR=(u8)(~0x08); //重新上鎖
}
接下來(lái)就是兩個(gè)讀寫(xiě)的基本操作了。
//EEPROM指定地址寫(xiě)入一個(gè)數據 addr:相對地址 dat:數據
void EEPROM_write(unsigned char addr, unsigned char dat)
{
unsigned char *p;
p=(unsigned char *)(EP_HEADER_ADDR + addr);
*p=dat;
while(!(FLASH_IAPSR&0x04)); //等待寫(xiě)操作成功
}
//EEPROM指定地址讀出一個(gè)數據 addr:相對地址
unsigned char EEPROM_read(unsigned char addr)
{
unsigned char *p;
p=( unsigned char *)(EP_HEADER_ADDR + addr);
return *p;
}
這里給的地址是絕對地址,函數內有個(gè)偏移地址的操作(偏移4000H)。
炒雞簡(jiǎn)單是不?
有關(guān)EEPROM和FLASH的介紹:http://blog.csdn.net/yuanlulu/article/details/6163106
附上stm8s在IAR環(huán)境下的項目工程,包括了SPI、IIC、PWM、AWU、USART、EEPROM等片上硬件的初始化代碼。
評論