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

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

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

STM32CUBEMX(10)--Flash讀寫

嵌入式單片機(jī)MCU開發(fā) ? 來源:嵌入式單片機(jī)MCU開發(fā) ? 作者:嵌入式單片機(jī)MCU開 ? 2022-11-14 16:36 ? 次閱讀

概述

本例程主要講解如何對芯片自帶Flash進(jìn)行讀寫,用芯片內(nèi)部Flash可以對一些需要斷電保存的數(shù)據(jù)進(jìn)行保存,無需加外部得存儲芯片,本例程采用的是STM32F030R8T6,64K大小的Flash。

硬件準(zhǔn)備

首先需要準(zhǔn)備一個開發(fā)板,這里我準(zhǔn)備的是NUCLEO-F030R8的開發(fā)板:

在這里插入圖片描述

選擇芯片型號

使用STM32CUBEMX選擇芯片stm32f030r8,如下所示:

在這里插入圖片描述

配置時鐘

HSE與LSE分別為外部高速時鐘和低速時鐘,在本文中使用內(nèi)置的時鐘源,故都選擇Disable選項,如下所示:

在這里插入圖片描述

配置時鐘樹

STM32F0的最高主頻到48M,所以配置48即可:

在這里插入圖片描述

串口配置

本次實驗使用的串口1進(jìn)行串口通信,波特率配置為115200。

在這里插入圖片描述

生成工程設(shè)置

注意在生產(chǎn)工程設(shè)置中不能出現(xiàn)中文,不然會報錯。

在這里插入圖片描述

生成代碼

在這里插入圖片描述

配置keil

在這里插入圖片描述

代碼

在main.c中,添加頭文件,若不添加會出現(xiàn) identifier "FILE" is undefined報錯。

/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

函數(shù)聲明和串口重定向:

/* USER CODE BEGIN PV */
void WriteFlashTest(uint32_t L,uint32_t Data[],uint32_t addr);//flash寫函數(shù)
void PrintFlashTest(uint32_t L,uint32_t addr);//flash讀取
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */


int fputc(int ch, FILE *f)
{
    HAL_UART_Transmit(&huart1, (uint8_t *)&ch,1, 0xFFFF);
    return ch;
}
/* USER CODE END PV */

變量定義:

/* USER CODE BEGIN 0 */
uint32_t WriteFlashData[3] = {0x11111111,0x22222222,0x33333333};//數(shù)據(jù)
uint32_t addr = 0x08007000;
/* USER CODE END 0 */

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

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

擦除只能是按頁或者整塊擦除。

芯片說明手冊下載地址:點擊下載

STM32F030芯片內(nèi)部的Flash存儲器內(nèi)存分布如下:

在這里插入圖片描述

STM32F030R8T6的Flash容量是64KB,所以只有63頁,每頁1KB。

我們可以寫入到頁60中,即0x08007000-0x080073FF中。

由于單片機(jī)是32位,故連續(xù)寫入多個uint32_t的數(shù)據(jù)時,地址應(yīng)該依次增加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*/
    /*擦除頁數(shù)*/
    /*擦除地址*/
    FLASH_EraseInitTypeDef FlashSet;
    FlashSet.TypeErase = FLASH_TYPEERASE_PAGES;
    FlashSet.PageAddress = addr;
    FlashSet.NbPages = 1;
    /*設(shè)置PageError,調(diào)用擦除函數(shù)*/
    uint32_t PageError = 0;
    HAL_FLASHEx_Erase(&FlashSet, &PageError);
    /* 3/4對FLASH燒寫*/
    for(i=0;i4*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;iprintf("
addr is:0x%x, data is:0x%x", addr+i*4,  *(__IO uint32_t*)(addr+i*4));
    }

}
/* USER CODE END 4 */

主程序

/* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */        
        WriteFlashTest(3,WriteFlashData,addr);
        PrintFlashTest(3,addr);
        HAL_Delay(5000);
  }
  /* USER CODE END 3 */

演示效果

在這里插入圖片描述

通過keil查看地址也可以看到,值正確寫入。

在這里插入圖片描述

審核編輯:湯梓紅

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

    關(guān)注

    10

    文章

    1635

    瀏覽量

    148016
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5050

    瀏覽量

    97456
  • stm32cubemx
    +關(guān)注

    關(guān)注

    5

    文章

    283

    瀏覽量

    14807
收藏 人收藏

    評論

    相關(guān)推薦

    STM32CubeMx入門教程(6):SPI讀寫FLAH的應(yīng)用

    導(dǎo)語“本教程將使用CubeMX初始化SPI,使用SPI對W25Q64 FLASH進(jìn)行讀寫操作,通過HAL庫的讀寫應(yīng)用來數(shù)據(jù)FLASH的操作細(xì)
    發(fā)表于 07-12 11:32 ?2989次閱讀
    <b class='flag-5'>STM32CubeMx</b>入門教程(6):SPI<b class='flag-5'>讀寫</b>FLAH的應(yīng)用

    STM32CUBEMX(10)--Flash讀寫

    概述 本例程主要講解如何對芯片自帶Flash進(jìn)行讀寫,用芯片內(nèi)部Flash可以對一些需要斷電保存的數(shù)據(jù)進(jìn)行保存,無需加外部得存儲芯片,本例程采用的是STM32F030R8T6,64K大
    發(fā)表于 09-10 15:36

    請問如何用stm32cubemx設(shè)置FLASH讀寫配置?

    如何用stm32cubemx 設(shè)置 FLASH讀寫配置?
    發(fā)表于 11-19 08:51

    stm32cubemx教程

    stm32cubemx教程,需要學(xué)習(xí)的看看,免積分
    發(fā)表于 11-02 10:16 ?0次下載

    關(guān)于STM32CubeMX重大升級

    STM32CubeMX重大升級
    的頭像 發(fā)表于 03-04 14:05 ?3774次閱讀

    淺談stm32cubemx安裝教程

    STM32CubeMX介紹、下載與安裝
    的頭像 發(fā)表于 03-25 10:57 ?1.8w次閱讀
    淺談<b class='flag-5'>stm32cubemx</b>安裝教程

    如何通過STM32CubeMX制作外部Flash的燒寫驅(qū)動 (.stdlr)

    通過 STM32CubeMX制作外部Flash的燒寫驅(qū)動 (.stdlr) 前言 ? 目前,越來越多的應(yīng)用需要擴(kuò)展外部的Flash來滿足存儲需求。那么,在調(diào)試及批量生產(chǎn)的過程中,需要對外擴(kuò)
    的頭像 發(fā)表于 01-08 17:56 ?7130次閱讀
    如何通過<b class='flag-5'>STM32CubeMX</b>制作外部<b class='flag-5'>Flash</b>的燒寫驅(qū)動 (.stdlr)

    STM32CubeMX | 28 - STM32片內(nèi)Flash的使用

    本系列文章匯總:STM32CubeMX系列教程本篇文章主要介紹如何使用STM32中的片內(nèi)FLash。1. 準(zhǔn)備工作硬件準(zhǔn)備開發(fā)板首先需要準(zhǔn)備一個開發(fā)板,這里我準(zhǔn)備的是STM32L4的開
    發(fā)表于 12-01 20:36 ?7次下載
    <b class='flag-5'>STM32CubeMX</b> | 28 - <b class='flag-5'>STM32</b>片內(nèi)<b class='flag-5'>Flash</b>的使用

    STM32CUBEMX(10)--Flash讀寫

    Flash進(jìn)行讀寫,用芯片內(nèi)部Flash可以對一些需要斷電保存的數(shù)據(jù)進(jìn)行保存,無需加外部得存儲芯片,本例程采用的是STM32F030R8T6,64K大小的
    發(fā)表于 12-02 11:21 ?11次下載
    <b class='flag-5'>STM32CUBEMX</b>(<b class='flag-5'>10</b>)--<b class='flag-5'>Flash</b><b class='flag-5'>讀寫</b>

    STM32F4內(nèi)部Flash讀寫

    之前的文章中介紹過STM32F0列的內(nèi)部Flash讀寫STM32CubeMX之內(nèi)部Flash讀寫
    發(fā)表于 12-02 11:36 ?32次下載
    <b class='flag-5'>STM32</b>F4內(nèi)部<b class='flag-5'>Flash</b><b class='flag-5'>讀寫</b>

    STM32學(xué)習(xí)之STM32cubeMX軟件安裝與使用(附STM32cubeMX5.2.1下載地址)

    STM32學(xué)習(xí)之STM32cubeMX軟件安裝與使用(附STM32cubeMX5.2.1下載地址)
    發(fā)表于 12-07 11:51 ?28次下載
    <b class='flag-5'>STM32</b>學(xué)習(xí)之<b class='flag-5'>STM32cubeMX</b>軟件安裝與使用(附<b class='flag-5'>STM32cubeMX</b>5.2.1下載地址)

    STM32CubeMX 窗口及工具介紹

    STM32CubeMX 系列教程之 STM32CubeMX 窗口及 STM32PackCreator 工具介紹,內(nèi)附詳細(xì)圖文介紹。
    發(fā)表于 12-14 18:51 ?27次下載
    <b class='flag-5'>STM32CubeMX</b> 窗口及工具介紹

    Keil STM32CubeMX資料包

    Keil STM32CubeMX資料包。STM32CubeMX設(shè)置了TM2為編碼器接口,串口,外部Flsh,ISP,外部時鐘晶振,因為技術(shù)有限,外部Flash和ISP程序還沒寫,?
    發(fā)表于 03-27 09:21 ?5次下載

    STM32CUBEMX開發(fā)GD32F303(17)----內(nèi)部Flash讀寫

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

    STM8CubeMXSTM32CubeMX功能一樣嗎?

    STM8CubeMXSTM32CubeMX功能一樣嗎?
    的頭像 發(fā)表于 10-31 16:59 ?1804次閱讀
    STM8<b class='flag-5'>CubeMX</b>和<b class='flag-5'>STM32CubeMX</b>功能一樣嗎?