STM8 EEPROM心得


對於STM8來說,其內部的EEPROM確實是個不錯的東西,而且STM8S103/105價格已經非常便宜了,當然也可以用STM8S003/005代替,而且價格更便宜,大概在,1.2/2.0元左右,比103/105的便宜1元左右,而且有網友說,其實這兩個系列的晶圓完全是一樣的(這個是秘密哦),至於ST為什么要這樣做,我們就不去猜了,大家應該都知道。

       對於EEPROM的讀寫時間比較長,特別是寫入的時間,都是在ms級的,想必大家都知道。但是對於單片機內置EEPROM來說,由於其內部特性,導致單片 機在操作EEPROM時,不能產生中斷,當然這個問題一般來說是沒有問題的。但是像有數碼管掃描的產品來說,這個就是問題了,一般來說,3位數碼管掃描周 期為18ms是沒有問題的,但大於這個時間,就有閃爍的感覺了,所以,對於3位數碼管來說,沒有顯示的時間大概為6ms,而我們從STM8芯片手冊上得到 是典型的EEPROM操作時間為6.6ms,所以,顯示3位數碼管就比較危險了,如果是4位,或者更多,那就更麻煩了。

      對於實驗確實可以獲取EEPROM的操作時間大概是2.5ms每字節,為此,如果在時間限制比較短的地方,我們可以在數碼管點亮后的空閑時間去顯示數 據,但每次只能是一字節數據,故要解決這個問題,最好建立個顯示緩沖,每次在顯示空閑時間去看緩沖中有無數據,如果有,我們就存儲,直到存儲完整為止。但 是我們還發現一個問題,如果用EEPROM的塊操作,實際上,消耗的時間和用操作一字節是一樣的。所以,我們也可以用每次操作一塊的方式實現EEPROM 的操作,從而實現,大量數據的存儲。

下面我們簡單說說,如何實現塊操作:

    STM8的庫函數中已經提供了塊操作函數FLASH_ProgramBlock(),但是要進行塊操作,還必須進行一系列的配置,否則,程序代碼會死在這個函數里邊的。


    1. 修改stm8s_conf.h的注射,讓#include "stm8s_flash.h"得以編譯

    2.修改stm8s.h的注射,讓使Flash功能能夠從RAM中運行

#if !defined (RAM_EXECUTION)
    #define RAM_EXECUTION  (1)                                                  // 塊寫入時,必須打開這里的注射
#endif /* RAM_EXECUTION */


   3.修改完成后,將產生不少警告,消除的方法,暫時還沒有找到,但不影響代碼的運行。

/**************************************************************************************
* FunctionName   : EEPWirteBlock()
* Description    : 塊寫入
* EntryParameter : None
* ReturnValue    : None
**************************************************************************************/
void EEPWirteBlock(u16 blockNum, u8 *pDat)
{
    //u8 tmpBuf[FLASH_BLOCK_SIZE] = {0};

    FLASH_EraseBlock(blockNum, FLASH_MEMTYPE_DATA);
    while (FLASH_GetFlagStatus(FLASH_FLAG_HVOFF) == RESET)
    {
        ;
    }
    
    FLASH_ProgramBlock(blockNum, FLASH_MEMTYPE_DATA, FLASH_PROGRAMMODE_FAST, pDat);
    while (FLASH_GetFlagStatus(FLASH_FLAG_HVOFF) == RESET)
    {
        ;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM