#ifndef EEPROM_EMUL_H #define EEPROM_EMUL_H #include "stm32f1xx_hal.h" // Адреса для эмуляции EEPROM (последние страницы Flash) #define EEPROM_START_ADDRESS 0x0800F000 // Последний килобайт Flash #define EEPROM_PAGE_SIZE 1024 // Размер страницы STM32F103 #define EEPROM_SIZE 1024 // Общий размер EEPROM // Максимальное количество переменных #define EEPROM_MAX_VARIABLES 64 // Статусы операций typedef enum { EEPROM_OK = 0, EEPROM_ERROR = 1, EEPROM_INVALID = 2, EEPROM_FULL = 3 } EEPROM_Status; // Структура элемента данных #pragma pack(push, 1) typedef struct { uint16_t address; // Адрес переменной (0-EEPROM_MAX_VARIABLES) uint16_t data; // Данные uint32_t timestamp; // Временная метка } EEPROM_Item; #pragma pack(pop) // Инициализация EEPROM EEPROM_Status EEPROM_Init(void); // Чтение данных EEPROM_Status EEPROM_Read(uint16_t virt_address, uint16_t* data); // Запись данных EEPROM_Status EEPROM_Write(uint16_t virt_address, uint16_t data); // Массовая запись EEPROM_Status EEPROM_WriteMultiple(uint16_t virt_address, uint8_t* data, uint16_t size); // Получение информации о EEPROM void EEPROM_GetInfo(uint32_t* used, uint32_t* total); // Полное форматирование EEPROM_Status EEPROM_Format(void); #endif