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

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

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

STM32F1_ 片內(nèi)FLASH編程

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

前言

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

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

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

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

下載

今天提供下載的“軟件工程”都是在硬件板子上進(jìn)行多次測(cè)試、并保證沒(méi)問(wèn)題才上傳至360云盤(pán)。

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

https://yunpan.cn/cSFA6h6kwu5jb訪問(wèn)密碼 bc34

STM32F10x的資料可以在我360云盤(pán)下載:

https://yunpan.cn/crBUdUGdYKam2訪問(wèn)密碼 ca90

內(nèi)容講解

工程概要說(shuō)明: 提供工程的源代碼主要就是兩個(gè)接口,一個(gè)寫(xiě),一個(gè)讀。

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ī)則還是算比較人性化的),就是和常見(jiàn)的訪問(wèn)外部FLASH一樣,不會(huì)覆蓋數(shù)據(jù),我已經(jīng)在實(shí)際工作中應(yīng)用而且商業(yè)化了。

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

提供的工程以簡(jiǎn)單為原則,詳細(xì)中文注釋,方便自己方便大家。

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

一、寫(xiě)函數(shù)接口


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

注意:

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

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

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

二、讀函數(shù)接口


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

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

三、讀寫(xiě)應(yīng)用


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

藍(lán)色表示讀寫(xiě)標(biāo)志位

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

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

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

四、今天的重點(diǎn)


重點(diǎn)A.頁(yè)的大小:STM32F1小、中容量是1K,而大容量是2K,對(duì)于編程這里是有差異的。

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

說(shuō)明

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎ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

    文章

    1635

    瀏覽量

    148032
  • STM32F103
    +關(guān)注

    關(guān)注

    33

    文章

    477

    瀏覽量

    63661
  • STM32F10
    +關(guān)注

    關(guān)注

    0

    文章

    45

    瀏覽量

    15629
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    STM32關(guān)于FLASH編程對(duì)齊錯(cuò)誤標(biāo)志位(PGAERR)的疑問(wèn)求解

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

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

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

    GD32的FLASH讀、擦除、寫(xiě)操作

    )的GD32F10x_CL和GD32F10x_XD,使用了兩閃存;前512KB容量在第一閃存(bank0)中,后續(xù)的容量在第二閃存(b
    的頭像 發(fā)表于 02-19 12:46 ?4303次閱讀
    GD32的<b class='flag-5'>FLASH</b>讀、擦除、寫(xiě)操作

    請(qǐng)問(wèn)內(nèi)flash一般能擦寫(xiě)多少次?

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

    STM32無(wú)法進(jìn)入上Bootloader的處理方法

    STM32無(wú)法進(jìn)入上Bootloader的處理方法? 當(dāng)STM32芯片無(wú)法進(jìn)入上Bootloader時(shí),我們需要采取一系列的處理方法來(lái)解決這個(gè)問(wèn)題。以下將詳細(xì)介紹一些常見(jiàn)的處理方法
    的頭像 發(fā)表于 02-02 14:33 ?2085次閱讀

    stm32 flash寫(xiě)數(shù)據(jù)怎么存儲(chǔ)的

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

    stm32f103 flash模擬eeprom

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

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

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