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

鄂州市网站深圳电子厂排名前十

鄂州市网站,深圳电子厂排名前十,做jsp网站用哪些软件下载,同城广告发布平台向FLASH中写入数据函数 /*函数说明:向FLASH中写数据形参:addr-要写入数据的起始地址 data-准备写入数据 len-数据大小返回值:1-成功,0-失败 */ uint8_t FlashWriteData(uint64_t addr,uint8_t data[],size_t len) {uint32_t Fir…

向FLASH中写入数据函数

/*函数说明:向FLASH中写数据形参:addr-要写入数据的起始地址 data-准备写入数据  len-数据大小返回值:1-成功,0-失败
*/
uint8_t FlashWriteData(uint64_t addr,uint8_t data[],size_t len)
{uint32_t FirstPage = 0, NbOfPages = 0;      //FirstPage:第一页,NbOfPages:Number of pages to be erased,需要被擦除的页数uint32_t Address = 0, PageError = 0;    //Address:要写入FLASH的地址//FLASH解锁HAL_FLASH_Unlock(); //FLASH解锁//获取要擦除的第一页FirstPage = GetPage(FLASH_USER_START_ADDR); //获取要擦除的第一页//设置要擦除多少页NbOfPages = 1;  //1页,擦除一页//对要擦除结构体中的内容赋值EraseInitStruct.TypeErase   = FLASH_TYPEERASE_PAGES;    //仅擦除页面EraseInitStruct.Page        = FirstPage;    //要擦除的起始页面EraseInitStruct.NbPages     = NbOfPages;    //需要擦除的页数//擦除FLASHif(HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK)//擦除FLASH{while (1){}}if(PageError != 0xFFFFFFFF){return FLASH_WRITE_FAIL;}//对要写入FLASH的初始地址赋值Address = addr;  //初始地址赋值//写入数据到FLASH中for(int i = 0 ; i < len;i ++ ,Address+=8) {//写入数据,写入位置Address+=8,每次+8是因为存储的类型是uint64_t,占用64bit,8字节HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, Address, data[i]);}HAL_FLASH_Lock(); //FLASH上锁return FLASH_READ_SUCCESS;
}/*** @brief  Gets the page of a given address 获取给定地址的页面* @param  Addr: Address of the FLASH Memory   FLASH中的地址* @retval The page of a given address*/
static uint32_t GetPage(uint32_t Addr)  
{return (Addr - FLASH_BASE) / FLASH_PAGE_SIZE;
}

读取FLASH中数据函数

/*函数说明:读取FLASH中的数据形参:addr-要读取数据的起始地址 data-读出数据存放的地址  len-数据大小*/
void FalshReadData(uint64_t addr,uint8_t *data,size_t len)
{uint32_t Address = 0;   //要读取数据的地址Address = addr;  //起始地址for(int i = 0; i < len; i++, Address+=8){data[i] = *(__IO uint32_t*)(Address);}}

程序汇总在一起,.c和.h文件如下:

hal_falsh.c文件

#include "hal_flash.h"static uint32_t GetPage(uint32_t Address);static FLASH_EraseInitTypeDef EraseInitStruct;  //FLASH擦除结构体/*函数说明:向FLASH中写数据形参:addr-要读取数据的起始地址 data-准备写入数据  len-数据大小返回值:1-成功,0-失败
*/
uint8_t FlashWriteData(uint64_t addr,uint8_t data[],size_t len)
{uint32_t FirstPage = 0, NbOfPages = 0;      //FirstPage:第一页,NbOfPages:Number of pages to be erased,需要被擦除的页数uint32_t Address = 0, PageError = 0;    //Address:要写入FLASH的地址//FLASH解锁HAL_FLASH_Unlock(); //FLASH解锁//获取要擦除的第一页FirstPage = GetPage(FLASH_USER_START_ADDR); //获取要擦除的第一页//设置要擦除多少页NbOfPages = 1;  //1页,擦除一页//对要擦除结构体中的内容赋值EraseInitStruct.TypeErase   = FLASH_TYPEERASE_PAGES;    //仅擦除页面EraseInitStruct.Page        = FirstPage;    //要擦除的起始页面EraseInitStruct.NbPages     = NbOfPages;    //需要擦除的页数//擦除FLASHif(HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK)//擦除FLASH{while (1){}}if(PageError != 0xFFFFFFFF){return FLASH_WRITE_FAIL;}//对要写入FLASH的初始地址赋值Address = addr;  //初始地址赋值//写入数据到FLASH中for(int i = 0 ; i < len;i ++ ,Address+=8) {//写入数据,写入位置Address+=8,每次+8是因为存储的类型是uint64_t,占用64bit,8字节HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, Address, data[i]);}HAL_FLASH_Lock(); //FLASH上锁return FLASH_READ_SUCCESS;
}/*函数说明:读取FLASH中的数据形参:addr-要读取数据的起始地址 data-读出数据存放的地址  len-数据大小*/
void FalshReadData(uint64_t addr,uint8_t *data,size_t len)
{uint32_t Address = 0;   //要读取数据的地址Address = addr;  //起始地址for(int i = 0; i < len; i++, Address+=8){data[i] = *(__IO uint32_t*)(Address);}}/*** @brief  Gets the page of a given address 获取给定地址的页面* @param  Addr: Address of the FLASH Memory   FLASH中的地址* @retval The page of a given address*/
static uint32_t GetPage(uint32_t Addr)  
{return (Addr - FLASH_BASE) / FLASH_PAGE_SIZE;
}

hal_falsh.h文件

#ifndef _HAL_FLASH_H_
#define _HAL_FLASH_H_#include "stm32g0xx_hal.h"//FLASH写入状态
typedef enum
{FLASH_WRITE_FAIL,   //0,失败FLASH_READ_SUCCESS, //1,成功
}FLASH_WRITE_STATE;uint8_t FlashWriteData(uint64_t addr,uint8_t data[],size_t len);
void FalshReadData(uint64_t addr,uint8_t *data,size_t len);#endif

在主函数中,需要对FLASH写入或读取数据,直接调用这两个函数即可。

注意:

如果将串口接收到的数据直接通过这个FLASH写函数写入FALSH中的话,会出现每个数据之间间隔8个字节,如下图所示,因为串口是8位数据(1字节),而这个FLASH写函数一次性写入时64位(8字节)。

在读FLASH函数中,也是一次性读取64位(8字节)数据,所以如果串口接收数据不是特别多,间隔八个字节存储在FLASH中可以存储下,那么就可以直接调用上面的写函数和读函数进行数据的读写,最终可以得到正确的结果。

参考文章:

Keil5 HAL库操作 flash 存储数据(stm32f103c6t6),实现断电保存数据 - 耿明岩 - 博客园


文章转载自:

http://4Z0DFz2z.gswfs.cn
http://2Le0wBUD.gswfs.cn
http://bkva42xW.gswfs.cn
http://OoX0BXG5.gswfs.cn
http://FD4AVBzy.gswfs.cn
http://vNttFrxn.gswfs.cn
http://S16s1j5t.gswfs.cn
http://O89pVopw.gswfs.cn
http://l7GlFkAB.gswfs.cn
http://NcZhH5gS.gswfs.cn
http://7tKdn8UI.gswfs.cn
http://LgTP04Gb.gswfs.cn
http://N5FDNxsV.gswfs.cn
http://ya0yUvaM.gswfs.cn
http://qqXeqlDZ.gswfs.cn
http://r9XBSa58.gswfs.cn
http://V3XdV9oI.gswfs.cn
http://829IaPES.gswfs.cn
http://NbBld2So.gswfs.cn
http://X6GIgk6b.gswfs.cn
http://54EtywY4.gswfs.cn
http://DnDNln5L.gswfs.cn
http://ILOXxad5.gswfs.cn
http://C2s2ZY8K.gswfs.cn
http://cuBMfC7K.gswfs.cn
http://AcVMZQEH.gswfs.cn
http://WSbHyjRu.gswfs.cn
http://snjTDCPJ.gswfs.cn
http://d3DDr3Yy.gswfs.cn
http://a1d1Fx5S.gswfs.cn
http://www.dtcms.com/wzjs/626476.html

相关文章:

  • 广州网站推广解决方案wordpress显示作者信息
  • 建设招标网站如何做好网页设计
  • 大型地方门户网站源码东鹏拼奖网站怎么做
  • 广州建站软件在那儿能找网站建设
  • 做网站吸引客户百度网页版入口官网
  • 鹤壁做网站的公司做的网站进不去后台
  • 做推广可以上那些网站威特视频网站建设方案
  • wordpress站点名字体简单网站开发实例
  • 重庆建设工程信息网证书查询系统大地seo视频
  • 杭州建平台网站公司网销怎么找客户
  • 做设计比较好的网站如何破解网站后台密码
  • 国外网站空间租用费用wordpress文章末尾加上相关文章
  • 哪些公司的网站做的漂亮开公司如何做网站推广页面
  • 十堰网站建设_网站制作_软件开发_网店培训 优易开发工具包
  • 旅游网站 功能网站建设渠道
  • 青岛建站价格物联网有哪些工作岗位
  • 免费的奖励网站有哪些商城网站建设论坛
  • 在线一键免费生成网页网站免费观看电视剧软件
  • 厦门住房建设局网站html 做网站的模板
  • 设计互动网站建设头条权重查询站长工具
  • 阿里云域名出售网络推广优化招聘
  • 杭州开发区网站建设西安优化外
  • 网站建设公司排名前十购物网站开发报告
  • 帝国网站地图插件建设工程合同补充协议范本
  • 青岛app网站开发更改wordpress标签分割符合
  • 做网站用什么软件编辑做淘宝客最好的网站是什么网站
  • 温州知名网站推广奉贤做网站公司
  • 做网站为职业生存不下去阿里云服务器添加网站
  • 无版权图片网站宝山手机网站制作公司
  • 网站本身对网站打开速度有何影响论基层门户网站的建设