stm32H7内部flash存储结构体 固件库,寄存器结合使用,解决无法写入问题
创始人
2025-05-29 07:22:24

目录

  • 一、慎用固件库
    • 1.HAL_FLASH_Program有问题,写入不正常
    • 2.采用直接操作寄存器操作flash
  • 二、测试函数

一、慎用固件库

1.HAL_FLASH_Program有问题,写入不正常

2.采用直接操作寄存器操作flash

好处是写好一次,后面基本不会出问题
我使用的是正点原子的寄存器版本,接口比较清晰,
但也有一个问题STMFLASH_EraseSector 操作内部有延时,会莫名卡在里面
发现HAL_FLASHEx_Erase的操作正常并且很快,
将STMFLASH_Write函数中擦除flash替换为HAL库操作方式,速度瞬间提升。
并且兼容了BANK1,BANK2的操作

void STMFLASH_Write(u32 WriteAddr,u32 *pBuffer,u32 NumToWrite)
{ FLASH_EraseInitTypeDef FlashEraseInit;HAL_StatusTypeDef FlashStatus=HAL_OK;u32 SectorError=0;u8 status=0;u32 addrx=0;u32 endaddr=0;if(WriteAddrwhile(addrxif(STMFLASH_ReadWord(addrx)!=0XFFFFFFFF)//有非0XFFFFFFFF的地方,要擦除这个扇区{
#if 1FlashEraseInit.TypeErase=FLASH_TYPEERASE_SECTORS; //擦除类型FlashEraseInit.Sector=STMFLASH_GetFlashSector(addrx)%8;//要擦除的扇区FlashEraseInit.Banks=addrx>=BANK2_FLASH_SECTOR_0?FLASH_BANK_2:FLASH_BANK_1; //操作 BANK1FlashEraseInit.NbSectors=1; //一次只擦除一个扇区FlashEraseInit.VoltageRange=FLASH_VOLTAGE_RANGE_3; //电压范围if(HAL_FLASHEx_Erase(&FlashEraseInit,&SectorError)!=HAL_OK){break; //发生错误了}SCB_CleanInvalidateDCache(); //清除无效的 D-Cach
#else//status=STMFLASH_EraseSector(STMFLASH_GetFlashSector(addrx));// if(status)break;    //发生错误了// SCB_CleanInvalidateDCache();  //清除无效的D-Cache
#endif}else addrx+=4;}}if(status==0){while(WriteAddrif(STMFLASH_Write8Word(WriteAddr,pBuffer))//写入数据{break;  //写入异常}WriteAddr+=32;pBuffer+=8;}}STMFLASH_Lock();//上锁
} 

二、测试函数

  1. 我们可以通过一个结构体将所有需要保存的参数放到一起管理并保存,这是最简单的方式
#define GP_LENTH sizeof(PARAM_T)              //数组长度
#define SAVE_SIZE GP_LENTH/4+((GP_LENTH%4)?1:0) // 必须是4的整数倍PARAM_T gp;void SPIFlash_test(void){memset(&gp,3,sizeof(gp));STMFLASH_Write(FLASH_SAVE_ADDR,(u32*)&gp,SAVE_SIZE);STMFLASH_Read(FLASH_SAVE_ADDR,(u32*)&gp,25);memset(&gp,1,sizeof(gp));STMFLASH_Read(FLASH_SAVE_ADDR,(u32*)&gp,SAVE_SIZE);}

2.通常可以将结构体的首字节,末字节作为验证是否数据已经保存或正确保存的标志

相关内容

热门资讯

#科研筑基# 吴恩达深度学习 ... 为什么深度学习会兴起机器学习算法在处理少量数据时效率很高,但数据规模巨大时࿰...
青岛事故车交易网(青岛哪里有事... 本篇文章极速百科给大家谈谈青岛事故车交易网,以及青岛哪里有事故车批发对应的知识点,希望对各位有所帮助...
适合家庭用车的5款车,空间大乘... 今天给各位分享适合家庭用车的5款车,空间大乘坐感舒适,省油耐用又...的知识,其中也会对适合家用的车...
丰田卡罗拉油耗多少钱一公里(卡... 今天给各位分享丰田卡罗拉油耗多少钱一公里的知识,其中也会对卡罗拉16自动挡油耗进行解释,如果能碰巧解...
为众人抱薪者原文出自何处(为众... 本篇文章极速百科给大家谈谈为众人抱薪者原文出自何处,以及为众人抱薪者是谁的话对应的知识点,希望对各位...
人机对话比拼,Chat GPT... 目录 文心一言初体验 一、登录体验难易对比  二、测试对比--哲学类 第一个问题:《三...
强化学习笔记-04 动态规划D... 本文是博主对《Reinforcement Learning- An introduction》的阅读...
吉林华泰车险地址查询:理赔网点... 本篇文章极速百科给大家谈谈吉林华泰车险地址查询:理赔网点、营业厅、门店、定损...,以及华泰财产保险...
中国的五岳的特点各是什么(中国... 本篇文章极速百科给大家谈谈中国的五岳的特点各是什么,以及中国的五岳都是怎么样的对应的知识点,希望对各...
英菲尼迪fx35油耗多少钱(英... 本篇文章极速百科给大家谈谈英菲尼迪fx35油耗多少钱,以及英菲尼迪fx350油耗多少对应的知识点,希...
嫡孙是什么孙子(嫡孙指的是什么... 本篇文章极速百科给大家谈谈嫡孙是什么孙子,以及嫡孙指的是什么意思对应的知识点,希望对各位有所帮助,不...
【Linux】网络基础(2) 前言         本篇笔记记录我在Linux系统下学习网络基础部分知识,从关于网络...
计算机网络(第九弹) --- ...   传输控制协议 TCP 在整个计算机网络中占有很高的地位, 它会控制着网络上数据的传输过程, 当然...
Java二叉树的前中后序遍历 Java二叉树的前中后序遍历1.前序遍历1.1前序遍历概念1.2前序遍历习题2.中序遍历2.1中序遍...
电动汽车十大名牌排名及价格,纯... 今天给各位分享电动汽车十大名牌排名及价格,纯电动汽车排名及价格...的知识,其中也会对电动汽车十大名...
长安奔奔mini保养(长安奔奔... 本篇文章极速百科给大家谈谈长安奔奔mini保养,以及长安奔奔mini保养手册对应的知识点,希望对各位...
Python-06:异常、模块... 文章目录一、异常1.1 异常的概念1.2 捕获异常的语法1.3 代码演示1.4 异常的传递性二、模块...
满州是哪里(日本口中的满洲是哪... 今天给各位分享满州是哪里的知识,其中也会对日本口中的满洲是哪里进行解释,如果能碰巧解决你现在面临的问...
义乌交通违章查询,浙江义乌交通... 今天给各位分享义乌交通违章查询,浙江义乌交通违章查询的知识,其中也会对义乌违章查询入口进行解释,如果...
WEB安全 DIV CSS基础 1.DIV和CSS样式             层叠样式表(英文全称:Cascadin...
灵感来自游艇?聊天津一汽骏派C... 今天给各位分享灵感来自游艇?聊天津一汽骏派CX65设计的知识,其中也会对一汽骏派suv进行解释,如果...
汽车维修哪个学校比较好?(学汽... 今天给各位分享汽车维修哪个学校比较好?的知识,其中也会对学汽车维修哪个学校好,快来看看!进行解释,如...
科学技术的两面性是什么(科学技... 本篇文章极速百科给大家谈谈科学技术的两面性是什么,以及科学技术的两面性发言稿50字对应的知识点,希望...
京沪高速实时路况(京沪高速实时... 本篇文章极速百科给大家谈谈京沪高速实时路况,以及京沪高速实时路况今天封闭没有对应的知识点,希望对各位...
[刷题 java版] | 字节... 1.万万没想到之聪明的编辑我叫王大锤,是一家出版社的编辑。我负责校对投稿来的英文稿件&...
#科研筑基# 吴恩达深度学习 ... 引例这门课的名字叫深度学习,为什么我们要先介绍神经网络呢?那是因为&#x...
vue3一天内快速学习 文章目录简介vue3 学习安装项目结构基础知识模版语法{{}}v-htmlv-bind渲染展示v-i...
特斯拉专题研究报告:特斯拉第三... 今天给各位分享特斯拉专题研究报告:特斯拉第三篇章展望的知识,其中也会对特斯拉研究成果进行解释,如果能...
高速免费提前几个小时(高速免费... 今天给各位分享高速免费提前几个小时的知识,其中也会对高速免费提前几个小时上高速进行解释,如果能碰巧解...
卡罗拉和朗逸怎么选哪个更值得入... 今天给各位分享卡罗拉和朗逸怎么选哪个更值得入手的知识,其中也会对卡罗拉和朗逸买哪个好更好进行解释,如...