娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年09月08日(星期日)

2018年09月08日 | STM8L EEPROM DATA數據讀寫

發(fā)布者:caoxians4589 來源: eefocus關鍵字:STM8L  EEPROM  DATA  數據讀寫 手機看文章 掃描二維碼
隨時隨地手機看文章

一、概要 

STM8系列一般擁有如下幾種三種數據區(qū)


用戶啟動區(qū)域(UBC)

數據EEPROM(DATA)

程序區(qū)

選項字節(jié)(Option byte)

用戶啟動區(qū)域(UBC)包含有復位和中斷向量表,它可用于存儲IAP及通訊程序; 

數據EEPROM(DATA)區(qū)域可用于存儲用戶具體項目所需的數據; 

主程序區(qū)是指在FLASH程序存儲器中用于存儲應用代碼的區(qū)域; 

選項字節(jié)用于配置硬件特性和存儲器保護狀態(tài)。


作為應用而言,一般主要使用EEPROM(DATA),存放各種參數、或者離線數據、狀態(tài)數據等等。 

下面以以STM8L052R8為例,簡單說明對其的訪問方法。


根據STM8L052R8的手冊,其有Memory信息如下:


■ Memories 

– 64 KB Flash program memory and 256 bytes data EEPROM with ECC, RWW 

– Flexible write and read protection modes 

– 4 KB of RAM

可知其具有256字節(jié)的EEPROM。并帶有ECC校驗,和RWW(讀同時寫)功能。


RWW特性允許戶在執(zhí)行程序和讀程序存儲器時對DATA EEPROM區(qū)域進行寫操作, 

因此執(zhí)行的時間被優(yōu)化了。相反的操作是不允許的:即不允許在寫程序寄存器是對其進行讀操作。 

RWW特性是一直有效的而且可以在任意時刻使用

對EEPROM編程也有如下幾種方式,顧名思義,很容易理解其含義。 

字節(jié)編程方式最易于理解,也最簡單。


字節(jié)編程

字編程

塊編程

二、更深入的細節(jié) 

STM8系列有存儲器存取安全系統(tǒng)(MASS),在復位后,主程序和DATA區(qū)域都被自動保護以防止無意的寫操作。 

在修改其內容前必須對其解鎖,而解鎖的機制由存儲器存取安全系統(tǒng)(MASS)來管理。(UBC始終為寫保護) 

因此寫操作時需要先解除寫保護,并在完成寫入后恢復寫保護(視應用而定)。


Unlock的具體操作是,向FLASH_DUKR寄存器連續(xù)寫入兩個被叫作MASS密鑰的值:


第一個硬件密鑰: 0b1010 1110 (0xAE)

第二個硬件密鑰: 0b0101 0110 (0x56)

如果解鎖成功,FLASH_IAPSR中的DUL位被置為1,表示成功。 

應用必須檢測這個標志才可進行后續(xù)操作。 

(編程區(qū)與之類似,但寫入的是PUKR,且2個密鑰順序相反)


對EEPROM的讀寫其實非常簡單,就是直接對地址按字節(jié)進行賦值和取值。 

但是在操作后,需要等待其操作完成。判斷方法是:


對于EEPROM(DATA)數據區(qū):FLASH_IAPSR寄存器的HVOFF(高壓結束標志位)變?yōu)?

對于編程區(qū):FLASH_IAPSR寄存器的EOP(編程結束標志位)變?yōu)?

另外,試圖向被保護頁進行寫操作時,會發(fā)生錯誤,此時FLASH_IAPSR得WR_PG_DIS標志位會置1。 

所以,最終的判斷方法是: 

HVOFF或者WR_PG_DIS被置為1,前者為正常介紹,后者表示出錯


三、示例代碼


地址范圍定義(讀寫范圍為0~127字節(jié))


#define DATA_MEMORY_START_ADDR (FLASH_DATA_EEPROM_START_PHYSICAL_ADDRESS)

#define DATA_MEMORY_STOP_ADDR  (FLASH_DATA_EEPROM_START_PHYSICAL_ADDRESS + 128)


初始化函數


void flash_init(void)

{

    // 設置編程時間,指定標準編程時間即可

    FLASH_SetProgrammingTime(FLASH_ProgramTime_Standard);


    // 解鎖EEPROM區(qū)域(注意type是Data)

    FLASH_Unlock(FLASH_MemType_Data);


    // 等待解鎖成功

    // 本質是判斷FLASH->IAPSR寄存器的DUL標志位是否變?yōu)?。1表示寫保護消除,0為保護中

    // 任何時候都可以通過變更此標志位為0來恢復寫保護狀態(tài)

    while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET);

}


讀函數


uint8_t flash_read(uint32_t FlashAddr, uint8_t *dest, uint8_t nbyte)

{

    uint8_t i = 0;

    // 越界判斷

    if((FlashAddr < DATA_MEMORY_START_ADDR)||(FlashAddr+ nbyte > DATA_MEMORY_STOP_ADDR)) {

        return FALSE;

    }

    // 按字節(jié)讀

    for(i=0; i

        *(dest+i)=FLASH_ReadByte(FlashAddr+i);


        // 等待操作完成,此處未處理錯誤

        FLASH_WaitForLastOperation(FLASH_MemType_Data);

    }


    return nbyte;

}


寫函數


uint8_t flash_write(uint32_t FlashAddr, uint8_t *source, uint8_t nbyte)

{

    uint8_t i = 0;

    // 越界判斷

    if((FlashAddr < DATA_MEMORY_START_ADDR)||(FlashAddr+ nbyte > DATA_MEMORY_STOP_ADDR)) {

        return FALSE;

    }

    // 按字節(jié)寫

    for(i=0;i

        FLASH_ProgramByte((FlashAddr+i),*(source + i));


        // 等待操作完成,此處未處理錯誤

        FLASH_WaitForLastOperation(FLASH_MemType_Data);

    }

    return nbyte;

}


四、庫函數實現解析


FLASH_Unlock函數


void FLASH_Unlock(FLASH_MemType_TypeDef FLASH_MemType)

{

  /* Unlock program memory */

  if(FLASH_MemType == FLASH_MemType_Program)

  {

    FLASH->PUKR = FLASH_RASS_KEY1;

    FLASH->PUKR = FLASH_RASS_KEY2;

  }


  /* Unlock data memory */

  // 連續(xù)兩次賦值密鑰(固定值)

  if(FLASH_MemType == FLASH_MemType_Data)

  {

    FLASH->DUKR = FLASH_RASS_KEY2; /* Warning: keys are reversed on data memory !!! */ /* 0xAE */

    FLASH->DUKR = FLASH_RASS_KEY1; /* 0x56 */

  }

}


FLASH_ReadByte、FLASH_ProgramByte、FLASH_EraseByte 

由下可知,讀寫擦出均為直接操作地址。


uint8_t FLASH_ReadByte(uint32_t Address)

{

  /* Read byte */

  return(*(PointerAttr uint8_t *) (MemoryAddressCast)Address);

}


void FLASH_ProgramByte(uint32_t Address, uint8_t Data)

{

  *(PointerAttr uint8_t*) (MemoryAddressCast)Address = Data;

}


void FLASH_EraseByte(uint32_t Address)

{

  *(PointerAttr uint8_t*) (MemoryAddressCast)Address = FLASH_CLEAR_BYTE; /* Erase byte */

}


FLASH_WaitForLastOperation 操作等待


FLASH_Status_TypeDef FLASH_WaitForLastOperation(FLASH_MemType_TypeDef FLASH_MemType))

{

  uint16_t timeout = OPERATION_TIMEOUT;

  uint8_t flagstatus = 0x00;


  /* Wait until operation completion or write protected page occurred */

  // 程序區(qū)等待IAPSR的EOP或者WR_PG_DIS標識位被置為1

  if(FLASH_MemType == FLASH_MemType_Program)

  {

    while((flagstatus == 0x00) && (timeout != 0x00))

    {

      flagstatus = (uint8_t)(FLASH->IAPSR & (uint8_t)(FLASH_IAPSR_EOP |

                                                       FLASH_IAPSR_WR_PG_DIS));

      timeout--;       // 貼心的超時處理

    }

  }

  else

  {

   // 數據區(qū)的話,等待IAPSR的HVOFF或者WR_PG_DIS標識位被置為1

    while((flagstatus == 0x00) && (timeout != 0x00))

    {

      flagstatus = (uint8_t)(FLASH->IAPSR & (uint8_t)(FLASH_IAPSR_HVOFF |

                                                      FLASH_IAPSR_WR_PG_DIS));

      timeout--;        // 貼心的超時處理

    }

  }


  if(timeout == 0x00)

  { 

    // 超時

    flagstatus = FLASH_Status_TimeOut;

  }


  return((FLASH_Status_TypeDef)flagstatus);

}


以上,相比直接操作寄存器,用庫做STM開發(fā)還是比較有效率的。


關鍵字:STM8L  EEPROM  DATA  數據讀寫 引用地址:STM8L EEPROM DATA數據讀寫

上一篇:STM8L151 在IAR中實現Flash/EEPROM的擦寫
下一篇:MCU STM8L051F3xx EEPROM 操作筆記

推薦閱讀

無人駕駛車輛真要跑起來,需要解決感知、決策和執(zhí)行等層面的技術問題。感知系統(tǒng)也稱為“中層控制系統(tǒng)”,負責感知周圍的環(huán)境,并進行識別和分析;決策系統(tǒng)也稱為“上層控制系統(tǒng)”,負責路徑規(guī)劃和導航;執(zhí)行系統(tǒng)又稱為“底層控制系統(tǒng)”,負責汽車的加速、剎車和轉向。本文以“感知—決策—執(zhí)行”的順序呈現,是因為這樣更加符合人類的駕駛模式。如,先看看...
昨天華為暢享10 Plus正式發(fā)布,作為友商的小米自然要出來點評一番了。小米集團副總裁、紅米Redmi 品牌總經理盧偉冰這樣評價華為暢享10 Plus:“聽說有款新機發(fā)布,它支持1盧(10W)慢充,搭載上二代處于珠穆拉瑪峰底制程的處理器(低于驍龍665),采用全身塑料,最高售價賣2099!真是嚇人的營銷能力支撐了嚇人的價格!”盧偉冰雖然沒有點名華為暢享10 Plus...
2020年9月8日,概倫電子發(fā)布全新的企業(yè)標識,包含新的視覺形象及品牌理念,以此開啟概倫十周年慶的全新里程碑。概倫電子此次全新品牌理念“創(chuàng)新概念,精彩絕倫”旨在展示概倫的創(chuàng)新基因和理念,通過技術和產品贏得客戶的信賴。 成立于2010年的概倫電子,一直致力于提升先進半導體工藝下高端芯片設計工具的效能,為業(yè)界提供具有世界領先水平、自主創(chuàng)新的集...
2021年9月29日-30日,由深圳市工信局、深圳市福田區(qū)人民政府指導,中國高科技門戶OFweek維科網主辦、OFweek機器人網承辦的“OFweek 2021中國機器人系統(tǒng)集成商峰會”將在深圳會展中心舉辦。本屆OFweek機器人系統(tǒng)集成商峰會以“賦能新產業(yè),構建新生態(tài)”為主題,設有機器人系統(tǒng)集成商專場、機器人創(chuàng)新應用賦能行業(yè)轉型升級、3C行業(yè)制造專場三大板塊,內容涵...

史海拾趣

問答坊 | AI 解惑

華為技術2007年社會招聘

<p><strong><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋體; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">華為技術</span></strong><strong><span lang="EN ...…

查看全部問答∨

奧運臨近travel旅游域名火爆 代理商機無限

2008北京奧運會即將到來,全世界聚焦中國,國家大力實施奧運旅游戰(zhàn)略。07年,在全國旅游信息化工作會議上國家旅游局副局長杜江提出,“旅游資訊網建議使用全球旅游專用的.travel后綴域名。” Travel域名是專屬于旅游行業(yè)的新興全球頂級域名,與 ...…

查看全部問答∨

探頭使用中注意的一些問題 你注意了嗎?

我們很多測量的時候都使用無源探頭,而這個看似很簡單的部件常常被大家忽略,要很好地測量,探頭還是很有講究的。下面幾點是示波器使用中需要注意的問題: 首先是帶寬,這個通常會在探頭上寫明,多少MHz。如果探頭的帶寬不夠,示波器的帶寬再高也 ...…

查看全部問答∨

SIRIUS 無線模塊 @天狼星

Sirius  無線模塊: 性能介紹: #        Technical info        "Siriusisr35xx" 1        Chipset Solution        "Infineon E-GOLDvoice( ...…

查看全部問答∨

請問WinCE文件系統(tǒng)dirty bit的信息和資料

請問哪位知道關于WinCE文件系統(tǒng)dirty bit的信息和資料? 任何資料都可以. 謝謝!…

查看全部問答∨

WINCE怎么樣強制終止一個進程?

有些界面開了就關不掉了,wince里面有沒有像windows的熱啟動一樣的功能,可以直接把進程強制干掉?…

查看全部問答∨

為什么evc編譯出的程序能在開發(fā)板上運行,vs2005編譯出的卻不能?

同樣的hello wince程序,我的開發(fā)板是armv4i的,用evc選擇cpu為armv4i編譯出來能在開發(fā)板上運行,用vs2005選擇windows mobile 5.0 pocket pc sdk(armv4i)編譯出來卻無法運行?…

查看全部問答∨

wxf0204 進來

幫我找找工作呀…

查看全部問答∨

常見LED驅動電路的分析

本文是四個實際應用的LED驅動電路分析,描述了電路中每個元器件的作用和選擇…

查看全部問答∨

關于formality的幾個問題

用formality進行rtl和綜合后網表進行比對,發(fā)現兩個問題1.沒有匹配的點很多,reference多于implementation的2.verify的時候報了很多錯請問這是為什么啊 如何修改?ps:svf已經加了,另外設置忽略full case為false,不知道怎么辦,請高手指點…

查看全部問答∨
小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統(tǒng)推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 勃利县| 伊宁市| 泌阳县| 深圳市| 潍坊市| 柞水县| 天峨县| 隆尧县| 建阳市| 金乡县| 宝兴县| 且末县| 玉田县| 巴楚县| 昭苏县| 茶陵县| 远安县| 中牟县| 井冈山市| 宜昌市| 仙居县| 天台县| 青铜峡市| 博湖县| 青岛市| 尉犁县| 丹江口市| 横峰县| 象山县| 肃宁县| 永靖县| 三亚市| 临颍县| 法库县| 新和县| 山东省| 元阳县| 高密市| 瑞丽市| 遂川县| 西青区|