在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM8S_ 007_片內FLASH和EEPROM編程

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-03-20 10:00 ? 次閱讀

寫在前面 Ⅰ

我們都知道FLASH和EEPROM這兩種存儲器,但是大部分人了解的都是專門的FLASH和EEPROM芯片,如:W25Q16和ATAT24C08(外部)儲存芯片。

外部存儲芯片和本文說的內部FLASH和EEPROM最大的區別就是在于:內部FLASH和EEPROM是不需要SPI、I2C等進行操作,也就是說同等情況下,內部FLASH和EEPROM的讀寫要快一點。

STM8的FLASH除了儲存程序代碼之外,就是用于用戶編程(存儲數據),不像之前的51芯片不能利用內部儲存代碼的FLASH。

為方便大家閱讀,本文內容已經整理成PDF文件:

http://pan.baidu.com/s/1i5uWhJR

片內FLASH和EEPROM基礎知識 Ⅱ

STM8內部的FLASH程序存儲器和數據EEPROM由一組通用寄存器來控制。用戶可以使用這些寄存器來編程或擦除存儲器的內容、設置寫保護、或者配置特定的低功耗模式。用戶也可以對器件的選項字節(Option byte)進行編程。

1.關于存儲的名詞

塊(BLOCK):一個塊是指可由一個簡單編程操作編程或擦除的一組字節。塊級的操作非常快,是標準的編程和擦除操作。請參考表4來了解塊的大小。

頁(PAGE):一頁由一組塊組成。 STM8S 器件擁有啟動代碼,程序代碼和數據EEPROM,這些區域都由特定的結構所保護。通過對特定的選項字節進行操作,這些區域的大小能夠以頁為單位來進行調整。

2.主要特性

● STM8S分為兩個存儲器陣列:

─ 最多至 128K字節的FLASH程序存儲器,不同的器件容量有所不同。

─ 最多至 2K字節的數據EEPROM(包括option byte-選擇字節),不同的器件容量有所不同。

● 編程模式

─ 字節編程和自動快速字節編程(沒有擦除操作)

─ 字編程

─ 塊編程和快速塊編程(沒有擦除操作)

─ 在編程/擦除操作結束時和發生非法編程操作時產生中斷

● 讀同時寫(RWW)功能。該特性并不是所有STM8S器件都擁有。請參考具體的數據手冊了解更多細節。

● 在應用編程(IAP)和在線編程(ICP)能力。

● 保護特性

─ 存儲器讀保護(ROP)

─ 基于存儲器存取安全系統(MASS 密鑰)的程序存儲器寫保護

─ 基于存儲器存取安全系統(MASS 密鑰)的數據存儲器寫保護

─ 可編程的用戶啟動代碼區域(UBC)寫保護

● 在待機(Halt)模式和活躍待機(Active-halt)模式下,存儲器可配置為運行狀態和掉電狀態。

3.存儲器組織結構

STM8S的EEPROM以32位字長(每字4字節)為基礎組織起來。根據不同的器件,存儲器組織機構有所不同:

●小容量STM8S器件

─ 8K FLASH 程序存儲器,每頁 64 字節,共 128 頁

─ 640 字節數據 EEPROM,每頁 64 字節,共 10 頁。數據 EEPROM 包括一頁的選項字節(64字節)。

●中容量STM8S器件

─ 從 16K 到 32K FLASH 程序存儲器,每頁 512 字節,最多64頁

─ 1K 字節數據 EEPROM,每頁 512 字節,共 2 頁。數據 EEPROM 包括一頁的選項字節(512 字節)。

●大容量STM8S器件

─ 從 64K 到 128K FLASH 程序存儲器,每頁 512 字節,最多256頁

─ 從 1K 到 2K 字節數據 EEPROM,每頁 512 字節,共 4 頁。數據 EEPROM 包括一頁的選項字節(512 字節)。

4.存儲器編程

在嘗試執行任何編程操作之前,必須對主程序存儲器FLASH和DATA區域解鎖。

編程分類:字節編程、字編程、塊編程和選項字節編程。

字節編程

可以對主程序存儲器和DATA區域逐字節地編程。要對一個字節編程,應用程序可直接向目標地址寫入數據。

● 在主程序存儲器中

當字節編程操作執行時,應用程序停止運行。

● 在DATA區域中

─ 有 RWW 功能的器件:在 IAP 模式下,應用程序不停止運行,字節編程進行操作。

─ 無 RWW 功能的器件:當字節編程操作執行時,應用程序停止運行。

要擦除一個字節,向對應的字節簡單寫入’0x00即可。

應用程序可以通過讀FLASH_IAPSR寄存器來校驗編程或擦除操作是否已被正確執行:

● 在一次成功的編程操作后EOP位被置1。

● 當軟件試圖對一個被保護的頁進行寫操作時WP_PG_DIS位被置1。在這種情況下,寫操作不會被執行。

如果FLASH_CR1中的IE位已經被預先使能,則只要這些標志位(EOP/WP_PG_DIS)中有一個被置位就會產生一個中斷。

字編程

字寫入操作允許一次對整個4字節的字進行編程,從而將編程時間縮短。

主程序存儲器和DATA EEPROM都可以進行字操作。在一些STM8S器件中,也擁有當EEPROM在進行寫操作時同時具備RWW功能。

塊編程

塊編程比字節編程和字編程都要快。在塊編程操作中,整個塊的編程或擦除在一個編程周期就可以完成。

在主程序存儲器FLASH和DATA區域都可以執行塊操作。

● 在主程序存儲器中

用于塊編程的代碼必須全部在RAM中執行。

● 在DATA區域中

─ 有RWW功能的器件: DATA 塊操作可在主程序存儲器中執行,然而數據裝載階段必須在RAM中執行。

─ 無RWW功能的器件:用于塊編程的代碼必須全部在RAM中執行。

一共有三種可能的塊操作:

● 塊編程(也叫標準塊編程):整個塊在編程前被自動擦除。

● 快速塊編程:在編程前沒有預先的塊擦除操作。

● 塊擦除。

在塊編程時,中斷被硬件自動屏蔽。

標準塊編程

塊編程操作允許一次對整個塊進行編程,整個塊在編程前被自動擦除。

快速塊編程

快速塊編程允許不擦除存儲器內容就對塊進行編程,因此快速塊編程的編程速度是標準塊編程的兩倍。

警告: 在執行快速塊編程之前如果這個塊不是空的話,不能保證寫入的數據無誤。

選項字節(Option byte)編程

對選項字節編程和對DATA EEPROM區域編程非常相似。

應用程序可直接向目標地址進行寫操作。利用STM8的RWW功能,在對選項字節寫操作的同時程序不必停下來。

軟件工程源代碼 Ⅲ

1、關于工程

本文提供的工程代碼是基于前面軟件工程“STM8S-A04_UART基本收發數據”增加FLASH修改而來。初學的朋友可以參看我前面對應的基礎文章,那些文章講的比較詳細。

工程源代碼主要實現功能:寫入FLASH或EEPROM并讀取寫入的數據,通過UART打印來觀察讀取的數據是否和寫入的一直。

提供兩個工程:STM8S-A07_內部FLASH編程和STM8S-A07_內部EEPROM編程

這兩個工程需要注意讀寫操作的地址不同,見下圖:

本文重點的函數接口:

FLASH_WriteNByte:FLASH寫N字節

FLASH_ReadNByte: FLASH讀N字節

EEPROM_WriteNByte:EEPROM寫N字節

EEPROM_ReadNByte:EEPROM讀N字節

2.代碼分析說明

A.FLASH_WriteNByte:FLASH寫N字節

void FLASH_WriteNByte(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t nByte)

{

FLASH_Unlock(FLASH_MEMTYPE_PROG);

while(FLASH_GetFlagStatus(FLASH_FLAG_PUL) == RESET);

while(nByte--)

{

FLASH_ProgramByte(WriteAddr, *pBuffer);

WriteAddr++;

pBuffer++;

FLASH_WaitForLastOperation(FLASH_MEMTYPE_PROG);

}

FLASH_Lock(FLASH_MEMTYPE_PROG);

}

這里需要注意:1.寫之前解鎖,寫完需要上鎖;2.我們提供的代碼是字節操作,因此,每次操作需要“等待上次寫操作完成”。

B.FLASH_ReadNByte:FLASH讀N字節

void FLASH_ReadNByte(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t nByte)

{

while(nByte--)

{

*pBuffer = FLASH_ReadByte(ReadAddr);

ReadAddr++;

pBuffer++;

}

}

讀操作一般都很簡單,不管是讀FLASH還是EEPROM,基本上操作都類似。為什么我們買的U盤讀取速度遠大于寫的速度,原因就在這里。

C.EEPROM_WriteNByte:EEPROM寫N字節

void EEPROM_WriteNByte(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t nByte)

{

FLASH_Unlock(FLASH_MEMTYPE_DATA);

while(FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET);

while(nByte--)

{

FLASH_ProgramByte(WriteAddr, *pBuffer);

WriteAddr++;

pBuffer++;

FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);

}

FLASH_Lock(FLASH_MEMTYPE_DATA);

}

和FLASH的寫對比,可以看得出來,他們之間的差別在于參數:FLASH_MEMTYPE_DATA.

D.EEPROM_ReadNByte:EEPROM讀N字節

void EEPROM_ReadNByte(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t nByte)

{

while(nByte--)

{

*pBuffer = FLASH_ReadByte(ReadAddr);

ReadAddr++;

pBuffer++;

}

}

E.main函數讀寫驗證

FLASH_WriteNByte(WriteBuf, FLASH_ADDR, BUF_SIZE);

TIMDelay_Nms(500);

FLASH_ReadNByte(ReadBuf, FLASH_ADDR, BUF_SIZE);

UART1_SendNByte(ReadBuf, BUF_SIZE);

通過UART打印“讀BUF”的數據,可以看得出來,我們從FLASH中寫入的數據是否正確。

兩個工程代碼實現功能都一樣,注意地址。

打印數據如下:

00 00 00 00 00 00 00 00 00 00(打印未讀寫操作之前的“讀BUF”數據)

41 31 42 32 43 33 44 34 45 35(十六進制顯示)

A1B2C3D4E5(字符形式顯示)

下載 Ⅳ

STM8S資料:

http://pan.baidu.com/s/1o7Tb9Yq

軟件源代碼工程(STM8S-A07_內部xxx編程):

http://pan.baidu.com/s/1c2EcRo0

提示:如果網盤鏈接失效,可以微信公眾號“底部菜單”查看更新鏈接。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FlaSh
    +關注

    關注

    10

    文章

    1656

    瀏覽量

    150549
  • EEPROM
    +關注

    關注

    9

    文章

    1061

    瀏覽量

    82949
  • STM8S
    +關注

    關注

    16

    文章

    149

    瀏覽量

    31883
收藏 人收藏

    評論

    相關推薦

    AN-1383: ADP1046A EEPROM編程

    電子發燒友網站提供《AN-1383: ADP1046A EEPROM編程.pdf》資料免費下載
    發表于 01-12 11:19 ?0次下載
    AN-1383: ADP1046A <b class='flag-5'>EEPROM</b><b class='flag-5'>編程</b>

    EEPROM編程常見錯誤及解決方案

    EEPROM(電可擦可編程只讀存儲器)在編程過程中可能會遇到多種錯誤。以下是一些常見的EEPROM編程錯誤及其解決方案: 常見錯誤 數據寫入
    的頭像 發表于 12-16 17:08 ?3325次閱讀

    ESP32S3的EEPROM是由FLASH虛擬的,直接在arduinoIDE中擦寫EEPROM時是否在底層自動進行了磨損平衡?

    ESP32S3的EEPROM是由FLASH虛擬的,請問直接在arduinoIDE中擦寫EEPROM時是否在底層自動進行了磨損平衡? 在用ESP32
    發表于 06-07 06:27

    EEPROMFlash存儲器的區別

    編程只讀存儲器)和Flash存儲器是兩種常見的非易失性存儲器,它們具有各自的特點和應用場景。本文將深入分析和比較EEPROMFlash存儲器的原理、結構、性能以及應用,以期為讀者提
    的頭像 發表于 05-23 16:35 ?8100次閱讀

    AN89056 PSoC4100S+256K上的FLASH測試失敗的原因?

    我修改了 AN89056 示例代碼中的 AN89056_FLASH,并嘗試在 PSoC4100S+256K (CY8C4148AZQ-S455) 上運行。 但我收到了如下錯誤信息: 測試計數器
    發表于 05-21 08:16

    STM8S003F3P6操作EEPROM會影響FLASH嗎?

    各位前輩好,想請教一下,STM8S003F3P6操作EEPROM會影響FLASH嗎(具體的讀寫程序已經寫完,只是擔心會影響FLASH,因為FLASH
    發表于 05-21 06:36

    STM8S007老是參數檢查錯誤進入assert_failed()的原因?

    請哪位大俠解答一下,在使用STM8S007和STM8S105K4的時候,經過跟蹤發現,調用一些固件庫函數時老是會出現參數檢查錯誤而進入到assert_failed()函數,關鍵是參數都是庫中預定義的
    發表于 05-17 06:18

    求助,關于STM8SEEPROM壽命問題求解

    大家好:最近在用STM8S做開發,STM8S寫一個字節到EEPROM中不需要擦除整個扇區,它自動擦除本字節然后寫入,這非常方便。如果對某一個地址的一個字節EEPROM不停的寫入,到達壽
    發表于 05-15 07:18

    STM8s 003 EEPROM斷電后不保存,eeprom數據被清零的原因?

    STM8s003EEPROM 斷電后不保存怎么回事,eeprom數據被清零 void EEPROM(void) { p = (unsigned char *)0x4000; //指針p指向芯片
    發表于 05-13 06:01

    STM8S103k3的EEPROM一用塊編程,程序就死在塊編程的函數上面,怎么解決?

    我最近在用STM8S103k3做東西,用到了里面的EEPROM。我想字節編程,字編程,我都用著好好的,但是最近我需要用到塊編程。發現一用塊
    發表于 05-11 07:27

    STM8S005怎么寫FLASH

    請教大伙們STM8S005怎么寫FLASH,下面這個程序之前在103可以實現的,但換了005后就一直復位了? FLASH_DeInit(); FLASH
    發表于 05-10 06:46

    STM8S903K3定義@eeprom不能編譯通過的原因?

    STM8S903K3定義了@eeprom unsigned char memorySecurity[] = { 0b00000111, 0xff, 0xff, 0xff }; 然后編譯通不過
    發表于 05-07 06:30

    求助,關于STM8EEPROM問題求解

    小白問題,看了一些資料,關于STM8S003或者005的EEPROM的操作必須要用FLASH_ProgramBlock和FLASH_EraseBlock,就是必須在RAM中執行,但是如
    發表于 05-06 08:32

    STM8L052寫EEPROM偶爾會死機的原因?怎么解決?

    用STM8L052做個項目,這幾天發現寫EEPROM偶爾會死機,產品頻繁測試的時候,按鍵按下后會寫一次EEPROM,按鍵一直按測試,發現不定時會出現一次死機,找不到什么問題,大家幫忙看看。 寫
    發表于 04-30 07:49

    8KB Flash ROM的AD型MCU—AiP8F1208介紹

    AiP8F1208 是一款 AD 型 8051 內核 MCU,內置 8KB Flash ROM、256B SRAM、256B Data EEPROM,內部集成 T0/1、PWM、12b
    發表于 04-26 16:34 ?683次閱讀
    <b class='flag-5'>8</b>KB <b class='flag-5'>Flash</b> ROM的AD型MCU—AiP<b class='flag-5'>8</b>F1208介紹
    主站蜘蛛池模板: 人人艹人人艹 | 久久婷婷综合中文字幕 | 色五婷婷| 偷偷鲁影院手机在线观看 | 国产一级aaa全黄毛片 | 6一10周岁毛片免费 717影院理论午夜伦不卡久久 | 在线种子搜索 | 男人的午夜天堂 | 色橹橹 | 日本一卡二卡3卡四卡网站精品 | 黄色www网站 | 精品在线视频一区 | 播放毛片 | 色cccwww在线播放 | 国模啪啪一区二区三区 | 亚洲天堂网站在线 | 色综合天天综久久久噜噜噜久久〔 | 精品国产免费观看一区高清 | 简单视频在线播放jdav | 色狠狠成人综合网 | 中文字幕第一区 | 中日韩欧美在线观看 | 福利体验区 | 年轻护士女三级 | 在线观看国产日本 | 国产精品国产三级国产普通话对白 | 俺也操| 免费边摸边吃奶边叫床视频gif | 天堂资源中文官网 | 天天干天天干天天插 | 中文字幕在线乱码免费毛片 | 在线成人免费观看国产精品 | 亚洲欧美色一区二区三区 | 很很鲁在线视频播放影院 | 在线视频一区二区三区四区 | 久久国产成人精品国产成人亚洲 | 久久天天躁夜夜躁狠狠躁2015 | 国产精品久久久久久久久免费观看 | 久久婷婷午色综合夜啪 | 免费看欧美一级特黄a大片 免费看欧美一级特黄a大片一 | 美女黄页免费 |