STM8S103F3--EEPROM

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   os   io   資料   

  本文介紹stm8s103f3這款單片機的eeprom的用法。

      EEPROM是單片機應用系統中經常會用到的儲存空間,它主要用來儲存一些掉電後需要保持不變的資料。在以前的單片機系統中,通常都是在單片機外面再擴充一個EEPROM晶片,這種方法除了增加成本外,也降低了可靠性。現在,很多單片機的公司都推出了整合有小容量EEPROM的單片機,這樣就方便了使用,降低了成本,提高了可靠性。

        1.介紹STM8S103F3的首地址及容量。

        STM8單片機晶片內部也整合有EEPROM,容量從640位元組到2K位元組。最為特色的是,在STM8單片機中,對EEPROM的訪問就象常規的RAM一樣,非常方便。EEPROM的地址空間與記憶體是統一編址的,地址從004000H開始,大小根據不同的晶片型號而定。

        stm8s103f3的EEPROM儲存結構如下:

        由可知,EEPROM的大小為0x00427f-0x004000+1=0x280=640bytes。

        2.介紹EEPROM的解保護寄存器。

        向該寄存器先寫入0XAE,然後寫入0X56就可以解除解保護。想該寄存器讀操作時,會返回0;

        3.FLASH狀態寄存器

    需要注意的是bit3,bit3為EEPROM地區解鎖標記,0表示保護使能,1表示保護失效。向FLASH_DUKR中寫入解鎖資料後通過查看FLASH_IAPSR寄存器的bit3來確定EEPROM地區已經解鎖。

        bit2表示編程結束標誌。對EEPROM地區進行寫操作後需要判斷該位來確定已經寫操作成功。

        下面設計兩個程式程式,第一個程式給EEPROM中的004000H位置寫入一個值01H,少寫入Flash中。第二個程式先讀出004000H位置的值,然後給該值加1,再寫入到004000H位置,也即是說每次上電時,004000H位置的值會加1。同時為了觀察現象,在第二個程式中設定了一個LED燈,通過燈的亮滅次數來表示當前004000H位置的值。

第一個程式:

 1         #include "iostm8s103f3.h" 2  3 void main() 4  5 { 6  7   unsigned char *p; 8  9   unsigned int i;10 11   p = (unsigned char *)0x4000; // 指標p指向晶片內部的EEPROM第一個單元12 13   // 對資料EEPROM進行解鎖14 15   do16 17   {18 19     FLASH_DUKR = 0xae; // 寫入第一個密鑰20 21     FLASH_DUKR = 0x56; // 寫入第二個密鑰22 23   } while((FLASH_IAPSR & 0x08) == 0); // 若解鎖未成功,則重新再來24 25   *p=1; // 寫入第一個位元組26 27   while((FLASH_IAPSR & 0x04) == 0); // 等待寫操作成功28 29 }

第二個程式:
 1  #include "iostm8s103f3.h" 2  unsigned char ch; 3  void delay (unsigned int times) 4  { 5    unsigned int i,j; 6    for(j=0;j<times;j++) 7    for(i=0;i<65535;i++); 8  } 9  void main()10  {11    unsigned char *p;12    unsigned int i;13    p = (unsigned char *)0x4000; // 指標p指向晶片內部的EEPROM第一個單元14    // 對資料EEPROM進行解鎖15     ch=0;16     PD_DDR = 0x10;17     PD_CR1 = 0x10;18     PD_CR2 = 0x00;19    do20    {21      FLASH_DUKR = 0xae; // 寫入第一個密鑰22      FLASH_DUKR = 0x56; // 寫入第二個密鑰23    } while((FLASH_IAPSR & 0x08) == 0); // 若解鎖未成功,則重新再來24    *p = *p+1; // 寫入第一個位元組25    while((FLASH_IAPSR & 0x04) == 0); // 等待寫操作成功26    ch=*p; // 將寫入的內容讀到變數ch中27    for(i=0;i<ch;i++){28      PD_ODR = 0x00;29      delay(4);30      PD_ODR=0X10;31      delay(4);32    }33  }

第二個程式下載完成之後,對開發版進行斷電和上電操作,上電後PD4所對應的LED燈就會閃爍,閃爍次數代表*p位置的值的大小。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.