STM8S 操作內(nèi)部EEPROM
對(duì)于STM8S103F3這款芯片來(lái)講,存在640個(gè)字節(jié)的EEPROM,當(dāng)然如果有外部EEPROM,自然是不會(huì)使用到內(nèi)部的EEPROM的。但小東西也有大用途,例如做無(wú)線(xiàn)應(yīng)用時(shí),減少成本的情況下,還能保存一些特定設(shè)置,如:休眠時(shí)間,工作頻率,輸出功率,密碼等。
下圖所示,STM8S系列EEPROM大小一目了然。
操作EEPROM自然分成讀操作和寫(xiě)操作,先查看STM8S的手冊(cè)描述如下:
中文手冊(cè)上的存儲(chǔ)器組織結(jié)構(gòu)存在錯(cuò)誤,如:
對(duì)應(yīng)英文手冊(cè)如:
對(duì)應(yīng)的代碼如下;
char*p=0x4000;
u8a,b,c;
a=*p;
b=*p++;
c=*p++;
就像C8051操作外部數(shù)據(jù)存儲(chǔ)一樣,只需要簡(jiǎn)單通過(guò)指針指向0x4000位置即可。
寫(xiě)操作,則有些小麻煩,主要是STM8S的存儲(chǔ)區(qū)安全機(jī)制問(wèn)題。
中文手冊(cè)描述:
英文手冊(cè)描述:
u8write_header(header*h)
{
u8*p=(u8*)EP_HEADER_ADDR;//EP_HEADER_ADDR0x4000
if(!h)
return0;
/*操作EEPROM,需要先進(jìn)行解鎖*/
FLASH_DUKR=0xAE;//注意這里不能斷點(diǎn)調(diào)試,否則會(huì)造成內(nèi)部不同步,F(xiàn)LASH解鎖失敗
FLASH_DUKR=0x56;
FLASH_CR2=0x00;
FLASH_NCR2=0xFF;
if(!(FLASH_IAPSR&0x08))//檢測(cè)對(duì)應(yīng)的位是否解鎖
return0;
_memcpy(p,(u8*)h,sizeof(header));
FLASH_IAPSR=(u8)(~0x08);//重新上鎖
return1;
}
執(zhí)行解鎖后,操作也是非常簡(jiǎn)單的。
總結(jié):
1、STM8S內(nèi)部EEPROM使用還是挺方便的,只有寫(xiě)操作時(shí)需要解鎖。
2、中文手冊(cè)很多時(shí)候會(huì)存在錯(cuò)誤,只能作為快速瀏覽用,具體應(yīng)用還得參考官方英文手冊(cè)。