Сохранение данных в FLASH память микроконтроллера

Часто возникает необходимость сохранить некоторые параметры работы программы в энергонезависимую память, так чтобы при перезагрузке микроконтроллера эти данные не пропали, и мы смогли их использовать для работы программы. Это могут быть, например, параметры калибровки какого-то датчика или целевая температура термостата.

Рассмотрим сохранение данных на примере трех чисел n1, n2, n3 с помощью модуля MicroSTM32F10xFlash.

Сначала надо определить номер страницы памяти, куда будем сохранять данные. Логично определить последнюю страницу памяти, так чтобы наша прошивка не пострадала от манипуляций с FLASH. Для МК 128 кб ROM адрес определим следующим образом:

CONST
page127 = Flash.Page0 + 127 * 1024;

Если у вашего МК 64кб ROM памяти, то используйте 63 вместо 127.

Запись данных n1, n2, n3 осуществляется следующим образом:

Flash.UnLock;
Flash.ErasePage(page127, res);
IF res = Flash.complete THEN
	Flash.Write(page127, n1, res);
	Flash.Write(page127 + 4, n2, res);
	Flash.Write(page127 + 8, n3, res);
END;
Flash.Lock

Считывание сохраненных данных не требует использование модуля Flash.

SYSTEM.GET(page127, n1);
SYSTEM.GET(page127 + 4, n2);
SYSTEM.GET(page127 + 8, n3);

Автор заметки: И.А. Денисов