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

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

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

3天內不再提示

GD32F303固件庫開發(17)----內部Flash讀寫

嵌入式單片機MCU開發 ? 來源:嵌入式單片機MCU開發 ? 作者:嵌入式單片機MCU開 ? 2023-07-27 09:40 ? 次閱讀

概述

本例程主要講解如何對芯片自帶Flash進行讀寫,用芯片內部Flash可以對一些需要斷電保存的數據進行保存,無需加外部得存儲芯片,本例程采用的是GD32F303ZET6主控,512K大小的Flash。 最近在弄ST和GD的課程,需要GD樣片的可以加群申請:615061293 。

csdn課程

課程更加詳細。

https://download.csdn.net/course/detail/37144

樣品申請

https://www.wjx.top/vm/wFGhGPF.aspx#

生成例程

這里準備了自己繪制的開發板進行驗證。

在這里插入圖片描述

系統架構示意圖

Flash的操作可以通過FMC控制器進行操作。

在這里插入圖片描述

FLASH分配

要注意的是,將數據存在flash不同的地方,速度可能不一樣。 在閃存的前256K字節空間內,CPU執行指令零等待,在此范圍外,CPU讀取指令存在較長延時。 同時FLASH有2大塊,對于GD32F30x_CL和GD32F30x_XD,使用了兩片閃存,前512KB容量在第一片閃存(bank0)中,后續的容量在第二片閃存(bank1)中;

在這里插入圖片描述

在這里插入圖片描述

操作流程

如果要對FLASH進行寫入數據,需要執行以下四步:

  1. 解鎖FLASH
  2. 擦除FLASH
  3. 寫入FLASH
  4. 鎖住FLASH

在這里插入圖片描述

FMC_CTLx 寄存器解鎖

首先第一步是確保FMC_CTLx寄存器不處于鎖定狀態。

在這里插入圖片描述

解鎖用fmc_unlock()函數,UNLOCK_KEY0和UNLOCK_KEY1分別是0x45670123和0xCDEF89AB,向FMC_KEY0分別寫入著2個參數。

在這里插入圖片描述

在這里插入圖片描述

對于第二層解鎖,需要使用ob_unlock()函數,向FMC_OBKEY寫入UNLOCK_KEY0和UNLOCK_KEY1。 同時通過軟件將FMC_CTL0的OBWEN位清0來鎖定FMC_CTL0的OBPG位和OBER位。

在這里插入圖片描述

解鎖代碼。

/* unlock the flash program/erase controller */
    fmc_unlock();//解鎖Flash操作
    ob_unlock();//解鎖選項字節,先決條件fmc_unlock

    fmc_flag_clear(FMC_FLAG_BANK0_END);
    fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
    fmc_flag_clear(FMC_FLAG_BANK0_PGERR);

頁擦除

第二步進行頁擦除。

在這里插入圖片描述

在這里插入圖片描述

其中第一步確保FMC_CTLx寄存器不處于鎖定狀態已在上面解鎖了,所以直接進行第二步,檢查FMC_STATx寄存器的BUSY位來判定閃存是否正處于擦寫訪問狀態,若BUSY位為1,則需等待該操作結束,BUSY位變為0; 對于擦除函數,使用fmc_page_erase();

在這里插入圖片描述

對于if(FMC_BANK0_SIZE < FMC_SIZE)

在這里插入圖片描述

FMC_BANK0_SIZE 和 FMC_SIZE 是兩個定義的常量,它們表示 FMC 控制器的兩個不同的地址空間。FMC_BANK0_SIZE 指的是 FMC 控制器的 BANK0 地址空間的大小,而 FMC_SIZE 則指的是整個 FMC 控制器的地址空間的大小。因此,如果 FMC_BANK0_SIZE 小于 FMC_SIZE,則說明 FMC 控制器的 BANK0 地址空間不能完全覆蓋整個 FMC 控制器的地址空間,此時可能需要使用其他的地址空間來存儲數據。

上述說到的檢查FMC_STATx寄存器的BUSY位,使用fmc_bank0_ready_wait()函數。

在這里插入圖片描述

對于以下幾個步驟

  1. 置位FMC_CTLx寄存器的PER位;
  2. 將待擦除頁的絕對地址(0x08XX XXXX)寫到FMC_ADDRx寄存器;
  3. 通過將FMC_CTLx寄存器的START位置1來發送頁擦除命令到FMC;
  4. 等待擦除指令執行完畢,FMC_STATx寄存器的BUSY位清0;

在fmc_page_erase()都有對應操作。

在這里插入圖片描述

寫數據

解鎖和擦除之后,就可以對flash進行寫數據的操作。

在這里插入圖片描述

其中第一步確保FMC_CTLx寄存器不處于鎖定狀態已在上面解鎖了,所以直接進行第二步,檢查FMC_STATx寄存器的BUSY位來判定閃存是否正處于擦寫訪問狀態,若BUSY位為1,則需等待該操作結束,BUSY位變為0; 對于寫函數,使用fmc_word_program();

在這里插入圖片描述

解鎖FMC_CTL0寄存器的可選字節操作位和等待FMC_CTL0寄存器的OBWEN位置1在解鎖時候已經操作了,故進入第五步。

在這里插入圖片描述

讀數據

在這里插入圖片描述

對于讀數據,可以直接訪問地址進行讀取。

OutData=(*(__IO uint32_t*)(WriteAddr));

上鎖

上鎖可以使用fmc_lock()函數。

在這里插入圖片描述

當上鎖時,對控制寄存器 0 (FMC_CTL0)的第7位寫1。

在這里插入圖片描述

在這里插入圖片描述

變量定義

/* USER CODE BEGIN 0 */
uint32_t WriteFlashData[3] = {0x11111111,0x22222222,0x33333333};//數據
uint32_t WriteFlashData1[3] = {0x44444444,0x55555555,0x66666666};//數據
uint32_t addr = 0x0807F800;//page 255
uint32_t addr1 = 0x0807FC00;//page 255+1k

void PrintFlashTest(uint32_t L,uint32_t addr);
void WriteFlashTest(uint32_t L,uint32_t Data[],uint32_t addr);

/* USER CODE END 0 */

如果要對FLASH進行寫入數據,需要執行以下四步:

  1. 解鎖FLASH
  2. 擦除FLASH
  3. 寫入FLASH
  4. 鎖住FLASH

擦除只能是按頁或者整塊擦除。 GD32F103ZET6的Flash容量是512KB,所以只有255頁,每頁2KB。 我們可以寫入到頁255中,即0x0807F800-0x0807FFFF中。 由于單片機是32位,故連續寫入多個uint32_t的數據時,地址應該依次增加4。

/*FLASH寫入程序*/
void WriteFlashTest(uint32_t L,uint32_t Data[],uint32_t addr)
{
    uint32_t i=0;

    /* 1/4解鎖FLASH*/
  /* unlock the flash program/erase controller */
  fmc_unlock();//解鎖Flash操作
  ob_unlock();//解鎖選項字節,先決條件fmc_unlock

  //清除標志位    
    fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
  fmc_flag_clear(FMC_FLAG_BANK0_WPERR);        
  fmc_flag_clear(FMC_FLAG_BANK0_END);        
    fmc_flag_clear(FMC_FLAG_BANK1_PGERR);        
    fmc_flag_clear(FMC_FLAG_BANK1_WPERR);        
    fmc_flag_clear(FMC_FLAG_BANK1_END);        

    /* 2/4擦除FLASH*/
  //擦除頁
  fmc_page_erase(addr);

    /* 3/4對FLASH燒寫*/
    for(i=0;i< L;i++)
    {
        fmc_word_program(addr+4*i, Data[i]);
    }    

    /* 4/4鎖住FLASH*/    
    fmc_lock();    

}



/*FLASH讀取打印程序*/
void PrintFlashTest(uint32_t L,uint32_t addr)
{
    uint32_t i=0;
    for(i=0;i< L;i++)
    {
        printf("naddr is:0x%x, data is:0x%x", addr+i*4,  *(__IO uint32_t*)(addr+i*4));

        }
}

主程序

while (1){
        WriteFlashTest(3,WriteFlashData,addr);
        WriteFlashTest(3,WriteFlashData1,addr1);
        PrintFlashTest(3,addr);
        PrintFlashTest(3,addr1);
        delay_1ms(5000);

    }

演示效果

可以看見,對于高容量,頁的大小位2k,故寫入addr1時候,addr的數據就被擦除了。

在這里插入圖片描述

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

    關注

    10

    文章

    1656

    瀏覽量

    150549
  • 固件庫
    +關注

    關注

    2

    文章

    97

    瀏覽量

    15146
  • GD32
    +關注

    關注

    7

    文章

    418

    瀏覽量

    24982
  • gd32f303
    +關注

    關注

    4

    文章

    38

    瀏覽量

    3850
收藏 人收藏

    評論

    相關推薦

    GD32F303固件開發(14)----IIC之配置OLED

    本章配置GD32F303使用IIC進行驅動SSD1306的12864OLED。
    的頭像 發表于 07-26 08:55 ?4253次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫</b><b class='flag-5'>開發</b>(14)----IIC之配置OLED

    GD32F303】星空派介紹

    GD32官方資料的基礎上,提供GD32F303的庫函數開發資料、例程講解、視頻課程等。同時還提供RT-Thread相關的驅動開發、應用開發
    發表于 09-11 17:55

    星空派GD32F303開發板的相關資料下載

    一、開發板介紹星空派(GD開發板是由旗點科技推出的一款GD32開發板,板載GD32F303ZE
    發表于 12-10 08:27

    GD32F30x系列固件

    GD32F30x系列固件包含GD32F303GD32F305、GD32F307三個系列的最新
    發表于 08-21 09:00 ?166次下載

    GD32F303固件開發(1)----前期準備與燒錄

    在這使用STM32CUBEMX進行配置STM32F103,移植到兆易創新GD32F303,然后進行測試。需要樣片的可以加Qun申請:615061293。
    的頭像 發表于 11-23 11:15 ?3333次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫</b><b class='flag-5'>開發</b>(1)----前期準備與燒錄

    GD32F303固件開發(3)----使用固件點亮LED

    概述 在GD的官網中有許多的DEMO文件,可以使用開發板的案例或者對應的MCU標準固件。需要樣片的可以加群申請:6_15061293。 下圖是GD
    的頭像 發表于 11-23 17:36 ?3364次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫</b><b class='flag-5'>開發</b>(3)----使用<b class='flag-5'>固件</b><b class='flag-5'>庫</b>點亮LED

    GD32F303固件開發(5)----GPIO輸出模式,速率測試、開漏和輸出說明

    以STM32CUBEMX創建STM32F103工程,同時移植在GD32F303中,同時通過GD32303C_START開發板內進行驗證。
    的頭像 發表于 11-25 15:32 ?3473次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫</b><b class='flag-5'>開發</b>(5)----GPIO輸出模式,速率測試、開漏和輸出說明

    AN029 GD32F103程序在GD32F303GD32F403芯片上運行DSP

    AN029 GD32F103程序在GD32F303GD32F403芯片上運行DSP
    發表于 02-27 18:33 ?0次下載
    AN029 <b class='flag-5'>GD32F</b>103程序在<b class='flag-5'>GD32F303</b>和<b class='flag-5'>GD32F</b>403芯片上運行DSP

    GD32F303固件開發(15)----外部中斷EXTI

    本章配置GD32F303使用EXTI進行驅動LED。
    的頭像 發表于 07-26 15:56 ?1922次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫</b><b class='flag-5'>開發</b>(15)----外部中斷EXTI

    GD32F303固件開發

    /qq_24312945/article/details/124325797] GD32F303固件開發(2)----讀保護與寫保護 芯片讀保護以后,
    的頭像 發表于 07-27 09:27 ?1484次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫</b><b class='flag-5'>開發</b>

    STM32CUBEMX開發GD32F303

    在這使用STM32CUBEMX進行配置STM32F103,移植到兆易創新GD32F303,然后進行測試。
    的頭像 發表于 07-27 09:32 ?1934次閱讀
    STM32CUBEMX<b class='flag-5'>開發</b><b class='flag-5'>GD32F303</b>

    STM32CUBEMX開發GD32F30317)----內部Flash讀寫

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中進行開發,同時通過開發板內進行驗證。 本例程主要講解如何對芯片自帶Fla
    的頭像 發表于 07-27 09:35 ?2133次閱讀
    STM32CUBEMX<b class='flag-5'>開發</b><b class='flag-5'>GD32F303</b>(<b class='flag-5'>17</b>)----<b class='flag-5'>內部</b><b class='flag-5'>Flash</b><b class='flag-5'>讀寫</b>

    GD32F303為什么啟動慢?

    在MCU開發中,有一項非常重要的參數——MCU啟動時間,即MCU上電后到程序開始運行這段時間。我們來看下GD32F303的datasheet中對啟動時間的描述:
    的頭像 發表于 02-22 11:11 ?1789次閱讀
    <b class='flag-5'>GD32F303</b>為什么啟動慢?

    GD32F303紅楓派開發板使用手冊】第二十講 SPI-SPI NAND FLASH讀寫實驗

    通過本實驗主要學習以下內容: ?SPI通信協議,參考19.2.1東方紅開發板使用手冊 ?GD32F303 SPI操作方式,參考19.2.2東方紅開發板使用手冊 ?NAND FLASH
    的頭像 發表于 06-20 09:50 ?1459次閱讀
    【<b class='flag-5'>GD32F303</b>紅楓派<b class='flag-5'>開發</b>板使用手冊】第二十講 SPI-SPI NAND <b class='flag-5'>FLASH</b><b class='flag-5'>讀寫</b>實驗

    GD32 MCU 移植教程】2、從 GD32F303 移植到 GD32F503

    GD32E503 系列是 GD 推出的 Cortex_M33 系列產品,該系列資源上與 GD32F303 兼容度非常高,本應用筆記旨在幫助您快速將應用程序從 GD32F303 系列微控
    的頭像 發表于 08-31 09:36 ?1885次閱讀
    【<b class='flag-5'>GD</b>32 MCU 移植教程】2、從 <b class='flag-5'>GD32F303</b> 移植到 <b class='flag-5'>GD32F</b>503
    主站蜘蛛池模板: 色色色色色色色色色色色 | 亚洲深爱| 黄色片网站大全 | 天天澡天天摸天天添视频 | 午夜影院在线观看 | 国产清纯白嫩大学生正在播放 | 欧美三级视频在线 | 免费在线黄色网址 | 中文字幕在线资源 | 你懂得的在线观看免费视频 | 免费观看成年欧美1314www色 | 性欧美激情在线观看 | 午夜看片免费 | 你懂的手机在线 | 色爱区综合激月婷婷激情五月 | 色噜噜噜| 7m凹凸精品分类大全免费 | 高清一级做a爱视频免费 | 丁香婷婷影院 | 久久精品美女 | 国产精品一区二区三区四区五区 | 国产农村乱色xxxx | 四虎影视永久在线观看 | 美女视频网站色 | 热99精品视频 | 2021久久精品国产99国产 | 午夜肉伦伦影院 | 四虎影院免费观看 | 美女国产一区 | 午夜影视啪啪免费体验区深夜 | 国产一区二区在线观看免费 | 天天做天天爱天天影视综合 | 国产乱淫a∨片免费视频 | 日韩理论电影2021第1页 | 看片久久 | 亚洲色图欧美视频 | 免费在线亚洲 | 亚洲伊人成人 | 天天爱综合| 一级一级18女人毛片 | 好大好硬好深好爽的视频 |