0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32F1_ 片内FLASH编程

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-04-08 10:28 次阅读

前言

今天总结“STM32F103片内FLASH编程”,对于学习编程的人来说“FLASH”这个词肯定很熟悉,因为FLASH主要用于存储数据。对于STM32来说,内部FLASH的容量有大有小,从16K到2M不等,主要看芯片的型号。

对于刚从51或者430转入学习ARM-Cortex M芯片的人来说,可能只知道内部FLASH是拿来装载程序的,事实上Cortex M芯片内部FLASH的可以拿来编程的,而且还可以像外部FLASH一样存储数据。对,今天提供的工程就是使用内部FLASH像外部FLASH一样读写数据,而且不是块或者页编程(即不覆盖临近地址数据)。

在实际的开发中,内部FLASH存储数据也是很重要的一点,特别是一些不常修改,而且很重要的标志位,或者一些配置等,存储在内部FLASH是很常见的。但是,这个地址一定要避开程序储存的地址(我计划后期整理编程地址规范及要求)。

每天总结的不仅仅是基础,而是重点,不起眼的重点,容易被人忽视的重点。关注微信公众号“EmbeddDeveloper”还有更多精彩等着你。

下载

今天提供下载的“软件工程”都是在硬件板子上进行多次测试、并保证没问题才上传至360云盘。

今天的软件工程下载地址(360云盘):

https://yunpan.cn/cSFA6h6kwu5jb访问密码 bc34

STM32F10x的资料可以在我360云盘下载:

https://yunpan.cn/crBUdUGdYKam2访问密码 ca90

内容讲解

工程概要说明: 提供工程的源代码主要就是两个接口,一个写,一个读。

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

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

相信经常编程的人都明白函数接口的意思(我的命名规则还是算比较人性化的),就是和常见的访问外部FLASH一样,不会覆盖数据,我已经在实际工作中应用而且商业化了。

主要在地址“ADDR”处写一个标志位,在地址“ADDR + 1”连续写一串数据。如果标志位已经是“写过”,则不会再次写入数据,只会读取数据,意思就是说数据只写一次,以后每次只是读取数据(就是保证掉电后数据会不会丢失)。每次读取数据,通过串口打印出以前写入的数据是否正确。

提供的工程以简单为原则,详细中文注释,方便自己方便大家。

关于“STM32F103 片内FLASH编程”我把重要的几点在下面分别讲述:

一、写函数接口


该函数位于flash.c文件下面;

注意:

A.参数pBuffer是数据缓冲区,是16位的,而不是8位的。(其实这里可以整理为8位的,由于时间有限,如果有需要,请微信里回复我,我抽时间整理一下)。

B.参数长度也是16位的数量。

C.地址是内部FLASH地址,可别溢出了,也别和程序冲突。最好看看你的程序大小及芯片容量。

二、读函数接口


该函数位于flash.c文件下面;

注意的地方和上面写函数接口一样,主要是参数。

三、读写应用


该函数位于main.c文件下面;

蓝色表示读写标志位

红色表示读写数据

看一下就知道程序的流程是:“数据标志位”和“数据”都只写一次,而每次上电读一次标志位,再读数据。

这里的“数据标志位”地址就在“数据”前面。

四、今天的重点


重点A.页的大小:STM32F1小、中容量是1K,而大容量是2K,对于编程这里是有差异的。

重点B.STM32系列芯片中有很大一部分页的大小都是规则的,也就是说都是1K或许2K大小,学过其他系列芯片的人可能知道,在其他很多芯片中也有不是规则的,如STM32F4中基本都不是规则的(如下图F4芯片),有的一块16K、128K等不规则。这样的芯片对于今天提供的工程就不适用,今天提供工程适用于内部FLASH规则大小的芯片。

说明

今天提供的软件工程基于STM32F103大容量芯片,中等及小容量芯片也使用,只要修改flash.h文件一个宏(页大小就可以)。其实只要适当修改工程的部分配置,STM32F1的芯片都适用。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FlaSh
    +关注

    关注

    10

    文章

    1635

    浏览量

    148021
  • STM32F103
    +关注

    关注

    33

    文章

    477

    浏览量

    63654
  • STM32F10
    +关注

    关注

    0

    文章

    45

    浏览量

    15629
收藏 人收藏

    评论

    相关推荐

    自制一款兼容STM32F1/F4芯片的飞控板

    自己制作的一款兼容STM32F1/F4芯片的飞控板。
    发表于 07-04 14:07 0次下载

    【GD32F303红枫派开发板使用手册】第五讲 FMC-Flash擦写读实验

    MC即Flash控制器,其提供了Flash操作所需要的所有功能,在GD32F303系列MCU中,Flash前256K字节空间内, CPU
    的头像 发表于 06-02 10:05 787次阅读
    【GD32<b class='flag-5'>F</b>303红枫派开发板使用手册】第五讲 FMC-<b class='flag-5'>片</b><b class='flag-5'>内</b><b class='flag-5'>Flash</b>擦写读实验

    STM32F207擦除FLASH,退出DEBUG无法执行下一步程序是怎么回事?

    由于项目需求,需要擦除指定空间,然后从SPI_FLASH中加载程序运行 问题如下:: 在DEBUG模式下,执行擦除程序后,则退出DEBUG,无法执行下一步程序 擦除代码如下: 1
    发表于 04-23 07:46

    STM32H750flash对同一flash地址做二次修改出错是哪里的问题?

    各位大佬好,又是我,是的,我在H750的flash里游不出去了…… 下面详细介绍我的使用方法和出现的问题: 我在程序里面拟定在flash地址0x08001000~0x080010
    发表于 04-23 06:16

    stm32f207flash的前114个字节莫名其妙的变成了0x00的原因?

    stm32f207flash的前114个字节莫名其妙的变成了0x00,这是什么问题??会有哪些原因呢?没有对0x8000000 开始的地址操作,因为这段地址是放应用程序的。
    发表于 04-22 07:00

    【GD32H757Z海棠派开发板使用手册】第四讲 FMC-Flash擦写读实验

    FMC即Flash控制器,其提供了Flash操作所需要的所有功能,在GD32H7XX系列MCU中,具有高达3840KB字节的上闪存可用于存储指令或数据。FMC也提供了扇区擦除和整
    的头像 发表于 04-19 10:09 1278次阅读
    【GD32H757Z海棠派开发板使用手册】第四讲 FMC-<b class='flag-5'>片</b><b class='flag-5'>内</b><b class='flag-5'>Flash</b>擦写读实验

    STM32F746 QSPI的Flash扩展后,添加到工程下载发现报错,为什么?

    使用 W25Q128 模块 ,使用的是微雪STM32F746IGT6的开发板,在QSPI进行Flash扩展了解发现需要做一个.FLM的Flash编程算法,我找一个
    发表于 04-17 06:31

    stm32g030f6p6 flash快速编程总是失败的原因?

    使用stm32g030f6p6 对flash快速编程时总是第一次可以正常的写,第二次写就失败,失败地方总在 HAL_FLASH_Program这条函数,这个地方卡了好几个星期了,现在请
    发表于 04-07 07:32

    STM32关于FLASH编程对齐错误标志位(PGAERR)的疑问求解

    大神们,我现在正在做一个应用,需要熟悉STM32F4的FLASH的任何错误标识,以用于特殊情况下的错误标识判断做相应处理,但是针对FLASH编程对齐错误标志(PGAERR)与我理解不
    发表于 03-22 07:59

    通用bootloader选“支持spi flash”,无论设定download为还是flash启动都找不到at45db161,为什么?

    通用bootloader不选“支持spi flash”,download放于flash,正常启动,ota正常,app驱动at45db161读写正常。通用bootloader选“支持
    发表于 03-22 07:45

    请问flash一般能擦写多少次?

    请问flash一般能擦写多少次
    发表于 02-19 08:32

    STM32无法进入上Bootloader的处理方法

    STM32无法进入上Bootloader的处理方法  当STM32芯片无法进入上Bootloader时,我们需要采取一系列的处理方法来解决这个问题。以下将详细介绍一些常见的处理方法
    的头像 发表于 02-02 14:33 2085次阅读

    stm32 flash写数据怎么存储的

    stm32 flash写数据怎么存储的  STM32是一款广泛应用于嵌入式系统开发的微控制器,它的Flash存储器是其中一个重要的组成部分。在本文中,我将详细介绍
    的头像 发表于 01-31 15:46 2401次阅读

    stm32f103 flash模拟eeprom

    STM32F103的Flash存储器可以模拟EEPROM的功能,在本文中我们将详细介绍如何使用STM32F103的Flash存储器来实现EEPROM。 概述 EEPROM(Elect
    的头像 发表于 01-09 11:21 2037次阅读

    GD32F系列MCUFlash中Code区和Data区使用解密

    GD32F系列MCU产品Flash分Code区和Data区,以GD32F303系列为例,从GD32F303xx Datasheet中可以
    的头像 发表于 01-09 10:07 2785次阅读
    GD32<b class='flag-5'>F</b>系列MCU<b class='flag-5'>片</b>上<b class='flag-5'>Flash</b>中Code区和Data区使用解密