[STM32] Zapis i odczyt danych z pamięci flash STM32f103

Często w urządzeniach odłączanych od zasilania występuje konieczność zapisu konfiguracji jednak nie zawsze wykorzystywany przez nas mikroprocesor posiada wbudowaną pamięć eeprom. Nie jesteśmy jednak skazani wtedy na dokładanie zewnętrznej pamięci możemy skorzystań z pamięci flash użytego mikroprocesora.
Nie będę się tu rozpisywał nad tym kiedy użycie zewnętrznej pamięci będzie lepszym rozwiązaniem bo nie o to tu chodzi, przejdźmy do praktyki!

Krótko o organizacji pamięci

W mikrokontrolerach stm32f1pamięć flash podzielona jest na strony o rozmiarze 1 KiB. Najmniejszą jednostką zapisu jest słowo 16-bitowe, a kasować możemy tylko całe strony. Więcej informacji znajdziemy w stosownej dokumentacji producenta: STM32F10xxx Flash memory microcontrollers

Procedura zapisu

0. Wyczyścić cała stronę (jesli wyczyszczona, to pomijamy)
1. Odblokowanie zapisu(dwa wpisy do FLASH->KEYR)
2. Upewnienie się, że flash nie jest „zajęty” – rejestr SR
3. Włączenie zapisu do flasha – FLASH_CR_PG_bb = 1
4. Dokonanie zapisu – normalny zapis jak do zmiennej w RAM, tyle że rozmiar musi być 16-bit
5. Poczekać na zakończenie – rejestr SR
6. Wyłączenie zapisu do flash – FLASH_CR_PG_bb = 0
7. Zablokowanie możliwości zpaisu – FLASH_CR_LOCK_bb = 1

Procedura odczytu

Tu nie ma żadnej filozofii, po prostu odczytujemy dane z określonego adresu pamięci.

Przykład funkcji zapisu i odczytu

To przykład chyba najprostszych funkcji realizujących procedurę zapisu i odczytu z jednej strony pamięci flash, w tym przypadku „Page 127” w zależności od dostępnej w użytym mikrokontroleże pamięci flash możemy(bądź musimy) wybrać inną stronę. Niektórych pewnie odstraszy, że program jest na rejestrach, a nie łatwym i przyjemnym HALu ale uwierzcie mi tak najłatwiej zrealizować funkcję zapisu.

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *