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

GD32的FLASH讀、擦除、寫操作

發布者:VelvetWhisper最新更新時間:2024-10-31 來源: elecfans關鍵字:GD32  擦除  寫操作 手機看文章 掃描二維碼
隨時隨地手機看文章

一,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();}


關鍵字:GD32  擦除  寫操作 引用地址:GD32的FLASH讀、擦除、寫操作

上一篇:GD32 MCU是如何進入中斷函數的
下一篇:如何排查GD32 MCU復位是由哪個復位源導致的?

推薦閱讀最新更新時間:2025-06-07 23:47

STM32 FLASH擦除
編譯環境:我用的是(Keil)MDK4.7.2 stm32庫版本:我用的是3.5.0 一、本文不對FLASH的基礎知識做詳細的介紹,不懂得地方請查閱有關資料。   對STM32 內部FLASH進行編程操作,需要遵循以下流程:   FLASH解鎖   清除相關標志位   擦除FLASH(先擦除后寫入的原因是為了工業上制作方便,即物理實現方便)   寫入FLASH   鎖定FLASH 實例: #define FLASH_PAGE_SIZE ((uint16_t)0x400) //如果一頁為1K大小 #define WRITE_START_ADDR ((uint32_t)0x08008000)//寫入的起始地址 #define W
[單片機]
STM32 <font color='red'>FLASH</font><font color='red'>讀</font>、<font color='red'>寫</font>、<font color='red'>擦除</font>
GD32 MCU 入門教程】一、GD32 MCU 開發環境搭建(3)使用 Embedded Builder 開發 GD32
3.1 安裝 JAVA 環境 Embedded Builder 是一款基于 Eclipse 和 Java 平臺的軟件,需要安裝 java 環境,在 Oracle 官網下載 https://www.oracle.com/java/technologies/downloads/, 以 jdk-8u152-windows-x64.exe 為例,下載后管理員身份打開并安裝,記住安裝路徑,如“D:Program FilesJavajdk1.8.0_351”。 編輯系統變量,將 Java 環境添加到系統環境中。首先在系統變量中添加JAVA_HOME 這個變量。 編輯系統變量中的 Path 變量,單擊新建,添加如下兩個變量。 在系統
[單片機]
【<font color='red'>GD32</font> MCU 入門教程】一、<font color='red'>GD32</font> MCU 開發環境搭建(3)使用 Embedded Builder 開發 <font color='red'>GD32</font>
gd32和stm32的編程區別
GD32和STM32是目前市場上比較流行的兩種芯片,它們都具有高性能、低功耗和豐富的外設等特點,因此得到了廣泛的應用。但是,GD32和STM32在編程上還是存在差異的,本文將就此進行詳細地解析。 一、GD32和STM32的概述 GD32和STM32是龍芯(RISC-V)和意法半導體(ARM Cortex-M)兩家公司推出的芯片,由于兩家公司的巨大影響力,它們在市場上一直處于領先位置。GD32是龍芯推出的32位微控制器,基于RISC-V架構,主要應用于智能家居、物聯網和工業控制等領域;STM32是意法半導體推出的32位微控制器,基于ARM Cortex-M架構,主要應用于汽車、醫療、電力等領域。 二、GD32和STM32的編程區別
[單片機]
小廣播
設計資源 培訓 開發板 精華推薦

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 湛江市| 安新县| 揭西县| 浪卡子县| 綦江县| 茌平县| 鄂托克旗| 麻城市| 慈溪市| 准格尔旗| 安西县| 天镇县| 独山县| 宿松县| 南宫市| 安顺市| 武宣县| 馆陶县| 申扎县| 建瓯市| 娱乐| 突泉县| 全南县| 呼玛县| 法库县| 宜黄县| 睢宁县| 基隆市| 名山县| 日照市| 临江市| 南投市| 九龙县| 清丰县| 滨州市| 吉林省| 萝北县| 右玉县| 稷山县| 华坪县| 潜山县|