亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

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

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

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

STM32C011開發(fā)(3)----Flash操作

嵌入式單片機MCU開發(fā) ? 來源:嵌入式單片機MCU開發(fā) ? 作者:嵌入式單片機MCU開 ? 2025-09-18 16:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

概述

STM32C011 系列微控制器內(nèi)置 Flash 存儲器,支持程序存儲與數(shù)據(jù)保存,具備頁面擦除、雙字寫入、讀寫保護等功能。本文將簡要介紹 STM32C011 的 Flash 結(jié)構(gòu)與特性,并通過實際代碼示例,講解 Flash 的擦除、寫入與讀取等基本操作。

最近在弄ST的教程,需要樣片的可以加群申請:615061293/925643491 。

硬件準備

首先需要準備一個開發(fā)板,這里我準備的是自己繪制的開發(fā)板,需要的可以進行申請。 主控為STM32C011F4P6

視頻教學

https://www.bilibili.com/video/BV1KTBtY4EpD

樣品申請

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

源碼下載

https://download.csdn.net/download/qq_24312945/90228577

參考程序

https://github.com/CoreMaker-lab/STM32C011_TSSOP20

https://gitee.com/CoreMaker/STM32C011_TSSOP20

生成STM32CUBEMX

用STM32CUBEMX生成例程,這里使用MCU為STM32C011F4P6。 配置時鐘樹,配置時鐘為48M。

串口配置

查看原理圖,PA0和PA1設置為開發(fā)板的串口。

配置串口,速率為115200。

堆棧設置

若無法正常運行需要修改優(yōu)化等級。

串口重定向

打開魔術棒,勾選MicroLIB

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

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

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

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

FLASH

STM32C011 的嵌入式 Flash 通過 AHB 總線與 Cortex-M0+ CPU 連接,支持訪問、擦除和編程操作。
Flash 構(gòu)成:
● 存儲單元:Flash 單元為 64 位寬,用于存儲代碼及數(shù)據(jù)。
● 主存儲器結(jié)構(gòu):
○ 共 16 頁,每頁大小為 2 KB,總計 32 KB。
● 信息塊區(qū)域:
○ 包括選項字節(jié)(2 KB)、工程字節(jié)(1 KB)、OTP(1 KB)及系統(tǒng)存儲器(6 KB)。

要向 FLASH 寫入數(shù)據(jù),需要依次完成以下四個步驟:

  1. 解鎖 FLASH
  2. 擦除 FLASH
  3. 寫入 FLASH
    鎖定 FLASH 需要注意,F(xiàn)LASH 的擦除只能按頁或整塊進行。 STM32C011F4P6 的 FLASH 容量為 16 KB,共分為 8 頁,每頁大小為 2 KB。 我們可以將數(shù)據(jù)寫入第 7 頁,其地址范圍為 0x08003800 - 0x08003FFF。 單次寫入的單位為 64 位(8 字節(jié))。

數(shù)據(jù)初始化

● WriteFlashData:
○ 這是一個待寫入的 64 位數(shù)據(jù)數(shù)組,包含 3 個雙字(64 位)數(shù)據(jù)。
○ 每個元素的大小是 8 字節(jié),總計 24 字節(jié)的數(shù)據(jù)。
addr 和 Page:
○ addr 是目標地址,表示從 Flash 的第 7 頁(Page 7)開始寫入。
○ STM32 的 Flash 以 2 KB 為一頁,因此第 7 頁的起始地址是 0x08003800。

/* USER CODE BEGIN 0 */
uint64_t WriteFlashData[3] = {0x1111222233334444,0x5555666677778888,0x9999AAAABBBBCCCC};//數(shù)據(jù)

uint32_t addr = 0x08003800;//page 7
uint32_t        Page = 7;

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

/* USER CODE END 0 */

FLASH 讀寫

/* USER CODE BEGIN 4 */
/* FLASH 寫入程序 */
void WriteFlashTest(uint32_t L, uint64_t Data[], uint32_t Page, uint32_t addr)
{
    uint32_t i = 0;
    uint32_t PageError = 0;

    // 1/4 解鎖 FLASH
    if (HAL_FLASH_Unlock() != HAL_OK)
    {
        printf("Error: Failed to unlock FLASH.n");
        return;
    }

    // 2/4 初始化擦除結(jié)構(gòu)體并擦除指定頁
    FLASH_EraseInitTypeDef FlashSet;
    FlashSet.TypeErase = FLASH_TYPEERASE_PAGES; // 擦除類型:頁擦除
    FlashSet.Page = Page;                       // 頁索引
    FlashSet.NbPages = 1;                       // 一次擦除 1 頁

    if (HAL_FLASHEx_Erase(&FlashSet, &PageError) != HAL_OK)
    {
        printf("Error: Failed to erase FLASH. PageError: %dn", PageError);
        HAL_FLASH_Lock();
        return;
    }
    printf("FLASH Page %u erased successfully.n", Page);

    // 3/4 將數(shù)據(jù)寫入指定地址
    for (i = 0; i < L; i++)
    {
        if (HAL_FLASH_Program(TYPEPROGRAM_DOUBLEWORD, addr + 8 * i, Data[i]) != HAL_OK)
        {
            printf("Error: FLASH program failed at address 0x%08X.n", addr + 8 * i);
            HAL_FLASH_Lock();
            return;
        }
    }
    printf("FLASH programming completed successfully.n");

    // 4/4 鎖住 FLASH
    HAL_FLASH_Lock();
}


/* FLASH 讀取并打印程序 */
void PrintFlashTest(uint32_t L, uint32_t addr)
{
    uint32_t i = 0;
    uint64_t data = 0;

    printf("Reading FLASH data from address 0x%08X:n", addr);

    for (i = 0; i < L; i++)
    {
        data = *(__IO uint64_t *)(addr + i * 8); // 按 64 位讀取數(shù)據(jù)
                printf("Address: 0x%08X, Data: 0x%016llXn", addr + i * 8, data);

    }

    printf("FLASH read completed.n");
}
/* USER CODE END 4 */

測試 FLASH 寫入和讀取功能,分為兩次寫入操作,并在每次寫入后進行驗證。 ● 兩次寫入操作,分別測試不同數(shù)據(jù)的寫入和讀取。 ● 驗證寫入是否正確,通過讀取打印結(jié)果進行比對。

/* USER CODE BEGIN 2 */
    printf("=== First Write and Read ===n");
    WriteFlashTest(3,WriteFlashData,Page,addr);
    PrintFlashTest(3,addr);//WriteFlashData[3] = {0x1111222233334444,0x5555666677778888,0x9999AAAABBBBCCCC};//數(shù)據(jù)
    printf("n=== Modify Data and Rewrite ===n");
    WriteFlashData[0]=0x9999;
    WriteFlashData[1]=0x8888;
    WriteFlashData[2]=0x7777;
    WriteFlashTest(3,WriteFlashData,Page,addr);
    PrintFlashTest(3,addr);
  /* USER CODE END 2 */

演示

測試結(jié)果如下所示。

第一次寫入。

第二次寫入。

STM32CubeProgrammer讀取。

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

    關注

    5

    文章

    287

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    STM32C011的芯片不能被IAR識別到,為什么?

    目前我在使用IAR8.5做開發(fā),但是發(fā)現(xiàn)STM32C011的芯片不能被IAR識別到,顯示的沒有這顆芯片,目前除了升級IAR版本來兼容這顆芯片外還有別的方法嗎?
    發(fā)表于 05-24 07:03

    采用cubemx將stm32c011的NRST引腳配置成ADC口,輸入一拉低就復位怎么解決?

    采用cubemx將stm32c011的NRST引腳配置成ADC口,生成程序,輸入為高時候可以正常采樣,但是輸入一拉低就復位,配置有什么需要注意的嗎?
    發(fā)表于 03-07 08:06

    轉(zhuǎn):STM32L011x/021x啟動模式注意事項

    前言針對客戶在STM32L011D4P6應用開發(fā)過程中,碰到的啟動模式問題進行了分析。并且根據(jù)問題,介紹開發(fā)工具、燒錄工具中如何配置以避免影響。一 問題描述發(fā)現(xiàn)盡管已經(jīng)為Boot0引腳提供了低電平
    發(fā)表于 08-30 16:01

    stm32 HAL庫Flash該如何去操作

    stm32f1xx_hal_flash.cstm32f1xx_hal_flash_ex.c代碼實例目錄stm32的hal庫確實提供有關flash操作代碼庫,,但是我們在
    發(fā)表于 08-19 06:26

    STM32 Flash操作介紹

    記錄一下,方便以后翻閱~主要內(nèi)容:1)STM32 Flash操作介紹;2)寄存器和庫函數(shù)介紹;3)相關實驗代碼解讀。參考資料:《STM32F
    發(fā)表于 08-20 07:23

    使用stm32f030c8t6進行flash操作報錯這是為什么

    47.1 引言本次開發(fā)中遇到一個問題,就是使用stm32f030c8t6的時候,要進行寫flash操作,調(diào)用FLASH_ProgramHal
    發(fā)表于 01-17 07:34

    使用STM32C0輕松實現(xiàn)從8bit到32bit的平臺升級

    內(nèi)容包含:STM32C011 / C031 結(jié)構(gòu)框圖、DMA、CRC較CheckSum更能提高系統(tǒng)數(shù)據(jù)的可靠性等內(nèi)容。
    發(fā)表于 09-05 07:30

    STM32學習心得三十三:FLASH閃存編程原理與實驗

    記錄一下,方便以后翻閱~主要內(nèi)容:1) STM32 Flash操作介紹;2) 寄存器和庫函數(shù)介紹;3) 相關實驗代碼解讀。參考資料:《STM3
    發(fā)表于 11-26 17:51 ?27次下載
    <b class='flag-5'>STM32</b>學習心得三十三:<b class='flag-5'>FLASH</b>閃存編程原理與實驗

    STM32單片機-操作訪問內(nèi)部Flash

    目錄:1、STM32 FLASH操作流程2、Flash基本知識點3、OK,上干貨,上代
    發(fā)表于 11-26 18:21 ?7次下載
    <b class='flag-5'>STM32</b>單片機-<b class='flag-5'>操作</b>訪問內(nèi)部<b class='flag-5'>Flash</b>

    STM32F103:內(nèi)部Flash的讀寫

    64-128KB(STM32F10X_MD)3、大容量產(chǎn)品:Flash大小為256KB以上(STM32F10X_HD)2. ST庫函數(shù)ST庫中對Fl
    發(fā)表于 12-01 20:51 ?16次下載
    <b class='flag-5'>STM32</b>F103:內(nèi)部<b class='flag-5'>Flash</b>的讀寫

    STM32F1 使用easyflash操作片內(nèi)flash

    STM32F1 使用easyflash操作片內(nèi)flash
    發(fā)表于 12-09 10:06 ?15次下載
    <b class='flag-5'>STM32</b>F1 使用easyflash<b class='flag-5'>操作</b>片內(nèi)<b class='flag-5'>flash</b>

    DS11100_STM32L011x3, STM32L011x4單片機數(shù)據(jù)手冊

    DS11100_STM32L011x3, STM32L011x4單片機數(shù)據(jù)手冊
    發(fā)表于 11-23 08:40 ?3次下載
    DS11100_<b class='flag-5'>STM32L011x3</b>, <b class='flag-5'>STM32L011</b>x4單片機數(shù)據(jù)手冊

    MHMF011L1C3-操作手冊 - PANATERM Ver6.0 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF011L1C3-操作手冊 - PANATERM Ver6.0相關產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有MHMF011L1C3-操作
    發(fā)表于 06-11 19:25
    MHMF<b class='flag-5'>011L1C3</b>-<b class='flag-5'>操作</b>手冊 - PANATERM Ver6.0 松下

    STM32C011開發(fā)(1)----開發(fā)板測試

    STM32C011F4P6-TSSOP20 評估套件可以使用戶能夠無縫評估 STM32C0 系列TSSOP20 封裝的微控制器功能,基于 ARM Cortex-M0 內(nèi)核,具有高效能和低功耗的特點
    的頭像 發(fā)表于 12-16 17:14 ?2367次閱讀
    <b class='flag-5'>STM32C011</b><b class='flag-5'>開發(fā)</b>(1)----<b class='flag-5'>開發(fā)</b>板測試

    STM32C011開發(fā)(2)----nBOOT_SEL設置

    程序接口(UART、USB DFU、I2C、SPI和CAN)讀取、寫入及驗證器件內(nèi)存。 STM32CubeProgrammer的功能廣泛,可以對STM32內(nèi)部存儲器(如Flash、R
    的頭像 發(fā)表于 12-16 17:27 ?3096次閱讀
    <b class='flag-5'>STM32C011</b><b class='flag-5'>開發(fā)</b>(2)----nBOOT_SEL設置