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

    文章

    1549

    浏览量

    146637
  • STM32F103
    +关注

    关注

    33

    文章

    474

    浏览量

    62569
  • STM32F10
    +关注

    关注

    0

    文章

    43

    浏览量

    15520
收藏 人收藏

    评论

    相关推荐

    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

    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 flash写数据怎么存储的

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

    PM0075编程手册

    件的其余部分中,这些将被称为STM32F10xxx,除非另有规定。 STM32F10xxx嵌入式闪存可以使用电路编程编程或应用程序
    发表于 10-10 08:25

    STM32F2上闪存介绍

    上闪存特性和系统框图  存储空间组织架构  用户闪存  系统闪存  OTP  选项字节  闪存读接口  等待周期  指令预取  指令高速缓存  数据高速缓存  擦除和编程操作  读保护和写保护  STM32F
    发表于 09-13 07:10

    STM32F7x6系统架构_FLASH_RCC和PWR

    STM32 F7 概述• STM32总线架构和存储器映射• 总线架构• 存储器映射• Cache• STM32F7性能• Boot模式•
    发表于 09-11 08:29

    请问外挂FLASHFLASH只能二选一吗?

    1、使用STM32F4XX,FLASH大小为1M,然后外挂一W25Q128的
    发表于 09-08 17:44

    ICP可以将代码下载到的SPI Flash中?

    1. IAR 调试NUC505时,感觉代码是在 SRAM中运行,那么IAR如何将代码下载到的 SPI Flash中? 2. ICP 可以将 代码下载到
    发表于 06-16 08:18

    F103的FLASH不能用DFS?

    Flash上的应用,是不支持FLASH?不支持的话我想非阻塞的接收socket数据就不能用select了?那我应该用什么方式呢?多谢各位了。。。
    发表于 05-11 11:16