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

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

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

STM32F1_ 片內(nèi)FLASH編程

黃工的嵌入式技術(shù)圈 ? 來源:黃工的嵌入式技術(shù)圈 ? 2020-04-08 10:28 ? 次閱讀

前言

今天總結(jié)“STM32F103片內(nèi)FLASH編程”,對于學(xué)習(xí)編程的人來說“FLASH”這個詞肯定很熟悉,因為FLASH主要用于存儲數(shù)據(jù)。對于STM32來說,內(nèi)部FLASH的容量有大有小,從16K到2M不等,主要看芯片的型號。

對于剛從51或者430轉(zhuǎn)入學(xué)習(xí)ARM-Cortex M芯片的人來說,可能只知道內(nèi)部FLASH是拿來裝載程序的,事實上Cortex M芯片內(nèi)部FLASH的可以拿來編程的,而且還可以像外部FLASH一樣存儲數(shù)據(jù)。對,今天提供的工程就是使用內(nèi)部FLASH像外部FLASH一樣讀寫數(shù)據(jù),而且不是塊或者頁編程(即不覆蓋臨近地址數(shù)據(jù))。

在實際的開發(fā)中,內(nèi)部FLASH存儲數(shù)據(jù)也是很重要的一點,特別是一些不常修改,而且很重要的標志位,或者一些配置等,存儲在內(nèi)部FLASH是很常見的。但是,這個地址一定要避開程序儲存的地址(我計劃后期整理編程地址規(guī)范及要求)。

每天總結(jié)的不僅僅是基礎(chǔ),而是重點,不起眼的重點,容易被人忽視的重點。關(guān)注微信公眾號“EmbeddDeveloper”還有更多精彩等著你。

下載

今天提供下載的“軟件工程”都是在硬件板子上進行多次測試、并保證沒問題才上傳至360云盤。

今天的軟件工程下載地址(360云盤):

https://yunpan.cn/cSFA6h6kwu5jb訪問密碼 bc34

STM32F10x的資料可以在我360云盤下載:

https://yunpan.cn/crBUdUGdYKam2訪問密碼 ca90

內(nèi)容講解

工程概要說明: 提供工程的源代碼主要就是兩個接口,一個寫,一個讀。

void FLASH_WriteNWord(uint16_t* pBuffer, uint32_t WriteAddr, uint16_t nWord);

void FLASH_ReadNWord(uint16_t* pBuffer, uint32_t ReadAddr, uint16_t nWord);

相信經(jīng)常編程的人都明白函數(shù)接口的意思(我的命名規(guī)則還是算比較人性化的),就是和常見的訪問外部FLASH一樣,不會覆蓋數(shù)據(jù),我已經(jīng)在實際工作中應(yīng)用而且商業(yè)化了。

主要在地址“ADDR”處寫一個標志位,在地址“ADDR + 1”連續(xù)寫一串?dāng)?shù)據(jù)。如果標志位已經(jīng)是“寫過”,則不會再次寫入數(shù)據(jù),只會讀取數(shù)據(jù),意思就是說數(shù)據(jù)只寫一次,以后每次只是讀取數(shù)據(jù)(就是保證掉電后數(shù)據(jù)會不會丟失)。每次讀取數(shù)據(jù),通過串口打印出以前寫入的數(shù)據(jù)是否正確。

提供的工程以簡單為原則,詳細中文注釋,方便自己方便大家。

關(guān)于“STM32F103 片內(nèi)FLASH編程”我把重要的幾點在下面分別講述:

一、寫函數(shù)接口


該函數(shù)位于flash.c文件下面;

注意:

A.參數(shù)pBuffer是數(shù)據(jù)緩沖區(qū),是16位的,而不是8位的。(其實這里可以整理為8位的,由于時間有限,如果有需要,請微信里回復(fù)我,我抽時間整理一下)。

B.參數(shù)長度也是16位的數(shù)量。

C.地址是內(nèi)部FLASH地址,可別溢出了,也別和程序沖突。最好看看你的程序大小及芯片容量。

二、讀函數(shù)接口


該函數(shù)位于flash.c文件下面;

注意的地方和上面寫函數(shù)接口一樣,主要是參數(shù)。

三、讀寫應(yīng)用


該函數(shù)位于main.c文件下面;

藍色表示讀寫標志位

紅色表示讀寫數(shù)據(jù)

看一下就知道程序的流程是:“數(shù)據(jù)標志位”和“數(shù)據(jù)”都只寫一次,而每次上電讀一次標志位,再讀數(shù)據(jù)。

這里的“數(shù)據(jù)標志位”地址就在“數(shù)據(jù)”前面。

四、今天的重點


重點A.頁的大?。篠TM32F1小、中容量是1K,而大容量是2K,對于編程這里是有差異的。

重點B.STM32系列芯片中有很大一部分頁的大小都是規(guī)則的,也就是說都是1K或許2K大小,學(xué)過其他系列芯片的人可能知道,在其他很多芯片中也有不是規(guī)則的,如STM32F4中基本都不是規(guī)則的(如下圖F4芯片),有的一塊16K、128K等不規(guī)則。這樣的芯片對于今天提供的工程就不適用,今天提供工程適用于內(nèi)部FLASH規(guī)則大小的芯片。

說明

今天提供的軟件工程基于STM32F103大容量芯片,中等及小容量芯片也使用,只要修改flash.h文件一個宏(頁大小就可以)。其實只要適當(dāng)修改工程的部分配置,STM32F1的芯片都適用。

聲明:本文內(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

    文章

    1614

    瀏覽量

    147655
  • STM32F103
    +關(guān)注

    關(guān)注

    33

    文章

    475

    瀏覽量

    63416
  • STM32F10
    +關(guān)注

    關(guān)注

    0

    文章

    45

    瀏覽量

    15603
收藏 人收藏

    評論

    相關(guān)推薦

    【GD32F303紅楓派開發(fā)板使用手冊】第五講 FMC-內(nèi)Flash擦寫讀實驗

    MC即Flash控制器,其提供了Flash操作所需要的所有功能,在GD32F303系列MCU中,Flash前256K字節(jié)空間內(nèi),?CPU
    的頭像 發(fā)表于 06-02 10:05 ?675次閱讀
    【GD32<b class='flag-5'>F</b>303紅楓派開發(fā)板使用手冊】第五講 FMC-<b class='flag-5'>片</b><b class='flag-5'>內(nèi)</b><b class='flag-5'>Flash</b>擦寫讀實驗

    STM32F207擦除內(nèi)FLASH,退出DEBUG無法執(zhí)行下一步程序是怎么回事?

    由于項目需求,需要擦除內(nèi)指定空間,然后從SPI_FLASH中加載程序運行 問題如下:: 在DEBUG模式下,執(zhí)行擦除程序后,則退出DEBUG,無法執(zhí)行下一步程序 擦除代碼如下: 1
    發(fā)表于 04-23 07:46

    STM32H750內(nèi)flash對同一flash地址做二次修改出錯是哪里的問題?

    各位大佬好,又是我,是的,我在H750的flash里游不出去了…… 下面詳細介紹我的使用方法和出現(xiàn)的問題: 我在程序里面擬定在內(nèi)flash地址0x08001000~0x080010
    發(fā)表于 04-23 06:16

    stm32f207內(nèi)flash的前114個字節(jié)莫名其妙的變成了0x00的原因?

    stm32f207內(nèi)flash的前114個字節(jié)莫名其妙的變成了0x00,這是什么問題??會有哪些原因呢?沒有對0x8000000 開始的地址操作,因為這段地址是放應(yīng)用程序的。
    發(fā)表于 04-22 07:00

    【GD32H757Z海棠派開發(fā)板使用手冊】第四講 FMC-內(nèi)Flash擦寫讀實驗

    FMC即Flash控制器,其提供了Flash操作所需要的所有功能,在GD32H7XX系列MCU中,具有高達3840KB字節(jié)的上閃存可用于存儲指令或數(shù)據(jù)。FMC也提供了扇區(qū)擦除和整
    的頭像 發(fā)表于 04-19 10:09 ?1140次閱讀
    【GD32H757Z海棠派開發(fā)板使用手冊】第四講 FMC-<b class='flag-5'>片</b><b class='flag-5'>內(nèi)</b><b class='flag-5'>Flash</b>擦寫讀實驗

    STM32F746 QSPI的Flash擴展后,添加到工程下載發(fā)現(xiàn)報錯,為什么?

    使用 W25Q128 模塊 ,使用的是微雪STM32F746IGT6的開發(fā)板,在QSPI進行Flash擴展了解發(fā)現(xiàn)需要做一個.FLM的Flash編程算法,我找一個
    發(fā)表于 04-17 06:31

    stm32g030f6p6 flash快速編程總是失敗的原因?

    使用stm32g030f6p6 對flash快速編程時總是第一次可以正常的寫,第二次寫就失敗,失敗地方總在 HAL_FLASH_Program這條函數(shù),這個地方卡了好幾個星期了,現(xiàn)在請
    發(fā)表于 04-07 07:32

    STM32關(guān)于FLASH編程對齊錯誤標志位(PGAERR)的疑問求解

    大神們,我現(xiàn)在正在做一個應(yīng)用,需要熟悉STM32F4的FLASH的任何錯誤標識,以用于特殊情況下的錯誤標識判斷做相應(yīng)處理,但是針對FLASH編程對齊錯誤標志(PGAERR)與我理解不
    發(fā)表于 03-22 07:59

    通用bootloader選“支持spi flash”,無論設(shè)定download為內(nèi)還是flash啟動都找不到at45db161,為什么?

    通用bootloader不選“支持spi flash”,download放于內(nèi)flash,正常啟動,ota正常,app驅(qū)動at45db161讀寫正常。通用bootloader選“支持
    發(fā)表于 03-22 07:45

    請問內(nèi)flash一般能擦寫多少次?

    請問內(nèi)flash一般能擦寫多少次
    發(fā)表于 02-19 08:32

    STM32無法進入上Bootloader的處理方法

    STM32無法進入上Bootloader的處理方法? 當(dāng)STM32芯片無法進入上Bootloader時,我們需要采取一系列的處理方法來解決這個問題。以下將詳細介紹一些常見的處理方法
    的頭像 發(fā)表于 02-02 14:33 ?1869次閱讀

    stm32 flash寫數(shù)據(jù)怎么存儲的

    stm32 flash寫數(shù)據(jù)怎么存儲的? STM32是一款廣泛應(yīng)用于嵌入式系統(tǒng)開發(fā)的微控制器,它的Flash存儲器是其中一個重要的組成部分。在本文中,我將詳細介紹
    的頭像 發(fā)表于 01-31 15:46 ?2201次閱讀

    stm32f103 flash模擬eeprom

    STM32F103的Flash存儲器可以模擬EEPROM的功能,在本文中我們將詳細介紹如何使用STM32F103的Flash存儲器來實現(xiàn)EEPROM。 概述 EEPROM(Elect
    的頭像 發(fā)表于 01-09 11:21 ?1854次閱讀

    GD32F系列MCUFlash中Code區(qū)和Data區(qū)使用解密

    GD32F系列MCU產(chǎn)品Flash分Code區(qū)和Data區(qū),以GD32F303系列為例,從GD32F303xx Datasheet中可以
    的頭像 發(fā)表于 01-09 10:07 ?2531次閱讀
    GD32<b class='flag-5'>F</b>系列MCU<b class='flag-5'>片</b>上<b class='flag-5'>Flash</b>中Code區(qū)和Data區(qū)使用解密

    內(nèi)間非均勻性是什么?有什么作用呢?

    是普遍存在的,對光束的傳播和成像質(zhì)量都會產(chǎn)生重要的影響。本文將對內(nèi)間非均勻性進行詳盡、詳實、細致的解釋,并闡明其作用。 首先,我們來分析內(nèi)
    的頭像 發(fā)表于 12-19 11:48 ?581次閱讀