В данной серии статей будут приведены примеры работы с периферией STM32L с помощью библиотеки, предоставляемой ST — StdPeriph. Перед использованием примеров не забывайте включать, соответствующие файлы библиотеки в проект.
- Порты GPIOx
- Прерывания
- Timer 6
- USART
- I2C
- SPI
- DMA
- Системный таймер
- EEPROM
- RTC
- Тактирование 32МГц с настройкой пропуска такта flash
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);
}