首页 > 其他分享 >STM32 EEPROM_Emulation 保存数据使用注意事项

STM32 EEPROM_Emulation 保存数据使用注意事项

时间:2023-10-20 16:24:13浏览次数:40  
标签:PAGE0 STM32 uint16 Emulation ADDRESS define EEPROM PAGE1

1 目的:

stm32 官方提供flash模拟eeprom的代码例子,为了能给产品添加数据保存功能,可以改造该例子迅速完成数据保存的功能。示例代码路径:

C:\Users\rd-yhzhang\STM32Cube\Repository\STM32Cube_FW_F1_V1.8.5\Projects\STM32F103RB-Nucleo\Applications\EEPROM\EEPROM_Emulation。

2 注意事项:

2.1:在使用flash模块时,需要先解锁flash,即在调用EE_Init();之前,先解锁FLASH,否则读写不正常。

 /* Unlock the Flash Program Erase controller */
  HAL_FLASH_Unlock();

  /* EEPROM Init */
  EE_Init();

 

2.2: 重新定义#define NB_OF_VAR             ((uint8_t)0x03),不同产品,保存的参数个数不同。

         重新定义uint16_t VirtAddVarTab[NB_OF_VAR] = {0x5555, 0x6666, 0x7777};其中0x5555, 0x6666, 0x7777在读写FLASH时寻找最新的数据时要用到,每个要保存的数据都配有一个这样的唯一的地址。实际产品中应根据参数个数来重新定义。

         uint16_t VarDataTab[NB_OF_VAR] = {0, 0, 0}; 这个数组可以去掉,实际产品中不需要用到。

         以下是实际产品中的读写示例:

        

       uint16_t VirtAddVarTab[NB_OF_VAR] = {0x5555 };/*变量地址*/
         
       EE_ReadVariable(0x5555,&threshould);  /*读数据*/

     EE_WriteVariable(0x5555, threshould);   /*写数据*/

 

 2.3:修改eeprom.h头文件的宏定义:

/* EEPROM start address in Flash */
#define EEPROM_START_ADDRESS  ((uint32_t)ADDR_FLASH_PAGE_126) /* EEPROM emulation start address */

/* Pages 0 and 1 base and end addresses */
#define PAGE0_BASE_ADDRESS    ((uint32_t)(EEPROM_START_ADDRESS + 0x0000))
#define PAGE0_END_ADDRESS     ((uint32_t)(EEPROM_START_ADDRESS + (PAGE_SIZE - 1)))
#define PAGE0_ID               ADDR_FLASH_PAGE_126

#define PAGE1_BASE_ADDRESS    ((uint32_t)(EEPROM_START_ADDRESS + 0x400))
#define PAGE1_END_ADDRESS     ((uint32_t)(EEPROM_START_ADDRESS + 0x400 + PAGE_SIZE - 1))
#define PAGE1_ID               ADDR_FLASH_PAGE_127

/* Used Flash pages for EEPROM emulation */
#define PAGE0                 ((uint16_t)0x0000) 
#define PAGE1                 ((uint16_t)0x0001)
/*这里千万要注意PAGE0和PAGE1是相对页数,一定要根据自己定义的PAGE0地址和PAGE1地址来修改,如果PAGE0的地址在32页,PAGE1的地址在96页,两者相差0x40页,
则#define PAGE1 ((uint16_t)0x0040) 否则保存数据在换页时会死机*/ #define NB_OF_VAR ((uint8_t)0x01) /*变量个数*/







 

标签:PAGE0,STM32,uint16,Emulation,ADDRESS,define,EEPROM,PAGE1
From: https://www.cnblogs.com/okyihu/p/17777382.html

相关文章

  • STM32单片机实现Bootloader跳转的关键步骤(转载)
    STM32单片机实现Bootloader跳转的关键步骤-知乎(zhihu.com)STM32单片机实现Bootloader跳转的关键步骤(qq.com)现在越来越多的嵌入式设备支持远程自动升级,不需要再借助下载器。这样对于设备的维护非常方便。当然若使设备支持远程升级,需要编写支持升级的程序代码,可以称之为B......
  • STM32 ADC基础知识讲解
    (文章目录)前言在正式的学习如何编写ADC代码时我们先来学习一下ADC的基础知识部分,只有掌握好了这些基础知识才能顺利的进行后面的代码编写。一、ADC的基本介绍ADC指的是模数转换器(Analog-to-DigitalConverter),它是一种用于将模拟信号转换为数字信号的电子设备或电路。模拟信......
  • STM32——GPIO输出
    一、结构二、8种模式三、对推挽输出、开漏输出的理解1、推挽输出:推:将电流推出去    挽:将电流挽回来 上图的前两种情况组合,就是推挽输出模式。情况1时即“推”,情况2时即“挽”。2、开漏输出:漏:漏极啥也没接。情况2与3组合构成开漏模式。(常配一个外接上拉电阻)......
  • 关于STM32 HAL库版本IAP升级跳转一直进入HAL_Delay()函数;只需要在升级 程序中加入如下
    __set_FAULTMASK(1);/*setvectortable/SCB->VTOR=FLASH_BASE|0x1F800;///USERCODEEND1*//*MCUConfiguration--------------------------------------------------------//Resetofallperipherals,InitializestheFlashinterfaceandtheSystick......
  • FPGA, arduino, STM32, RaspBerry 树莓派 简介
    https://www.cnblogs.com/zhenghb31/p/15046496.html 市面上控制器这么多,似乎每一个都很厉害…为什么有的控制器编写起来那么难,功能很少,有的简单易学,功能强大呢?各种控制器又有什么区别呢?经过我的思考,我个人把控制器分为三类!第一类:基于逻辑电路的控制器(FPGA)FPGA(FieldPr......
  • Clion+STM32配置环境
    Clion+STM32配置环境下载安装下载Clion,具体步骤省略https://www.jetbrains.com/clion/download/Clion官方的教程网址如下https://www.jetbrains.com/help/clion/embedded-development.html需要下载的东西有openocd和GNUARM工具链openocd:https://gnutoolchains.com/arm-eab......
  • 【STM32基础 CubeMX】PWM输出
    @TOC前言STM32微控制器是一系列功能强大的微控制器,广泛应用于嵌入式系统和电子设备中。其中一个常见的应用是生成PWM信号,用于控制各种设备,如电机、LED灯、声音发生器等。了解如何配置和使用PWM输出对于嵌入式系统开发非常重要。CubeMX是STMicroelectronics提供的一种工具,用于帮助开......
  • 【STM32基础 CubeMX】定时器的使用
    @TOC前言在嵌入式系统开发中,精确地控制时间和时序是至关重要的。STM32微控制器提供了强大的定时器功能,使开发者能够轻松地实现各种时间相关任务。本文将介绍STM32定时器的基础知识和使用方法,帮助初学者了解如何在STM32上利用定时器实现定时任务、生成脉冲信号、进行计时等操作。无......
  • STM32之CAN通信
    Can通信学习资料:正点原子CAN总线的学习瓶邪!-CAN详解前言LAN(即局域网)是最常见且应用最为广泛的一种网络,它是指在1~5公里范围内两台以上的计算机设备(如服务器、工作站)通过线缆(如同轴线缆、双绞线、光缆等)连接起来实现的资源共享的计算机网络,如家庭、办公室、学校或者有计......
  • STM32 硬件CRC的使用
    1代码:crc_lib.h/*Definetopreventrecursiveinclusion-------------------------------------*/#ifndef__crc_lib_H#define__crc_lib_H#ifdef__cplusplusextern"C"{#endif/*Includes------------------------------------------------------......