STM32 FLASH操作

STM32操作FLASH 包含 STM32F4 系列的 HAL 库头文件。和:定义了要操作的 Flash 扇区的起始和结束地址。 阅读详情
AI摘要

本文介绍了STM32F10XXX系列微控制器的Flash编程,详细阐述了如何按照参考手册进行主Flash编程,强调每次可写入16位数据,并且在编程过程中必须注意总线错误和CPU暂停。此外,还分享了一个基于正点原子例程的写入Flash函数,该函数通过数组逐个将半字数据写入指定Flash地址,确保不跨越页区。

1.stm32f10xxx闪存编程参考手册写的很详细。

2.主闪存编程:

对主闪存编程每次可以写入16位。当FLASH_CR寄存器的PG位为’1’时,在一个闪存地址写入一个半字将启动一次编程;写入任何非半字的数据,FPEC都会产生总线错误。在编程过程中(BSY位为’1’),任何读写闪存的操作都会使CPU暂停,直到此次闪存编程结束。

这里写图片描述

3.

这里写图片描述

这里写图片描述

4. 写入flash函数

代码正点原子例程。
用一个数组u16(半字)存放数据,然后在解锁的情况下,一个一个的复制到被写入的flash地址中去。
这里没有跨越页区。

这里写图片描述

//从指定地址开始写入指定长度的数据
//WriteAddr:起始地址(此地址必须为2的倍数!!)
//pBuffer:数据指针
//NumToWrite:半字(16位)数(就是要写入的16位数据的个数.)
#if STM32_FLASH_SIZE<256
#define STM_SECTOR_SIZE 1024 //字节
#else 
#define STM_SECTOR_SIZE 2048
#endif       
u16 STMFLASH_BUF[STM_SECTOR_SIZE/2];//最多是2K字节
void STMFLASH_Write(u32 WriteAddr,u16 * pBuffer,u16 NumToWrite) 
{
    u32 secpos;    //扇区地址
    u16 secoff;    //扇区内偏移地址(16位字计算)
    u16 secremain; //扇区内剩余地址(16位字计算)       
    u16 i;    
    u32 offaddr;   //去掉0X08000000后的地址

    if(WriteAddr<STM32_FLASH_BASE||(WriteAddr>=(STM32_FLASH_BASE+1024*STM32_FLASH_SIZE)))return;//非法地址

    FLASH_Unlock();                     //解锁

    offaddr=WriteAddr-STM32_FLASH_BASE;     //实际偏移地址.
    secpos= offaddr / STM_SECTOR_SIZE;          //扇区地址  0~127 for STM32F103RBT6
    secoff=(offaddr % STM_SECTOR_SIZE)/2;       //在扇区内的偏移(2个字节为基本单位.)
    secremain=STM_SECTOR_SIZE/2-secoff;     //扇区剩余空间大小        
    if(NumToWrite<=secremain)secremain=NumToWrite;//不大于该扇区范围
    //为后面的循环写入提供方便,第92行的判断

    while(1) 
    {   
        STMFLASH_Read(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE,STMFLASH_BUF,STM_SECTOR_SIZE/2);//读出整个扇区的内容
        for(i=0;i<secremain;i++)//校验数据
        {
            if(STMFLASH_BUF[secoff+i]!=0XFFFF)break;//需要擦除        
        }
        if(i<secremain)//需要擦除
        {
            FLASH_ErasePage(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE);//擦除这个扇区
            for(i=0;i<secremain;i++)//复制
            {
                STMFLASH_BUF[i+secoff]=pBuffer[i];    
            }
            STMFLASH_Write_NoCheck(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE,STMFLASH_BUF,STM_SECTOR_SIZE/2);//写入整个扇区  
        }else STMFLASH_Write_NoCheck(WriteAddr,pBuffer,secremain);//写已经擦除了的,直接写入扇区剩余区间.                    
        if(NumToWrite==secremain)break;//写入结束了
        else//写入未结束
        {
            secpos++;               //扇区地址增1
            secoff=0;               //偏移位置为0     
            pBuffer+=secremain;     //指针偏移
            WriteAddr+=secremain;   //写地址偏移    
            NumToWrite-=secremain;  //字节(16位)数递减
            if(NumToWrite>(STM_SECTOR_SIZE/2))secremain=STM_SECTOR_SIZE/2;//下一个扇区还是写不完
            else secremain=NumToWrite;//下一个扇区可以写完了
        }    
    };  
    FLASH_Lock();//上锁
}    
#endif

5# 速度匹配问题

这里写图片描述

STM32CUBEMX | STM32L431RCT6的内部Flash操作 一、STM32CUBEMX配置 1、选择芯片型号: 2、配置时钟源 1、 如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC; 2、 如果使用默认内部时钟(HSI),这一步可以略过; 3、配置时钟树 STM32L4的最高主频到80M,所以配置PLL,最后使HCLK = 80Mhz即可: 4、代码生成设置 点击GENERATE CODE即可生成MDK-V5工程: 二、在MDK中编写、编译、下载用户代码 1、STM32内部Flash及HAL库API 查看所使用芯片的信息, 阅读详情

相关推荐

stm32g070 Flash HAL读写操作

1、G0系列的Flash是需要64位(8字节)写入的,不支持单字(32位)和半字(16位)写入。2、全系统每页Flash都是2kb大小。3、擦除flash只有2种方法:1是页擦除;2是全部擦除。4、flash的擦除和写入 都需要先解除flash锁,操作完就需要上锁。不上锁可能导致flash数据不安全!5、flash读取不分数据形式的,可以是1字节,也可以是2字节、4字节或者8字节形式。后续:后续在写如何进行STM32G070 在线升级IAP的教程!!!

yuhu0012的博客 4500

python中dbscan和kmeans_基于密度聚类的DBSCAN和kmeans算法比较

根据各行业特性,人们提出了多种聚类算法,简单分为:基于层次、划分、密度、图论、网格和模型的几大类。其中,基于密度的聚类算法以DBSCAN最具有代表性。场景 一假设有如下图的一组数据, 生成数据的R代码如下x1 y1x2y2datanames(data)qplot(data$x, data$y)用密度聚类DBSCAN方法,可以看到聚类效果如下:library(ggplot2)plibrary('fp...

weixin_39853523的博客 865

STM32 HAL库的基本flash操作

文章部分内容来源网络,有问题请留言,谢谢。 读操作 读flash,直接用指针操作即可,但注意这里stm32是32位系统,所以读一次是半个字,也就是2个字节,写也是一样的; uint16_t FLASH_ReadHalfWord(uint32_t faddr) { return *(__IO uint16_t*)faddr; } //从指定地址开始读出指定长度的数据 //ReadAddr:起始地...

flikyly的博客 6313

stm32F407使用spi操作Flash2(使用SPI擦除Flash扇区数据)

扇区擦除

weixin_51736231的博客 1800

STM32 Flash操作实践指南

STM32微控制器的Flash存储器是一种非易失性存储器,用于永久存储程序代码和数据。在嵌入式系统中,Flash的可靠性与效率对于系统的稳定运行至关重要。Flash存储器设计用来支持频繁的编程和擦除操作,适用于代码更新和数据记录等场景。假设有一个场景,需要将数据存储到STM32的Flash中,并且需要处理可能发生的错误。以下是针对这种情况的应用案例分析:初始化Flashc编程Flashc// 某个Flash地址// 要写入的数据// 根据错误类型进行错误处理。

weixin_31749299的博客 979

STM32 FLASH读写操作简易教程

STM32是由STMicroelectronics(意法半导体)开发的一系列32位ARM Cortex-M微控制器。它们提供各种资源,如内存、多种外设接口、高级模拟功能以及高效的计算和控制能力,广泛应用于工业控制、汽车电子、医疗设备、消费电子产品等领域。FLASH存储技术是当前非易失性存储器领域的一项核心技术,广泛应用于嵌入式系统、消费电子产品和固态硬盘等领域。与传统的RAM(随机存取存储器)和ROM(只读存储器)相比,FLASH具有功耗低、速度快、可擦写次数多等特点。

weixin_42348783的博客 894

STM32内部flash详解(1)

今天说一下STM32中的内部flash。当我们把写好的代码下载MCU中,这个代码时存放在flash中的。当芯片重启复位上电后,会通过内核对flash进行代码的加载运行。大致是这个过程。

南山府的博客 8210

WIFI中CSI的读取

学习目标: 目前正在做基于WIFI的无设备定位,准备使用信道状态信息(CSI),学习一下。 目前采集数据环境已经搭建好,准备研究信号的预处理。 学习内容: 1、 信号的读取——read_bf_file函数的研究 2、 3、 4、 1. read_bf_file详解: %READ_BF_FILE Reads in a file of beamforming feedback logs. % This version uses the *C* version of read_bfee, ...

sz3076799的博客 8892

STM32快速复制MX25L1606E系列Flash

生产部门表达了不满,我本想给他们解释原因,但后来想与其和一些不懂技术的人瞎争论、浪费时间,还不如想点实际的办法。2、擦除MX25L1606E上的相关块和扇区,比如:本程序一个扇区用于保存事先计算好的校验和及总的升级包长度,一个块用于存储实际的新的升级固件,一个块用于保存旧的在ROM中运行的程序。3、根据客户软件协议要求,RS485通信需要将一个字节拆分成两个字节进行传输,例如:如果要发送0xAB,则会拆分成0x3A和0x3B两个字节,接收处理程序再将这两个字节合并成0xAB,这无疑使数据的传输时间加倍;

jmmx的专栏 1510

将一维数据(序列)转化为二维数据(图像)的方法汇总GAFS, MTF, Recurrence plot,STFT

虽然深度学习方法(1D CNN, RNN, LSTM 等)可以直接处理一维数据,但是当前的深度学习方法主要还是处理二维结构数据的,特别是在计算机视觉CV以及自然语言处理NLP领域,各种各样的方法层出不穷。因此,如果能够将一维序列数据转化为二维(图像)数据, 则可以直接结合CV以及NLP领域的方法,是不是很有趣! GAF, GASF, GADF, MTF, Recurrence Plot, STFT, 短时傅里叶变换

MasterQKK 5万+

ESP32-S3开发板实战:5分钟搞定智能门铃的音视频通话功能(附源码)

本文详细介绍了如何利用乐鑫ESP32-S3开发板快速实现智能门铃的实时音视频通话功能。通过ESP-ADF框架和RTC服务,开发者可在五分钟内完成环境搭建与核心功能调试,并附有源码和关键配置详解,为嵌入式音视频应用开发提供了高效实践路径。

web99的专栏 527

STM32F103VET6利用片内FLASH虚拟U盘,使用文件复制方式实现IAP

在原子论坛偶尔搜到一篇 利用STM32片内FLASH虚拟U盘,使用文件复制方式实现IAP的帖子http://www.openedv.com/forum.php?mod=viewthread&amp;tid=39012&amp;extra=page%3D1  按照楼主提供的代码修改了一下发现不能用,仔细阅读相关zizi资料(《5 分钟用 STM32的内置 Flash 做一个超小 U 盘》)发现了我用...

芯创博客 9770

变压器耦合放大器(低频应用+高频应用)

变压器耦合放大器(低频应用+高频应用)

m0_54943120的博客 2274

stm32 HAL库 Flash操作简介

stm32 HAL库 Flash操作简介目录第一stm32,flash介绍查看代码段,以判断代码长度flash的基本操作规则stm32 HAL库 Flash操作指南stm32f1xx_hal_flash.cstm32f1xx_hal_flash_ex.c代码实例 目录 stm32的hal库确实提供有关flash的操作代码库,,但是我们在操作flash之前依旧需要对stm32的flash进行简单的介绍。 首先,stm32的flash读不限制次数,写大约100 0000次,也就是说一天对同一个地方写100次,你

qq_35502383的博客 1万+

【71页PPT】工业40及智能制造解决方案(附下载方式)

2013年,工业4.0平台发布白皮书,正式确立其发展战略。工业4.0不仅是技术的升级,更是制造业思维的重构。工业4.0的核心是通过信息物理系统(CPS)实现工厂内外的互联,构建高度灵活的个性化生产模式。它不仅是技术革新,更是一种生产方式的变革,使传统行业界限模糊化,催生新的商业模式和合作形式。德国作为制造业强国,其GDP的25%和出口总额的60%依赖制造业,因此工业4.0成为其维持全球领先地位的重要战略。CPS是工业4.0的基石,通过计算、通信与控制技术(3C)实现物理世界与信息世界的深度融合。

2501_92808811的博客 950

AFSim2.9.0学习笔记 —— 1、AFSim及完整工具介绍(文末附:完整afsim2.9.0源码、编译好的完整工具包、中文教材等)

AFSim2.9.0学习笔记 —— 1、AFSim及完整工具介绍(附:完整afsim2.9.0源码、编译好的完整工具包、中文教材等)

5172

stm32内部flash在线读写操作

stm32内部flash在线读写操作

perseverance51博客 1813

构建AI Agent驱动的智能健康管理系统

数据碎片化:健康数据分散在不同的设备和平台中,难以统一管理和分析。个性化不足:健康管理方案通常是通用的,难以根据个人的健康状况实时调整。用户参与度低:用户难以获得及时、个性化的健康建议,导致健康管理效果不佳。AI Agent是一个能够感知环境、采取行动以实现目标的智能实体。根据智能体的智能水平,可以分为简单反应式智能体和复杂适应式智能体。实时监测健康数据。获取个性化的健康建议。收到健康风险预警。

AI天才研究院 749

STM32 教程 – FLASH的读写操作

在STM32芯片内部有一个 FLASH 存储器,它主要用于存储代码,我们在电脑上编写好应用程序后,使用下载器把编译后的代码文件烧录到该内部 FLASH 中,由于 FLASH 存储器的内容在掉电后不会丢失,芯片重新上电复位后,内核可从内部 FLASH 中加载代码并运行。STM32 的内部 FLASH 包含主存储器、系统存储器以及选项字节区域,它们的地址分布及大小见下表以上就是利用Cube创建本次工程的步骤。在此次利用STM32读取flash内部操作实验中,我收获了许多宝贵的知识与技能。

gqiaos524的博客 4465

【SpringBoot 3.x 第57节】Spring Boot 3 启动快得不讲武德?揭秘 Spring AOT 编译引擎背后的真相!

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    本专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。    若还想学习更多,可直接前往《滚雪球学SpringBoot(全版本合集)》,涵盖SpringBoot所有版本教学文章

**My Coding Family** 1760

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

STM32中Flash的操作

STM32中Flash的操作 FLASH写入 void writeFlashTest(void) { /* 1/4解锁FLASH*/ HAL_FLASH_Unlock(); /* 2/4擦除FLASH*/ /*初始化FLASH_EraseInitTypeDef*/ /*擦除方式页擦除FLASH_TYPEERASE_PAGES,块擦除FLASH_TYPEERASE_MASSERASE*/ /*擦除页数*/ /*擦除地址*/ FLASH_EraseInitTypeDef FlashSet;

Johsnon的博客 2441

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

STM32のFLASH操作

说到STM32的FLSAH,我们的第一反应是用来装程序的,实际上,STM32的片内FLASH不仅用来装程序,还用来装芯片配置、芯片ID、自举程序等等。当然, FLASH还可以用来装数据。&nbsp; &nbsp;&nbsp;&nbsp;自己收集了一些资料,现将这些资料总结了一下,不想看的可以直接调到后面看怎么操作就可以了。FLASH分类&n...

如入无人之境 5346

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

STM32操作访问flash,包括写入数据到flash和从flash读取数据

STM32中存储区分为:随机存取存储器RAM和只读存储器ROM。 其中: RAM为常说的内存,比如手机的2G内存4G内存等,就是程序跑起来的时候所占用的存储空间,特点是掉电数据丢失。 ROM为常说的硬盘,比如手机的64G和128G等,可以简单的理解为硬盘的存储空间,特点是掉电数据不丢失,所以又叫“非易失存储空间”。 ROM又包含:EEPROM和flash。 画个嵌入式产品存储器件的思维导图如下(

Ace's Blog 8万+

STM32之flash读写操作篇

STM32之flash读写操作篇

weixin_43983562的博客 9278

STM32F205 -- FLASH 操作

STM32F205的FLASH操作记录, 体现了和STM32F103的一些操作区别

拾起点滴 知行合一 617

STM32GO中Flash充当EEPROM的操作

STM32GO中Flash充当EEPROM的操作 之前在学校的时候一直使用的是STM32F1的芯片,本月找了一份工作,安排下来的任务是写一个传感器的程序,程序比较简单,主要分为了两个部分: - 在Flash中找一片区域充当EEPROM的功能,实现初始化数据的存储。 - 使用ADC和DAC功能来实现将输入的信号,按照要求重新规划到规定的电压区间,然后输出。 由于之前一直都是直接使用的外置EEPROM芯片,所以这一次是一个新的学习过程,所以记录一下,废话不多说,正文开始。 选址 要想实现Flash当作EEPR

qq_45070313的博客 7547
上一篇: IAP & ICP
下一篇: IAP升级 代码分析
fly__chen
博客等级 码龄10年 96粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值