Принципы чтения и записи FLASH памяти в STM32F0 мало чем отличаются от подобных принципов для других семейств. Описываемый далее метод так же неплохо работает и в STM32F1 (проверено на STM32F103C6T6A). Библиотека HAL позволит унифицировать знания, то есть пользоваться функцией стирания/записи можно аналогично, независимо от модели микроконтроллера.
Первое, что стоит хорошо понять:
Это очень простая процедура - мы просто обращаемся к адресному пространству микроконтроллера и извлекаем оттуда значения. Можно обернуть это извлечение в функцию:
Функция позволяет читать по одному слову (4 байта) за раз.
Перед тем, как записать данные на флешку, необходимо стереть старые данные. А стереть придется целую страницу памяти, так как стереть меньший участок памяти невозможно.
Допустим, вы определились с номером страницы для хранения настроек. Например, у меня, в STM32F030F4P6 это 16-ая страница, начинающаяся по адресу 0x08003C00. Именно этот адрес я буду указывать в функции стирания. Для удобства можно определить константу, в которой хранится этот адрес
В дальнейшем, если вы захотите использовать совсем другие страницы для хранения информации (например, при переходе на другой камень), то достаточно будет изменить лишь эту константу, не меняя остального кода.
А далее, пример использования функции для чтения конфигурации
P. S. При разработке ПО я столкнулся с одним неприятным моментом, флешка стиралась со статусом ffffffff - это значит, что все отлично; запись данных тоже имела статус HAL_OK - успешно. Однако область на FLASH по факту не записывалась совсем, оставалась стертой (заполнена 0xFF). Помогла случайность: я стер всю память микроконтроллера в ST-Link Utility и залил прошивку заново. С радостью заметил, что все заработало. Хотя застряли мы с этой проблемой почти на 2 рабочих дня.