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

STM32CUBEMX開發GD32F303(17)----內部Flash讀寫

發布者:TranquilDreamer最新更新時間:2024-09-18 來源: elecfans關鍵字:GD32F303  內部Flash讀寫 手機看文章 掃描二維碼
隨時隨地手機看文章

概述

本章STM32CUBEMX配置STM32F103,并且在GD32F303中進行開發,同時通過開發板內進行驗證。 本例程主要講解如何對芯片自帶Flash進行讀寫,用芯片內部Flash可以對一些需要斷電保存的數據進行保存,無需加外部得存儲芯片,本例程采用的是STM32F103ZET6進行移植,512K大小的Flash。 


樣品申請

https://www.wjx.top/vm/mB2IKus.aspx


生成例程

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

在這里插入圖片描述

配置時鐘樹,配置時鐘為64M。

在這里插入圖片描述

查看原理圖,PA9和PA10設置為開發板的串口

在這里插入圖片描述

配置串口。

在這里插入圖片描述

串口重定向

在main.c中,添加頭文件,若不添加會出現 identifier 'FILE' is undefined報錯。


/* USER CODE BEGIN Includes */

#include 'stdio.h'

/* USER CODE END Includes */

函數聲明和串口重定向:


/* USER CODE BEGIN PFP */

/* retarget the C library printf function to the USART */

int fputc(int ch, FILE *f)

{

    HAL_UART_Transmit(&huart2 , (uint8_t *)&ch, 1, 0xFFFF);

    return ch;

}

/* USER CODE END PFP */

FLASH定義

對于STM32F103,有低、鐘、高密度的FLASH類型。

在這里插入圖片描述

低密度

在這里插入圖片描述

中密度

在這里插入圖片描述

高密度

在這里插入圖片描述

對于STM32F103ZE,FLASH大小為512KB,固為高密度的Flash。


變量定義

/* 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進行寫入數據,需要執行以下四步:


解鎖FLASH

擦除FLASH

寫入FLASH

鎖住FLASH

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


/* USER CODE BEGIN 4 */


/*FLASH寫入程序*/

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

{

    uint32_t i=0;

    /* 1/4解鎖FLASH*/

    HAL_FLASH_Unlock();

    /* 2/4擦除FLASH*/

    /*初始化FLASH_EraseInitTypeDef*/

    /*擦除方式頁擦除FLASH_TYPEERASE_PAGES,塊擦除FLASH_TYPEERASE_MASSERASE*/

    /*擦除頁數*/

    /*擦除地址*/

    FLASH_EraseInitTypeDef FlashSet;

    FlashSet.TypeErase = FLASH_TYPEERASE_PAGES;

    FlashSet.PageAddress = addr;

    FlashSet.NbPages = 1;

    /*設置PageError,調用擦除函數*/

    uint32_t PageError = 0;

    HAL_FLASHEx_Erase(&FlashSet, &PageError);

    /* 3/4對FLASH燒寫*/

    for(i=0;i< L;i++)

    {

        HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr+4*i, Data[i]);

    }

    /* 4/4鎖住FLASH*/

    HAL_FLASH_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));

    }


}

/* USER CODE END 4 */

主程序


/* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

    /* USER CODE END WHILE */


    /* USER CODE BEGIN 3 */

        WriteFlashTest(3,WriteFlashData,addr);

        WriteFlashTest(3,WriteFlashData1,addr1);

        PrintFlashTest(3,addr);

        PrintFlashTest(3,addr1);

        HAL_Delay(5000);


  }

  /* USER CODE END 3 */

演示效果

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

在這里插入圖片描述

關鍵字:GD32F303  內部Flash讀寫 引用地址:STM32CUBEMX開發GD32F303(17)----內部Flash讀寫

上一篇:STM32設計的嵌入式系統的智能控制網絡終端方案
下一篇:基于STM32F103設計的智能門鎖(支持多種開鎖解鎖方式)

小廣播
設計資源 培訓 開發板 精華推薦

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 兴安盟| 久治县| 广元市| 西乌| 达孜县| 高碑店市| 孝感市| 丹东市| 平潭县| 晋江市| 镇远县| 镇康县| 泸西县| 榕江县| 柘城县| 郑州市| 瓦房店市| 鞍山市| 彭阳县| 类乌齐县| 定安县| 桑植县| 霞浦县| 海兴县| 柞水县| 东安县| 满城县| 波密县| 灌南县| 广河县| 扶绥县| 景德镇市| 密云县| 芒康县| 阳谷县| 北宁市| 灵川县| 偏关县| 巴中市| 五寨县| 商河县|