stm8s eeprom讀寫

stm8s有自帶的eeprom,起始地址是0x4000,終止到哪看手冊,因爲我用的時候只寫一個4字節數據,配置如下:

入參:eeprom偏移地址,寫入的數據   

void eeprom_write(const unsigned char addr,unsigned long date)
{
   asm("sim");
   FLASH_CR1_FIX = 1;//編程時間固定爲標準編程時間
   FLASH_CR2_WPRG = 1;//使能字編程
   FLASH_NCR2_NWPRG = 0;/使能字編程
   do
   { 
     FLASH_DUKR = 0xAE;
     FLASH_DUKR = 0x56;
   }
   while(!(FLASH_IAPSR_DUL & 1));//等待解鎖
   unsigned long *p = (unsigned long*)(0x4000 + addr);
   *p = date;
   //while(!FLASH_IAPSR_EOP & 1);//等待寫完成//加上掉電寫入不準
   FLASH_IAPSR_DUL = 0;//上鎖
   asm("rim");

}

說明:while(!FLASH_IAPSR_EOP & 1);被我註釋掉了,原因如註釋所寫的那樣,我也不知道爲什麼。然後寫完之後記得上鎖,要不然會不準。另外就是這裏中文手冊又出錯了,就是do while語句中的那兩句給FLASH_DUKR寫入密鑰,中文手冊寫反了。

讀eeprom就比較簡單了,代碼如下:

入參:eeprom地址偏移量                             出參:相應地址的值*/
unsigned long eeprom_read(const unsigned char addr)
{
   return *((unsigned long*)(0x4000 + addr));
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章