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

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

3天內不再提示

GD32的FLASH讀、擦除、寫操作

撞上電子 ? 2024-02-19 12:46 ? 次閱讀

一,GD32的flash特征

1、在flash的前256K字節空間內,CPU執行指令零等待;在此范圍外,CPU讀取指令存在較長延時;

2、對于flash大于512KB(不包括等于512KB)的GD32F10x_CL和GD32F10x_XD,使用了兩片閃存;前512KB容量在第一片閃存(bank0)中,后續的容量在第二片閃存(bank1)中;

3、對于flash容量小于等于512KB的GD32F10x_CL和GD32F10x_HD,只使用了bank0;

4、對 于 GD32F10x_MD , 閃 存 頁 大 小 為 1KB 。GD32F10x_CL 和 GD32F10x_HD ,GD32F10x_XD,bank0的閃存頁大小為2KB,bank1的閃存頁大小為4KB;

5、支持32位整字或16位半字編程,頁擦除和整片擦除操作;

二,GD32的flash結構

1、GD32F10x_MD

d596480a-cee1-11ee-9118-92fbcf53809c.png

GD32F10x_CL,GD32F10x_HD 和 GD32F10x_XD

d5d1b67e-cee1-11ee-9118-92fbcf53809c.png

三,GD32的flash讀操作

flash可以像普通存儲空間一樣直接尋址訪問。

value=*(uint32_t*)FlashAddr;

uint16_t IAP_ReadFlag(void){ return *(volatile uint16_t*)(FLASH_ADDR); }

四,GD32的flash擦除操作

每一頁可以被獨立擦除,步驟如下:

1,確保FMC_CTLx寄存器不處于鎖定狀態;

2,檢查FMC_STATx寄存器的BUSY位來判定閃存是否正處于擦寫訪問狀態,若BUSY位為1,則需等待該操作結束,BUSY位變為0;

3,置位FMC_CTLx寄存器的PER位;

4,將待擦除頁的絕對地址(0x08XX XXXX)寫到FMC_ADDRx寄存器;

5,通過將FMC_CTLx寄存器的START位置1來發送頁擦除命令到FMC;

6,等待擦除指令執行完畢,FMC_STATx寄存器的BUSY位清0;

7,如果需要,使用DBUS讀并驗證該頁是否擦除成功。

void fmc_erase_page(uint32_t Page_Address){ fmc_unlock(); //fmc解鎖 /* clear all pending flags */ fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
/* erase the flash pages */ fmc_page_erase(Page_Address);
/* clear all pending flags */ fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
fmc_lock(); //fmc上鎖}

要擦除連續的幾頁:

void fmc_erase_pages(void){uint32_terase_counter;
/* unlock the flash program/erase controller */ fmc_unlock(); /* clear all pending flags */ fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
/* erase the flash pages */ for(erase_counter = 0; erase_counter < page_num; erase_counter++){ fmc_page_erase(FMC_WRITE_START_ADDR + (FMC_PAGE_SIZE * erase_counter)); fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR); }

/* lock the main FMC after the erase operation */ fmc_lock();}

全部擦除:

void fmc_erase_page(uint32_t Page_Address){ fmc_unlock(); //fmc解鎖 /* clear all pending flags */ fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
/* erase whole chip */ fmc_mass_erase();
/* clear all pending flags */ fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
fmc_lock(); //fmc上鎖}

五,flash寫

往flash的某個地址寫入數據前,一般要先擦除該地址。

16位半字編程:

void IAP_WriteFlag(uint16_t flag){ fmc_unlock(); fmc_page_erase(IAP_FLAG_ADDR); fmc_halfword_program(IAP_FLAG_ADDR,flag); fmc_lock();}

32位整字編程:

void fmc_program(void){ /* unlock the flash program/erase controller */ fmc_unlock();
address = FMC_WRITE_START_ADDR; /* program flash */ while(address < FMC_WRITE_END_ADDR){ fmc_word_program(address, data0); address += 4; fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR); } /* lock the main FMC after the program operation */ fmc_lock();}

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

    關注

    10

    文章

    1567

    瀏覽量

    146904
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10522

    瀏覽量

    207443
  • GD32
    +關注

    關注

    7

    文章

    361

    瀏覽量

    23811
收藏 人收藏

    評論

    相關推薦

    什么是GD32

    一、前言什么GD32?GD32是國內開發的一款單片機,據說開發的人員是來自ST公司的,GD32也是以STM32作為模板做出來的。所以GD32和STM32有很多地方都是一樣的,不過
    發表于 08-12 07:46

    如何將STM32移植到GD32芯片上

    GD32芯片內部flash同STM32有哪些區別?如何將STM32移植到GD32芯片上?
    發表于 09-23 09:31

    「必看干貨」淺談GD32與STM32之間的區別

    延長上電時間 ,配置(2ms) 。4.GD32提高了相同工作頻率下的代碼執行速度,所以GD32的_NOP()時間比STM32更加短,所以不使用定時器做延時時要注意修改。5.GD32的flash
    發表于 09-26 14:28

    GD32可以替換STM32嗎

    什么是GD32?GD32與STM32的區別在哪?GD32可以替換STM32嗎?
    發表于 10-20 07:03

    JFlash解除GD32保護的方法

    JFlash解除GD32保護如果用戶添加了保護或者誤操作等導致的下載不了,可以先進行解鎖嘗試,步驟如下:1、打開J-Flash V6.4
    發表于 11-04 09:10

    GD32操作FLASH時有哪些注意事項呢

    GD32操作FLASH時注意事項GD32操作其內部FLASH時,發現連續存儲兩個數據,并且連續
    發表于 01-26 07:38

    GD32替換STM32?這些坑你別踩...

    味著單片機代碼運行的速度會更快,項目中如果需要進行刷屏,開方運算,電機控制等操作,GD是一個不錯的選擇。3、供電外部供電:GD32外部供電范圍是2.6~3.6V,STM32外部供電范圍是2~3.6V。
    發表于 03-31 10:51

    分享在IAR環境下GD32flash下載算法的一些理解

    各個字段的地址分配,如.data, .bss段等,此處內容比較簡單,大家開發時也都會涉及到,當有新增SDRAM,和外部flash時,可以修改此文件,以及定義字段等操作??偨Y此次就簡單描述下GD32
    發表于 09-30 11:05

    GD32 MCU原理及固件庫開發指南》 + 初感悟

    庫開發能夠避免每次操作寄存器時去查芯片的應用手冊,這樣能很好地提高開發效率。GD32 MCU原理固件庫開發指南這本書它詳細描述了基本所有外設的底層驅動程序和API接口,可以讓我快速地明白各個API函數
    發表于 03-31 22:11

    GD32和STM32的區別

    一、前言GD32是國內開發的一款單片機,據說開發的人員是來自ST公司的,GD32也是以STM32作為模板做出來的。所以GD32和STM32有很多地方都是一樣的,不過GD32畢竟是不同的
    發表于 11-18 20:51 ?47次下載
    <b class='flag-5'>GD32</b>和STM32的區別

    GD32操作FLASH時注意事項

    GD32操作FLASH時注意事項GD32操作其內部FLASH時,發現連續存儲兩個數據,并且連續
    發表于 12-02 10:36 ?14次下載
    <b class='flag-5'>GD32</b><b class='flag-5'>操作</b><b class='flag-5'>FLASH</b>時注意事項

    ch32和gd32的區別

    Gd32的性能也較大不同,下面是它們的性能對比: Ch32: ? CPU頻率為50MHz; ? 32位Flash存儲器; ? SR
    的頭像 發表于 08-16 11:16 ?1440次閱讀

    gd32和stm32哪個好?

    gd32和stm32哪個好? GD32和STM32是兩種常見的微控制器系列,是開發者們常用的開發板核心。盡管它們相似之處很多,但它們也存在著差異,本文將深入探討GD32和STM32,分享它們的優缺點
    的頭像 發表于 08-16 11:32 ?1204次閱讀

    Nor Flash編程和擦除操作的詳細流程

    Nor Flash 中的編程和擦除操作涉及寫入數據和擦除存儲單元的特定步驟。
    的頭像 發表于 12-05 15:19 ?599次閱讀

    你了解GD32 MCU的命名規則嗎

    下面為大家介紹GD32 MCU的通用命名規則,以GD32F303ZGT6為例,其中,GD32代表GD32 MCU,F代表通用系列產品類型,303代表303產品子系列,Z代表144引腳數
    的頭像 發表于 01-13 09:38 ?2403次閱讀
    你了解<b class='flag-5'>GD32</b> MCU的命名規則嗎
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>