chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

GD32F303固件庫(kù)開(kāi)發(fā)(17)----內(nèi)部Flash讀寫(xiě)

嵌入式單片機(jī)MCU開(kāi)發(fā) ? 來(lái)源:嵌入式單片機(jī)MCU開(kāi)發(fā) ? 作者:嵌入式單片機(jī)MCU開(kāi) ? 2023-07-27 09:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

概述

本例程主要講解如何對(duì)芯片自帶Flash進(jìn)行讀寫(xiě),用芯片內(nèi)部Flash可以對(duì)一些需要斷電保存的數(shù)據(jù)進(jìn)行保存,無(wú)需加外部得存儲(chǔ)芯片,本例程采用的是GD32F303ZET6主控,512K大小的Flash。 最近在弄ST和GD的課程,需要GD樣片的可以加群申請(qǐng):615061293 。

csdn課程

課程更加詳細(xì)。

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

樣品申請(qǐng)

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

生成例程

這里準(zhǔn)備了自己繪制的開(kāi)發(fā)板進(jìn)行驗(yàn)證。

在這里插入圖片描述

系統(tǒng)架構(gòu)示意圖

Flash的操作可以通過(guò)FMC控制器進(jìn)行操作。

在這里插入圖片描述

FLASH分配

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

在這里插入圖片描述

在這里插入圖片描述

操作流程

如果要對(duì)FLASH進(jìn)行寫(xiě)入數(shù)據(jù),需要執(zhí)行以下四步:

  1. 解鎖FLASH
  2. 擦除FLASH
  3. 寫(xiě)入FLASH
  4. 鎖住FLASH

在這里插入圖片描述

FMC_CTLx 寄存器解鎖

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

在這里插入圖片描述

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

在這里插入圖片描述

在這里插入圖片描述

對(duì)于第二層解鎖,需要使用ob_unlock()函數(shù),向FMC_OBKEY寫(xiě)入U(xiǎn)NLOCK_KEY0和UNLOCK_KEY1。 同時(shí)通過(guò)軟件將FMC_CTL0的OBWEN位清0來(lái)鎖定FMC_CTL0的OBPG位和OBER位。

在這里插入圖片描述

解鎖代碼。

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

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

頁(yè)擦除

第二步進(jìn)行頁(yè)擦除。

在這里插入圖片描述

在這里插入圖片描述

其中第一步確保FMC_CTLx寄存器不處于鎖定狀態(tài)已在上面解鎖了,所以直接進(jìn)行第二步,檢查FMC_STATx寄存器的BUSY位來(lái)判定閃存是否正處于擦寫(xiě)訪(fǎng)問(wèn)狀態(tài),若BUSY位為1,則需等待該操作結(jié)束,BUSY位變?yōu)?; 對(duì)于擦除函數(shù),使用fmc_page_erase();

在這里插入圖片描述

對(duì)于if(FMC_BANK0_SIZE < FMC_SIZE)

在這里插入圖片描述

FMC_BANK0_SIZE 和 FMC_SIZE 是兩個(gè)定義的常量,它們表示 FMC 控制器的兩個(gè)不同的地址空間。FMC_BANK0_SIZE 指的是 FMC 控制器的 BANK0 地址空間的大小,而 FMC_SIZE 則指的是整個(gè) FMC 控制器的地址空間的大小。因此,如果 FMC_BANK0_SIZE 小于 FMC_SIZE,則說(shuō)明 FMC 控制器的 BANK0 地址空間不能完全覆蓋整個(gè) FMC 控制器的地址空間,此時(shí)可能需要使用其他的地址空間來(lái)存儲(chǔ)數(shù)據(jù)。

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

在這里插入圖片描述

對(duì)于以下幾個(gè)步驟

  1. 置位FMC_CTLx寄存器的PER位;
  2. 將待擦除頁(yè)的絕對(duì)地址(0x08XX XXXX)寫(xiě)到FMC_ADDRx寄存器;
  3. 通過(guò)將FMC_CTLx寄存器的START位置1來(lái)發(fā)送頁(yè)擦除命令到FMC;
  4. 等待擦除指令執(zhí)行完畢,F(xiàn)MC_STATx寄存器的BUSY位清0;

在fmc_page_erase()都有對(duì)應(yīng)操作。

在這里插入圖片描述

寫(xiě)數(shù)據(jù)

解鎖和擦除之后,就可以對(duì)flash進(jìn)行寫(xiě)數(shù)據(jù)的操作。

在這里插入圖片描述

其中第一步確保FMC_CTLx寄存器不處于鎖定狀態(tài)已在上面解鎖了,所以直接進(jìn)行第二步,檢查FMC_STATx寄存器的BUSY位來(lái)判定閃存是否正處于擦寫(xiě)訪(fǎng)問(wèn)狀態(tài),若BUSY位為1,則需等待該操作結(jié)束,BUSY位變?yōu)?; 對(duì)于寫(xiě)函數(shù),使用fmc_word_program();

在這里插入圖片描述

解鎖FMC_CTL0寄存器的可選字節(jié)操作位和等待FMC_CTL0寄存器的OBWEN位置1在解鎖時(shí)候已經(jīng)操作了,故進(jìn)入第五步。

在這里插入圖片描述

讀數(shù)據(jù)

在這里插入圖片描述

對(duì)于讀數(shù)據(jù),可以直接訪(fǎng)問(wèn)地址進(jìn)行讀取。

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

上鎖

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

在這里插入圖片描述

當(dāng)上鎖時(shí),對(duì)控制寄存器 0 (FMC_CTL0)的第7位寫(xiě)1。

在這里插入圖片描述

在這里插入圖片描述

變量定義

/* USER CODE BEGIN 0 */
uint32_t WriteFlashData[3] = {0x11111111,0x22222222,0x33333333};//數(shù)據(jù)
uint32_t WriteFlashData1[3] = {0x44444444,0x55555555,0x66666666};//數(shù)據(jù)
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 */

如果要對(duì)FLASH進(jìn)行寫(xiě)入數(shù)據(jù),需要執(zhí)行以下四步:

  1. 解鎖FLASH
  2. 擦除FLASH
  3. 寫(xiě)入FLASH
  4. 鎖住FLASH

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

/*FLASH寫(xiě)入程序*/
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();//解鎖選項(xiàng)字節(jié),先決條件fmc_unlock

  //清除標(biāo)志位    
    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*/
  //擦除頁(yè)
  fmc_page_erase(addr);

    /* 3/4對(duì)FLASH燒寫(xiě)*/
    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);

    }

演示效果

可以看見(jiàn),對(duì)于高容量,頁(yè)的大小位2k,故寫(xiě)入addr1時(shí)候,addr的數(shù)據(jù)就被擦除了。

在這里插入圖片描述

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1701

    瀏覽量

    153844
  • 固件庫(kù)
    +關(guān)注

    關(guān)注

    2

    文章

    98

    瀏覽量

    15449
  • GD32
    +關(guān)注

    關(guān)注

    7

    文章

    427

    瀏覽量

    26586
  • gd32f303
    +關(guān)注

    關(guān)注

    4

    文章

    38

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    GD32F303固件庫(kù)開(kāi)發(fā)(14)----IIC之配置OLED

    本章配置GD32F303使用IIC進(jìn)行驅(qū)動(dòng)SSD1306的12864OLED。
    的頭像 發(fā)表于 07-26 08:55 ?5042次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>開(kāi)發(fā)</b>(14)----IIC之配置OLED

    GD32F303】星空派介紹

    GD32官方資料的基礎(chǔ)上,提供GD32F303的庫(kù)函數(shù)開(kāi)發(fā)資料、例程講解、視頻課程等。同時(shí)還提供RT-Thread相關(guān)的驅(qū)動(dòng)開(kāi)發(fā)、應(yīng)用開(kāi)發(fā)、
    發(fā)表于 09-11 17:55

    星空派GD32F303開(kāi)發(fā)板的相關(guān)資料下載

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

    GD32F30x系列固件庫(kù)

    GD32F30x系列固件庫(kù)包含GD32F303GD32F305、GD32F307三個(gè)系列的最新
    發(fā)表于 08-21 09:00 ?167次下載

    GD32F303固件庫(kù)開(kāi)發(fā)(1)----前期準(zhǔn)備與燒錄

    在這使用STM32CUBEMX進(jìn)行配置STM32F103,移植到兆易創(chuàng)新GD32F303,然后進(jìn)行測(cè)試。需要樣片的可以加Qun申請(qǐng):615061293。
    的頭像 發(fā)表于 11-23 11:15 ?4234次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>開(kāi)發(fā)</b>(1)----前期準(zhǔn)備與燒錄

    GD32F303固件庫(kù)開(kāi)發(fā)(3)----使用固件庫(kù)點(diǎn)亮LED

    概述 在GD的官網(wǎng)中有許多的DEMO文件,可以使用開(kāi)發(fā)板的案例或者對(duì)應(yīng)的MCU標(biāo)準(zhǔn)固件庫(kù)。需要樣片的可以加群申請(qǐng):6_15061293。 下圖是GD
    的頭像 發(fā)表于 11-23 17:36 ?4111次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>開(kāi)發(fā)</b>(3)----使用<b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b>點(diǎn)亮LED

    GD32F303固件庫(kù)開(kāi)發(fā)(5)----GPIO輸出模式,速率測(cè)試、開(kāi)漏和輸出說(shuō)明

    以STM32CUBEMX創(chuàng)建STM32F103工程,同時(shí)移植在GD32F303中,同時(shí)通過(guò)GD32303C_START開(kāi)發(fā)板內(nèi)進(jìn)行驗(yàn)證。
    的頭像 發(fā)表于 11-25 15:32 ?4113次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>開(kāi)發(fā)</b>(5)----GPIO輸出模式,速率測(cè)試、開(kāi)漏和輸出說(shuō)明

    AN029 GD32F103程序在GD32F303GD32F403芯片上運(yùn)行DSP

    AN029 GD32F103程序在GD32F303GD32F403芯片上運(yùn)行DSP
    發(fā)表于 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芯片上運(yùn)行DSP

    GD32F303固件庫(kù)開(kāi)發(fā)(15)----外部中斷EXTI

    本章配置GD32F303使用EXTI進(jìn)行驅(qū)動(dòng)LED。
    的頭像 發(fā)表于 07-26 15:56 ?2624次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫(kù)</b><b class='flag-5'>開(kāi)發(fā)</b>(15)----外部中斷EXTI

    GD32F303固件庫(kù)開(kāi)發(fā)

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

    STM32CUBEMX開(kāi)發(fā)GD32F303

    在這使用STM32CUBEMX進(jìn)行配置STM32F103,移植到兆易創(chuàng)新GD32F303,然后進(jìn)行測(cè)試。
    的頭像 發(fā)表于 07-27 09:32 ?2561次閱讀
    STM32CUBEMX<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>GD32F303</b>

    STM32CUBEMX開(kāi)發(fā)GD32F30317)----內(nèi)部Flash讀寫(xiě)

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中進(jìn)行開(kāi)發(fā),同時(shí)通過(guò)開(kāi)發(fā)板內(nèi)進(jìn)行驗(yàn)證。 本例程主要講解如何對(duì)芯片自帶Fla
    的頭像 發(fā)表于 07-27 09:35 ?2840次閱讀
    STM32CUBEMX<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>GD32F303</b>(<b class='flag-5'>17</b>)----<b class='flag-5'>內(nèi)部</b><b class='flag-5'>Flash</b><b class='flag-5'>讀寫(xiě)</b>

    GD32F303為什么啟動(dòng)慢?

    在MCU開(kāi)發(fā)中,有一項(xiàng)非常重要的參數(shù)——MCU啟動(dòng)時(shí)間,即MCU上電后到程序開(kāi)始運(yùn)行這段時(shí)間。我們來(lái)看下GD32F303的datasheet中對(duì)啟動(dòng)時(shí)間的描述:
    的頭像 發(fā)表于 02-22 11:11 ?2391次閱讀
    <b class='flag-5'>GD32F303</b>為什么啟動(dòng)慢?

    GD32F303紅楓派開(kāi)發(fā)板使用手冊(cè)】第二十講 SPI-SPI NAND FLASH讀寫(xiě)實(shí)驗(yàn)

    通過(guò)本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容: ?SPI通信協(xié)議,參考19.2.1東方紅開(kāi)發(fā)板使用手冊(cè) ?GD32F303 SPI操作方式,參考19.2.2東方紅開(kāi)發(fā)板使用手冊(cè) ?NAND FLASH
    的頭像 發(fā)表于 06-20 09:50 ?2496次閱讀
    【<b class='flag-5'>GD32F303</b>紅楓派<b class='flag-5'>開(kāi)發(fā)</b>板使用手冊(cè)】第二十講 SPI-SPI NAND <b class='flag-5'>FLASH</b><b class='flag-5'>讀寫(xiě)</b>實(shí)驗(yàn)

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

    GD32E503 系列是 GD 推出的 Cortex_M33 系列產(chǎn)品,該系列資源上與 GD32F303 兼容度非常高,本應(yīng)用筆記旨在幫助您快速將應(yīng)用程序從 GD32F303 系列微控
    的頭像 發(fā)表于 08-31 09:36 ?2647次閱讀
    【<b class='flag-5'>GD</b>32 MCU 移植教程】2、從 <b class='flag-5'>GD32F303</b> 移植到 <b class='flag-5'>GD32F</b>503