当前位置: 首页 > news >正文

江科大读写内部flash到hal库实现

hal库相关代码

进程结构体

typedef struct
{__IO FLASH_ProcedureTypeDef ProcedureOnGoing; /*表示闪存操作过程中的不同状态或过程类型*/__IO uint32_t               DataRemaining;    /*记录尚未完成的页数或者半字数*/__IO uint32_t               Address;          /*地址*/__IO uint64_t               Data;             /*数据*/HAL_LockTypeDef             Lock;             /*闪存锁存对象*/__IO uint32_t               ErrorCode;        /*错误对象*/
} FLASH_ProcessTypeDef;

 对flash编程函数

HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data);
HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data);

擦除结构体在flash_ex文件里 

typedef struct
{uint32_t TypeErase;   /*!擦除类型*/uint32_t Banks;       /*启用批量擦除功能时,请选择要擦除的存储体*/    uint32_t PageAddress; /*擦除的页地址*/uint32_t NbPages;     /*擦除的页地址数量*/} FLASH_EraseInitTypeDef;

 擦除函数

HAL_StatusTypeDef  HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError);
HAL_StatusTypeDef  HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit);

读写flash

我们把江科大的代码转换成我们自己的代码就行了,

首先就是对flash的读取函数,是直接对地址进行读取的,所以代码是一样的,不需要额外处理

uint32_t MyFLASH_ReadWord(uint32_t Address)
{return *((__IO uint32_t *)(Address));	//使用指针访问指定地址下的数据并返回
}uint16_t MyFLASH_ReadHalfWord(uint32_t Address)
{return *((__IO uint16_t *)(Address));	//使用指针访问指定地址下的数据并返回
}uint8_t MyFLASH_ReadByte(uint32_t Address)
{return *((__IO uint8_t *)(Address));	//使用指针访问指定地址下的数据并返回
}

 擦除函数,hal库直接把所有的擦除函数定义在了一起,通过结构体来判断擦除模式是全擦除还是页擦除,结构体里设置页擦除地址,擦除数量,一个函数包揽了标准库多个函数的活。

uint32_t PageError;void MyFLASH_EraseAllPages(void)
{FLASH_EraseInitTypeDef Flash_EraseStruct = {0};Flash_EraseStruct.TypeErase = FLASH_TYPEERASE_MASSERASE;HAL_FLASH_Unlock();					//解锁//FLASH_EraseAllPages();			//全擦除HAL_FLASHEx_Erase(&Flash_EraseStruct,&PageError);HAL_FLASH_Lock();					//加锁
}/*** 函    数:FLASH页擦除* 参    数:PageAddress 要擦除页的页地址* 返 回 值:无*/
void MyFLASH_ErasePage(uint32_t PageAddress)
{FLASH_EraseInitTypeDef Flash_EraseStruct;Flash_EraseStruct.TypeErase = FLASH_TYPEERASE_PAGES;Flash_EraseStruct.Banks = FLASH_BANK_1;Flash_EraseStruct.PageAddress = PageAddress;Flash_EraseStruct.NbPages = 1;HAL_FLASH_Unlock();					//解锁//FLASH_ErasePage(PageAddress);	//页擦除HAL_FLASHEx_Erase(&Flash_EraseStruct,&PageError);HAL_FLASH_Lock();					//加锁
}

 编程函数,hal库的编程函数也是一个函数包揽了全部的活,参数里面选择编程模式,地址数据也作为参数写入。

/*** 函    数:FLASH编程字* 参    数:Address 要写入数据的字地址* 参    数:Data 要写入的32位数据* 返 回 值:无*/
void MyFLASH_ProgramWord(uint32_t Address, uint32_t Data)
{HAL_FLASH_Unlock();							//解锁//FLASH_ProgramWord(Address, Data);		//编程字HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,Address,Data);HAL_FLASH_Lock();							//加锁
}/*** 函    数:FLASH编程半字* 参    数:Address 要写入数据的半字地址* 参    数:Data 要写入的16位数据* 返 回 值:无*/
void MyFLASH_ProgramHalfWord(uint32_t Address, uint16_t Data)
{HAL_FLASH_Unlock();							//解锁//FLASH_ProgramHalfWord(Address, Data);	//编程半字HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD,Address,Data);HAL_FLASH_Lock();							//加锁
}

其余关于store的代码是基于读写flash函数的,直接cv过来就行,不需要修改。

这样就完成了江科大的读写flash代码。

也是把江科大的大致hal复现了,代码打包上传了。


文章转载自:

http://X4pN4bGz.bmdjn.cn
http://uaYjPulK.bmdjn.cn
http://z1IDAxwN.bmdjn.cn
http://MEzCJNqm.bmdjn.cn
http://J30a3EX6.bmdjn.cn
http://g2kIGHql.bmdjn.cn
http://QA3ND7QH.bmdjn.cn
http://aBdhtdWB.bmdjn.cn
http://VrHRo0ki.bmdjn.cn
http://K9FGTRCw.bmdjn.cn
http://EfnDLEGk.bmdjn.cn
http://ZXMVwriE.bmdjn.cn
http://pnJOEwqG.bmdjn.cn
http://keYVqbBW.bmdjn.cn
http://DLlY9Dam.bmdjn.cn
http://kINVYfDN.bmdjn.cn
http://tDVKIVfg.bmdjn.cn
http://0eQSFZOi.bmdjn.cn
http://a2i6yhvO.bmdjn.cn
http://adp3jWdU.bmdjn.cn
http://hxJGKZ9T.bmdjn.cn
http://J5wSPURD.bmdjn.cn
http://5IEDTIqB.bmdjn.cn
http://GXkngb3M.bmdjn.cn
http://VWd8hnVB.bmdjn.cn
http://A34GaCwe.bmdjn.cn
http://hcNTkPqd.bmdjn.cn
http://sW7XErSS.bmdjn.cn
http://BTUsgDuv.bmdjn.cn
http://zvgEwVa0.bmdjn.cn
http://www.dtcms.com/a/236131.html

相关文章:

  • 筛选企业订单和业绩显著增长的标的
  • c语言 封装跨平台线程头文件
  • Vue:Form正则校验
  • Redis知识
  • 【大厂机试题解法笔记】最差产品奖
  • 通道注意力
  • win11部署suna
  • OpenLayers 分屏对比(地图联动)
  • OpenVINO环境配置--OpenVINO安装
  • Vue 渲染 Markdown 文件完全指南
  • 【VLNs篇】06:SmartWay—面向零样本视觉语言导航的增强路径点预测与回溯
  • 【动手学深度学习】2.6. 概率
  • C++递归语句完全指南:从原理到实践
  • 智能仓储解决方案:如何为您的企业选择最佳系统 (提升效率 降低成本)
  • 麒麟系统安装Navicat(14试用,删除文件可接着用)
  • KuiperInfer跟学第二课——张量的构建与实现
  • 嵌入式学习之系统编程(十一)网络编程之协议头,测试命令及工具
  • python闭包与装饰器
  • 跟我学c++中级篇——理解类型推导和C++不同版本的支持
  • 内嵌式mqtt server
  • 成功案例丨基于OptiStruct的三轮车车架结构刚强度仿真计算与优化
  • leetcode1609. 奇偶树-meidum
  • win10/win11禁止系统更新
  • 力扣面试150题--克隆图
  • Python删除大量文件
  • Day46 Python打卡训练营
  • 阿里140 补环境日志
  • C++.OpenGL (3/64)着色器(Shader)深入
  • 【技术】跨设备链路聚合的技术——M-LAG
  • C++.OpenGL (10/64)基础光照(Basic Lighting)