MadeStone

Использование FLASH памяти в качестве EEPROM у STM32

Просмотры:
108
Дата загрузки:
04.09.2026 12:43
Длительность:
00:30:24
Категория:
Технологии и интернет

Описание

__disable_irq();
HAL_FLASH_Unlock();
error = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, ((uint32_t)0x0800F000), 0x1234);
error = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, ((uint32_t)0x0800F010), 0xABCD);
Data[0]=0xaa; //32115
Data[1]=0xbb; //18
Data[2]=0xccdd;
Data[3]=0x2233;
for (int i = 0; i ﹤4; i++)
{
HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, 0x0800F020+(i*2), Data[i]);
}
uint32_t word;
memcpy(&word, &my_value, sizeof(float));
// Записываем одно 32-битное слово
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,0x0800F100,word);
error= HAL_FLASH_Lock();
__enable_irq();

HAL_Delay(100);
memcpy(Massiv, (const void *)0x0800F000, 50);
memcpy(&Get, (const void *)0x0800F010, 2);
memcpy(&Get_2, (const void *)0x0800F024, 2);
memcpy(&A, (const void *)0x0800F100, 4);

uint32_t page_error = 0;
uint32_t page_base = 0x0800F000 & ~(FLASH_PAGE_SIZE - 1); // 0x0800F000 // Вычисляем начало страницы (выравниваем вниз по 1 КБ)
//uint32_t page_num = (page_base - FLASH_BASE) / FLASH_PAGE_SIZE; // 60 // Номер страницы относительно FLASH_BASE в строку erase.PageAddress для каких то серий МК
HAL_FLASH_Unlock();
FLASH_EraseInitTypeDef erase; // создаем структуру с настройками очистки
erase.TypeErase = FLASH_TYPEERASE_PAGES; // стираем страницу или полностью
erase.PageAddress = page_base; //адрес начальной страницы
erase.NbPages = 1; // количество страниц
if (HAL_FLASHEx_Erase(&erase, &page_error) != HAL_OK)
{
uint32_t err = HAL_FLASH_GetError();
}
HAL_FLASH_Lock();

Источники:

Рекомендуемые видео