色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

STM32學習筆記:讀寫內部Flash

GReq_mcu168 ? 來源:玩轉單片機 ? 2019-11-26 14:32 ? 次閱讀

一、介紹

首先我們需要了解一個內存映射:

stm32的flash地址起始于0x0800 0000,結束地址是0x0800 0000加上芯片實際的flash大小,不同的芯片flash大小不同。

RAM起始地址是0x2000 0000,結束地址是0x2000 0000加上芯片的RAM大小。不同的芯片RAM也不同。

Flash中的內容一般用來存儲代碼和一些定義為const的數據,斷電不丟失,
RAM可以理解為內存,用來存儲代碼運行時的數據,變量等等。掉電數據丟失。

STM32將外設等都映射為地址的形式,對地址的操作就是對外設的操作。
stm32的外設地址從0x4000 0000開始,可以看到在庫文件中,是通過基于0x4000 0000地址的偏移量來操作寄存器以及外設的。

一般情況下,程序文件是從 0x0800 0000 地址寫入,這個是STM32開始執行的地方,0x0800 0004是STM32的中斷向量表的起始地址。
在使用keil進行編寫程序時,其編程地址的設置一般是這樣的:

程序的寫入地址從0x08000000(數好零的個數)開始的,其大小為0x80000也就是512K的空間,換句話說就是告訴編譯器flash的空間是從0x08000000-0x08080000,RAM的地址從0x20000000開始,大小為0x10000也就是64K的RAM。這與STM32的內存地址映射關系是對應的。

M3復位后,從0x08000004取出復位中斷的地址,并且跳轉到復位中斷程序,中斷執行完之后會跳到我們的main函數,main函數里邊一般是一個死循環,進去后就不會再退出,當有中斷發生的時候,M3將PC指針強制跳轉回中斷向量表,然后根據中斷源進入對應的中斷函數,執行完中斷函數之后,再次返回main函數中。大致的流程就是這樣。

1.1、內部Flash的構成:

STM32F429 的內部 FLASH 包含主存儲器、系統存儲器、 OTP 區域以及選項字節區域,它們的地址分布及大小如下:

STM32F103的中容量內部 FLASH 包含主存儲器、系統存儲器、 OTP 區域以及選項字節區域,它們的地址分布及大小如下:

注意STM32F105VC的是有64K或128頁x2K=256k字節的內置閃存存儲器,用于存放程序和數據。

主存儲器:一般我們說 STM32 內部 FLASH 的時候,都是指這個主存儲器區域它是存儲用戶應用程序的空間,芯片型號說明中的 1M FLASH、 2M FLASH 都是指這個區域的大小。與其它 FLASH 一樣,在寫入數據前,要先按扇區擦除,

系統存儲區:系統存儲區是用戶不能訪問的區域,它在芯片出廠時已經固化了啟動代碼,它負責實現串口、 USB 以及 CAN 等 ISP 燒錄功能。

OTP 區域:OTP(One Time Program),指的是只能寫入一次的存儲區域,容量為 512 字節,寫入后數據就無法再更改, OTP 常用于存儲應用程序的加密密鑰。

選項字節:選項字節用于配置 FLASH 的讀寫保護、電源管理中的 BOR 級別、軟件/硬件看門狗等功能,這部分共 32 字節。可以通過修改 FLASH 的選項控制寄存器修改。

1.2、對內部Flash的寫入過程:

1. 解鎖 (固定的KEY值)
(1) 往 Flash 密鑰寄存器 FLASH_KEYR 中寫入 KEY1 = 0x45670123
(2) 再往 Flash 密鑰寄存器 FLASH_KEYR 中寫入 KEY2 = 0xCDEF89AB
2. 數據操作位數
最大操作位數會影響擦除和寫入的速度,其中 64 位寬度的操作除了配置寄存器位外,還需要在 Vpp 引腳外加一個 8-9V 的電壓源,且其供電間不得超過一小時,否則 FLASH可能損壞,所以 64 位寬度的操作一般是在量產時對 FLASH 寫入應用程序時才使用,大部分應用場合都是用 32 位的寬度。
3. 擦除扇區
在寫入新的數據前,需要先擦除存儲區域, STM32 提供了扇區擦除指令和整個FLASH 擦除(批量擦除)的指令,批量擦除指令僅針對主存儲區。
扇區擦除的過程如下:
(1) 檢查 FLASH_SR 寄存器中的“忙碌寄存器位 BSY”,以確認當前未執行任何
Flash 操作;
(2) 在 FLASH_CR 寄存器中,將“激活扇區擦除寄存器位 SER ”置 1,并設置“扇
區編號寄存器位 SNB”,選擇要擦除的扇區;
(3) 將 FLASH_CR 寄存器中的“開始擦除寄存器位 STRT ”置 1,開始擦除;
(4) 等待 BSY 位被清零時,表示擦除完成。
4. 寫入數據
擦除完畢后即可寫入數據,寫入數據的過程并不是僅僅使用指針向地址賦值,賦值前還還需要配置一系列的寄存器,步驟如下:
(1) 檢查 FLASH_SR 中的 BSY 位,以確認當前未執行任何其它的內部 Flash 操作;
(2) 將 FLASH_CR 寄存器中的 “激活編程寄存器位 PG” 置 1;
(3) 針對所需存儲器地址(主存儲器塊或 OTP 區域內)執行數據寫入操作;
(4) 等待 BSY 位被清零時,表示寫入完成。

1.3、查看工程內存的分布:

由于內部 FLASH 本身存儲有程序數據,若不是有意刪除某段程序代碼,一般不應修改程序空間的內容,所以在使用內部 FLASH 存儲其它數據前需要了解哪一些空間已經寫入了程序代碼,存儲了程序代碼的扇區都不應作任何修改。通過查詢應用程序編譯時產生的“ *.map”后綴文件,
打開 map 文件后,查看文件最后部分的區域,可以看到一段以“ Memory Map of the
image”開頭的記錄(若找不到可用查找功能定位),

【注】ROM加載空間

這一段是某工程的 ROM 存儲器分布映像,在 STM32 芯片中, ROM 區域的內容就是 指存儲到內部 FLASH 的代碼。
在上面 map 文件的描述中,我們了解到加載及執行空間的基地址(Base)都是0x08000000,它正好是 STM32 內部 FLASH 的首地址,即 STM32 的程序存儲空間就直接是執行空間;它們的大小(Size)分別為 0x00000b50 及 0x00000b3c,執行空間的 ROM 比較小的原因就是因為部分 RW-data 類型的變量被拷貝到 RAM 空間了;它們的最大空間(Max)均為 0x00100000,即 1M 字節,它指的是內部 FLASH 的最大空間。

計算程序占用的空間時,需要使用加載區域的大小進行計算,本例子中應用程序使用
的內部 FLASH 是從 0x08000000 至(0x08000000+0x00000b50)地址的空間區域。
所以從扇區 1(地址 0x08004000)后的存儲空間都可以作其它用途,使用這些存儲空間時不會篡改應用程序空間的數據。
具體可參考原子的例程:實驗四十一:FLASH 模擬 EEPROM 實驗

文章引用地址:https://blog.csdn.net/qq_33559992/article/details/77676716

感謝原文作者

二、代碼拆分介紹(以STM32F105系列為例,如上圖表5所示)

2.1 讀/寫入數據流程

寫數據流程

2.1.1、Flash 解鎖,直接調用#include "stm32f10x_flash.h"中的void FLASH_Unlock(void)函數,這個函數是官方提供的

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

    關注

    31

    文章

    5357

    瀏覽量

    120621
  • FlaSh
    +關注

    關注

    10

    文章

    1638

    瀏覽量

    148178
  • STM32
    +關注

    關注

    2270

    文章

    10906

    瀏覽量

    356530

原文標題:STM32學習筆記:讀寫內部Flash(附代碼)

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    STM32CUBEMX(10)--Flash讀寫

    概述 本例程主要講解如何對芯片自帶Flash進行讀寫,用芯片內部Flash可以對一些需要斷電保存的數據進行保存,無需加外部得存儲芯片,本例程采用的是
    發表于 09-10 15:36

    【GD32F470紫藤派開發板使用手冊】第十一講 SPI-SPI NOR FLASH讀寫實驗

    通過本實驗主要學習以下內容: ?SPI簡介 ?GD32F470 SPI簡介 ?SPI NOR FLASH——GD25Q32ESIGR簡介 ?使用GD32F470 SPI接口實現對GD25Q32ESIGR的讀寫操作
    的頭像 發表于 05-17 09:57 ?1854次閱讀
    【GD32F470紫藤派開發板使用手冊】第十一講 SPI-SPI NOR <b class='flag-5'>FLASH</b><b class='flag-5'>讀寫</b>實驗

    芯海應用筆記:通用 MCU Flash 讀寫保護和 SWD 復用指導手冊.

    本應用筆記旨在幫助用戶了解芯??萍纪ㄓ?MCU Flash 讀寫保護的相關注意事項,同時針對 SWD引腳鎖復用提供解決方案。本文檔所涉及到的解決方案可適用于芯海通用 MCU 產品的常見相關需求。*附件:應用
    發表于 05-16 11:44

    STM8L的EERPOM是使用內部FLASH嗎?用那個庫文件能操作讀寫

    STM8L的EERPOM 是使用內部FLASH嗎?用那個庫文件能操作讀寫?
    發表于 05-15 07:12

    stm32f0讀寫內部flash和刷新液晶屏時,禁止所有中斷,__disable_irq();不起作用,還會進入中斷響應函數為什么?

    讀寫內部flash和刷新液晶屏時,禁止所有中斷,__disable_irq();不起作用,還會進入中斷響應函數
    發表于 05-09 06:41

    如何使用SPI的DMA模式讀寫FLASH

    出來。 因為我下一步想做一個監測系統,想提高flash讀寫效率,使用DMA模式 MCU一直在監測,不斷往數組中寫入數據,一旦滿了,數據通過DMA模式往FLASH傳,MCU繼續監測。讀也一樣。 1、為了試驗,我
    發表于 04-16 07:59

    STM32訪問FPGA內部SRAM部分區域為什么只能讀不能寫?

    通過SPI總線訪問Flash; FPGA已經被配置OK; 因為新增加了功能,需要通過STM32讀寫FPGA內部SRAM的特定區域。測試時卻發現只有地址0x60000004、0x6000
    發表于 04-16 06:39

    STM32H745ZGTx雙核芯片使用內部FLASH,掛載FATFS為什么打不開文件?

    STM32H745ZGTx雙核芯片使用內部FLASH,掛載FATFS為何打不開文件?
    發表于 04-07 07:11

    STM32上下電內部flash被改寫的原因?

    基于STM32F405系列一個64pin MCU,在使用過程中,整機掉電更換另一個部件,再上電后發現這個產品不工作了。發回廠家發現STM32內部flash數據被改寫了,前幾行被改成了0
    發表于 03-25 08:24

    STM32H750 QSPI flash重映射模式下有方法能實現讀寫操作嗎?

    STM32H750 QSPI flash重映射模式下有方法能實現讀寫操作嗎
    發表于 03-25 08:06

    求助,關于SPI讀寫Flash的理解

    利用SPI讀寫Flash指令的過程中,當主機發送指令后,為什么還需要再發送“任意的數據”,才能夠獲取指令解釋后的返回值。 當讀取Flash的JEDEC_ID指令時,按FLASH的ID指
    發表于 03-20 06:06

    STM32G474RCT6超出FLASH之外的地址,依然可以正常讀寫,這正常嗎?

    有大佬碰到過超出FLASH之外的內存,也可以正常讀寫的情況嗎?我用的芯片是STM32G474RCT6,FLASH為 256kB的,但是我對 Page64頁、Page65頁或者后面幾頁
    發表于 03-15 08:17

    STM32 FLASH模擬EEPROM,燒寫程序時設置為讀保護Level-2級別,還能正常讀寫這個模擬的EEPROM嗎?

    STM32系列內部FLASH模擬EEPROM,燒寫程序時設置為讀保護Level-2級別,還能正常讀寫這個模擬的EEPROM嗎?
    發表于 03-13 07:34

    allegro學習筆記

    電子發燒友網站提供《allegro學習筆記.zip》資料免費下載
    發表于 02-29 09:14 ?1次下載

    stm32 flash寫數據怎么存儲的

    stm32 flash寫數據怎么存儲的? STM32是一款廣泛應用于嵌入式系統開發的微控制器,它的Flash存儲器是其中一個重要的組成部分。在本文中,我將詳細介紹
    的頭像 發表于 01-31 15:46 ?2447次閱讀
    主站蜘蛛池模板: 久久99国产综合精品AV蜜桃| 国产精品-区区久久久狼| 如懿传免费观看在线全集| 久久综合色一综合色88中文| 黄色软件视频app| 国产亚洲日韩欧美视频| 国产精品99久久久久久AV蜜臀| 第一次处破女高清电影| 被老总按在办公桌吸奶头| xx69美国| 超碰视频在线观看| 成人欧美一区二区三区白人 | 国产亚洲精品久久久久| 国产精品人成视频免费999| 国产AV亚洲精品久久久久软件| 成人网站国产在线视频内射视频| 产传媒61国产免费| 大学生高潮无套内谢视频| 出租屋交换人妻 全文| 成人在线观看国产| 国产成年网站v片在线观看| 国产第一页在线视频| 国产久久re6免费热在线| 国产一区免费在线观看| 茎身铃口调教| 久欠热视频精品首页| 欧美片第1页 综合| 色噜噜狠狠色综合欧洲| 校园女教师之禁区| 亚洲精品国产自在在线观看| 野花日本免费完整版高清版动漫| 印度性hd18| 99久久综合国产精品免费| 成年人视频在线观看免费| 国产二区自拍| 精选国产AV精选一区二区三区 | 亚洲AV久久无码精品国产网站 | 久久AV喷吹AV高潮欧美| 麻豆天美国产一区在线播放| 女性酥酥影院| 丝瓜视频樱桃视频在线观看免费 |