国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    1748

    瀏覽量

    155531
  • EEPROM
    +關注

    關注

    9

    文章

    1137

    瀏覽量

    86039
  • STM8S
    +關注

    關注

    16

    文章

    149

    瀏覽量

    32667
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    中微愛芯超值型觸摸8位微控制器AiP8S3408介紹

    AiP8S3408是一款觸摸型8051內核MCU,內置8KB Flash、256B IRAM、256B XRAM、256B EEPROM,內部集成Timer0/1/5、WDT、UART
    的頭像 發表于 03-05 09:30 ?400次閱讀
    中微愛芯超值型觸摸<b class='flag-5'>8</b>位微控制器AiP<b class='flag-5'>8S</b>3408介紹

    CW32F030FLASH閃存存儲器物理區域的劃分

    FLASH 閃存由兩部分物理區域組成:主 FLASH 存儲器和啟動程序存儲器。 1、主 FLASH 存儲器,共 64KB,地址空間為 0x0000 0000 - 0x0000
    發表于 12-23 08:28

    汽車級PSoC? 4:PSoC? 4100S 家族上可編程系統深度解析

    汽車級PSoC? 4:PSoC? 4100S 家族上可編程系統深度解析 在汽車電子應用日益豐富的今天,對可編程嵌入式系統控制器的需求也越來越高。PSoC? 4100
    的頭像 發表于 12-21 16:30 ?580次閱讀

    蘇泊爾DCL6907(即CHK-S007)單芯片電磁爐原理圖資料

    蘇泊爾DCL6907(即CHK-S007)單芯片電磁爐原理圖
    發表于 12-19 15:59 ?14次下載

    請問CW32L010F8P6的flash是否可以當eeprom來用?

    CW32L010F8P6的flash是否可以當eeprom來用?
    發表于 11-26 07:26

    把CW32L010用FLASH模擬EEPROM

    CW32L010橫空出世,定時器和ADC變化很大,FLASH基本和以前型號一樣,但有一點改動,BUSY位從CR1寄存器改到ISR寄存器了。 把F003的程序改改就能用,太棒了,拿走不謝。 只有一個
    發表于 11-24 07:40

    OTP與Flash語音芯片全對比:WTN6xxx-8S與WT588F02B-8S選型指南

    的一部分。廣州唯創電子作為國內知名的語音IC廠家,推出的OTP語音芯片WTN6xxx-8SFlash語音芯片WT588F02B-8S備受市場關注。這兩款芯片在存儲方式
    的頭像 發表于 09-29 09:13 ?802次閱讀
    OTP與<b class='flag-5'>Flash</b>語音芯片全對比:WTN6xxx-<b class='flag-5'>8S</b>與WT588F02B-<b class='flag-5'>8S</b>選型指南

    ?LMK61E2 超低抖動可編程振蕩器技術文檔總結

    通過EEPROM自啟動的功能,該EEPROM在工廠編程為產生156.25MHz LVPECL輸出。器件寄存器和
    的頭像 發表于 09-14 09:24 ?1352次閱讀
    ?LMK61E2 超低抖動可<b class='flag-5'>編程</b>振蕩器技術文檔總結

    ?LMK61E0M可編程振蕩器技術文檔總結

    LMK61E0 系列超低抖動 PLLatinum^TM的^可編程振蕩器使用帶有集成VCO的小數N頻率合成器來生成常用的參考時鐘。該LMK61E0M支持3.3V LVCMOS輸出。該器件具有從
    的頭像 發表于 09-13 09:46 ?1286次閱讀
    ?LMK61E0M可<b class='flag-5'>編程</b>振蕩器技術文檔總結

    FLASH模擬EEPROM入門指南

    以下是一份基于多款芯片實踐總結出的 FLASH模擬EEPROM入門指南,涵蓋核心概念、關鍵步驟及實用技巧: 一、基本概念與原理 背景動機 需求驅動:許多MCU(如AT32)未集成原生EEPROM
    發表于 08-14 06:13

    FLASH燒寫/編程白皮書

    白皮書:如何燒寫Flash——不同場景不同需求下的選擇認識Flash?NAND vs. NOR如何燒寫/編程不同方案比較
    發表于 07-28 16:05 ?0次下載

    FLASH模擬EEPROM

    FLASH 模擬EEPROM 功能。 1 FLASHEEPROM 簡介 FLASH
    發表于 07-16 15:13

    STVD使用STM8S005K6T6C內部data eeprom進行數據寫入操作問題求解

    1.STVD使用STM8S005K6T6C內部data eeprom進行數據寫入操作,使用st-link V2(B2013 21)進行仿真調試,發現寄存器FLASH_CR2寫入1是值仍為0x00
    發表于 06-23 06:29

    如何通過SFL為設備添加Flash編程支持

    SEGGER Flash Loader(SFL)是J-Link設備支持套件(DSK)的一部分,通過SFL,用戶可以為自己的新設備添加Flash編程支持。
    的頭像 發表于 05-19 16:35 ?1490次閱讀
    如何通過SFL為設備添加<b class='flag-5'>Flash</b><b class='flag-5'>編程</b>支持

    MCUFlash

    ? ? MCUFlash是微控制器內部集成的非易失性存儲器,主要用于存儲程序代碼、常量數據及系統配置信息。其核心特性與功能如下: 一、定義與類型? Flash采用浮柵晶體管技術
    的頭像 發表于 05-06 14:26 ?1273次閱讀