:::: MENU ::::

Примеры использования StdPeriph — EEPROM

В данной серии статей будут приведены примеры работы с периферией STM32L с помощью библиотеки, предоставляемой ST — StdPeriph. Перед использованием примеров не забывайте включать, соответствующие файлы библиотеки в проект.

EEPROM

Создаем указатель на структуру для управления данными в EEPROM по адресу 0x08080000:

#define START_EEPROM 0x08080000

typedef struct{
    uint8_t f_write;
    
    uint8_t data_1;
    uint8_t data_2;
    uint16_t data_3;
    uint32_t data_4;
} eeprom_init;

eeprom_init* eeprom;

Функции записи в eeprom:

void write_eeprom_word(uint32_t address, uint32_t data){
    FLASH_Status status;
    
    if(IS_FLASH_DATA_ADDRESS(address)){
        DATA_EEPROM_Unlock();
        status = DATA_EEPROM_ProgramWord(address, data);
        if(status == FLASH_COMPLETE) {
        } else {
        }
        DATA_EEPROM_Lock();
    }
}

void write_eeprom_halfw(uint32_t address, uint16_t data){
    FLASH_Status status;
    
    if(IS_FLASH_DATA_ADDRESS(address)){
        DATA_EEPROM_Unlock();
        status = DATA_EEPROM_ProgramHalfWord(address, data);
        if(status == FLASH_COMPLETE) {
        } else {
        }
        DATA_EEPROM_Lock();
    }
}

void write_eeprom_byte(uint32_t address, uint8_t data){
    FLASH_Status status;
    
    if(IS_FLASH_DATA_ADDRESS(address)){
        DATA_EEPROM_Unlock();
        status = DATA_EEPROM_ProgramByte(address, data);
        if(status == FLASH_COMPLETE) {
        } else {
        }
        DATA_EEPROM_Lock();
    }
}

Пишем в EEPROM:

eeprom = (eeprom_init*)START_EEPROM;
    
    if(eeprom->f_write != 1)
    {
        write_eeprom_byte((uint32_t)(&(eeprom->data_1)), 1);
        write_eeprom_byte((uint32_t)(&(eeprom->data_2)), 2);
        write_eeprom_halfw((uint32_t)(&(eeprom->data_3)), 3);
        write_eeprom_word((uint32_t)(&(eeprom->data_4)), 4);
        write_eeprom_byte((uint32_t)(&(eeprom->f_write)), 1);
    }