Dessa filer som jag bifogar är gjorda för STM32 F401RE.
Här är ett arbetsexempel som är själva skapat av ST själva. Då är mina frågor:
- Kan jag använda detta under körning? Eller är det bara vid uppstart?
- Hur vet jag vilka adresser jag kan skriva till som är säkra?
- Måste jag anropa HAL_FLASH_Lock(); För varje gång jag har skrivit klart?
Kod: Markera allt
#include "main.h"
/** @addtogroup EEPROM_Emulation
* @{
*/
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Virtual address defined by the user: 0xFFFF value is prohibited */
uint16_t VirtAddVarTab[NB_OF_VAR] = {0x5555, 0x6666, 0x7777};
uint16_t VarDataTab[NB_OF_VAR] = {0, 0, 0};
uint16_t VarValue,VarDataTmp = 0;
/* Private function prototypes -----------------------------------------------*/
static void SystemClock_Config(void);
static void Error_Handler(void);
/* Private functions ---------------------------------------------------------*/
/**
* @brief Main program.
* @param None
* @retval None
*/
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock to 84 MHz */
SystemClock_Config();
/* Unlock the Flash Program Erase controller */
HAL_FLASH_Unlock();
/* Configure LED2 */
BSP_LED_Init(LED2);
/* EEPROM Init */
if( EE_Init() != EE_OK)
{
Error_Handler();
}
/* --- Store successively many values of the three variables in the EEPROM ---*/
/* Store 0x1000 values of Variable1 in EEPROM */
for (VarValue = 1; VarValue <= 0x1000; VarValue++)
{
/* Sequence 1 */
if((EE_WriteVariable(VirtAddVarTab[0], VarValue)) != HAL_OK)
{
Error_Handler();
}
if((EE_ReadVariable(VirtAddVarTab[0], &VarDataTab[0])) != HAL_OK)
{
Error_Handler();
}
if (VarValue != VarDataTab[0])
{
Error_Handler();
}
/* Sequence 2 */
if(EE_WriteVariable(VirtAddVarTab[1], ~VarValue) != HAL_OK)
{
Error_Handler();
}
if(EE_ReadVariable(VirtAddVarTab[1], &VarDataTab[1]) != HAL_OK)
{
Error_Handler();
}
if(((uint16_t)~VarValue) != VarDataTab[1])
{
Error_Handler();
}
/* Sequence 3 */
if(EE_WriteVariable(VirtAddVarTab[2], VarValue << 1) != HAL_OK)
{
Error_Handler();
}
if(EE_ReadVariable(VirtAddVarTab[2], &VarDataTab[2]) != HAL_OK)
{
Error_Handler();
}
if ((VarValue << 1) != VarDataTab[2])
{
Error_Handler();
}
}
/* Store 0x2000 values of Variable2 in EEPROM */
for (VarValue = 1; VarValue <= 0x2000; VarValue++)
{
if(EE_WriteVariable(VirtAddVarTab[1], VarValue) != HAL_OK)
{
Error_Handler();
}
if(EE_ReadVariable(VirtAddVarTab[1], &VarDataTab[1]) != HAL_OK)
{
Error_Handler();
}
if(VarValue != VarDataTab[1])
{
Error_Handler();
}
}
/* read the last stored variables data*/
if(EE_ReadVariable(VirtAddVarTab[0], &VarDataTmp) != HAL_OK)
{
Error_Handler();
}
if (VarDataTmp != VarDataTab[0])
{
Error_Handler();
}
if(EE_ReadVariable(VirtAddVarTab[1], &VarDataTmp) != HAL_OK)
{
Error_Handler();
}
if (VarDataTmp != VarDataTab[1])
{
Error_Handler();
}
if(EE_ReadVariable(VirtAddVarTab[2], &VarDataTmp) != HAL_OK)
{
Error_Handler();
}
if (VarDataTmp != VarDataTab[2])
{
Error_Handler();
}
/* Store 0x3000 values of Variable3 in EEPROM */
for (VarValue = 1; VarValue <= 0x3000; VarValue++)
{
if(EE_WriteVariable(VirtAddVarTab[2], VarValue) != HAL_OK)
{
Error_Handler();
}
if(EE_ReadVariable(VirtAddVarTab[2], &VarDataTab[2]) != HAL_OK)
{
Error_Handler();
}
if(VarValue != VarDataTab[2])
{
Error_Handler();
}
}
/* read the last stored variables data*/
if(EE_ReadVariable(VirtAddVarTab[0], &VarDataTmp) != HAL_OK)
{
Error_Handler();
}
if (VarDataTmp != VarDataTab[0])
{
Error_Handler();
}
if(EE_ReadVariable(VirtAddVarTab[1], &VarDataTmp) != HAL_OK)
{
Error_Handler();
}
if (VarDataTmp != VarDataTab[1])
{
Error_Handler();
}
if(EE_ReadVariable(VirtAddVarTab[2], &VarDataTmp) != HAL_OK)
{
Error_Handler();
}
if (VarDataTmp != VarDataTab[2])
{
Error_Handler();
}
/* Turn LED2 On */
BSP_LED_On(LED2);
while (1)
{
}
}