simple test EEPROM emulation for STM32F401 (STM algorithm described in the application notes: AN4061, AN3969, AN2594, AN3390, AN4056).
https://developer.mbed.org/questions/69101/Is-there-a-way-to-store-variables-in-a-n/#answer10369?compage=1#c24579
Versions for microcontrollers with smaller flash pages (using several flash pages for each virtual page):
Import program00_eeprom_emulation_f030
EEPROM emulation (STM algorithm described in the application notes: AN4061, AN3969, AN2594, AN3390, AN4056) with added multipage possibility. For Nucleo-F030 and others boards with similar microcontrolers.
Import program00_eeprom_emulation_f091
simple test EEPROM emulation (STM algorithm described in the application notes: AN4061, AN3969, AN2594, AN3390, AN4056) for STM32F091
main.cpp
- Committer:
- mega64
- Date:
- 2016-09-22
- Revision:
- 0:1756c3542c95
File content as of revision 0:1756c3542c95:
#include "mbed.h" #include "eeprom.h" #include <ctype.h> uint16_t n = 0; /* Virtual address defined by the user: 0xFFFF value is prohibited */ uint16_t VirtAddVarTab[NB_OF_VAR] = {0x5555, 0x6666, 0x7777}; uint16_t VarDataTab[] = {0, 0, 0}; int main() { /* Unlock the Flash Program Erase controller */ HAL_FLASH_Unlock(); EE_Init(); printf("EEPROM emulation test\n"); printf("\n\rType one of the following commands and press space or enter"); printf("\n\r READ - read all variables\n\r WRITE1 <n> - write first variable\n\r WRITE2 <n> - write second variable\n\r WRITE3 <n> - write third variable"); printf("\n\rwhere <n> is uint16_t value (0-65535)"); printf("\n\r"); char command[20]; char arg[10]; int i; while(1) { scanf("%s", command); i=0; while(command[i]) { command[i]=toupper(command[i]); i++; } if (strcmp("READ", command)==0) { for (i=0; i<3; i++) { EE_ReadVariable(VirtAddVarTab[i], &VarDataTab[i]); }; printf("\nvar1=%6u, var2=%6u, var3=%6u",VarDataTab[0],VarDataTab[1],VarDataTab[2]); } /////////////////////////////////////////////////////////////////////////////////////////////////////// else if (strcmp("WRITE1", command)==0) { scanf("%s", arg); printf("\nok"); n=atoi(arg); EE_WriteVariable(VirtAddVarTab[0], n); } //////////////////////////////////////////////////////////////////////////////////// else if (strcmp("WRITE2", command)==0) { scanf("%s", arg); printf("\nok"); n=atoi(arg); EE_WriteVariable(VirtAddVarTab[1], n); } //////////////////////////////////////////////////////////////////////////////////// else if (strcmp("WRITE3", command)==0) { scanf("%s", arg); printf("\nok"); n=atoi(arg); EE_WriteVariable(VirtAddVarTab[2], n); } //////////////////////////////////////////////////////////////////////////////////// else if (strcmp("T1", command)==0) { // multiple write test. After test var1 = 1000 printf("\nok"); for (n=0;n<1001;n++) { EE_WriteVariable(VirtAddVarTab[0], n); }; } //////////////////////////////////////////////////////////////////////////////////// else if (strcmp("T2", command)==0) { // multiple write test. After test var2 = 1001 printf("\nok"); for (n=0;n<1002;n++) { EE_WriteVariable(VirtAddVarTab[1], n); }; } //////////////////////////////////////////////////////////////////////////////////// else if (strcmp("T3", command)==0) { // multiple write test. After test var3 = 1002 printf("\nok"); for (n=0;n<1003;n++) { EE_WriteVariable(VirtAddVarTab[2], n); }; } //////////////////////////////////////////////////////////////////////////////////// else perror("\nThere is no command matching. Try again"); command[0] = arg[0] = 0; printf("\n\r"); } }