Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Zapis do flash w STM32F103C8T6

30 Gru 2018 23:26 432 12
  • Poziom 3  
    Witam

    Chcę zapisywać z własnego programu dane do flash procesora, jednak program zawiesza się w tym miejscu:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    dla: #define Page_60 0x0800F000
    STM32F103C8T6 ustawiony na 24MHz

    Co może powodować brak gotowości flasha?

    Pozdrawiam.
  • Specjalista - Mikrokontrolery
    Odczytaj w debuggerze wszystkie rejestry flash (szczególnie SR i CR), to zobaczysz co może być źle.
  • Poziom 3  
    Mam takę niepewność:
    Wiem, że podczas samego zapisu program przestaje być obsługiwany.
    Co by się stało gdyby w funkcji obsługującej zapis do flash pojawiło się przerwanie np. od Systicka, USARTu, itp ?
  • Specjalista - Mikrokontrolery
    Rdzeń się wtedy zatrzymuje, oczekując na zakończenie operacji na pamięci flash. Chyba że kasujesz część programu, no to wtedy jest słabo [;
  • Poziom 3  
    AndrzejKor, dzięki za podpowiedź, ale w zasadzie oprócz dodatków wyjścia z zapętlenia kod jest identyczny.

    Tylko czy jest sens zabawy z FLASH_SR_EOP które zauważyłem w Twoim kodzie?
  • Poziom 12  
    Pojęcia nie mam - ale działa.
    Jak pisałem to wydawało mi się konieczne. Wysokie Konsylium (FC i BD , kolejność przypadkowa) też nie napisało, że źle,
    to przyjąłem, że jest dobrze. To działa w działającym programie.
    Przyznam, że nie porównywałem z Twoim kodem. Ponieważ procesor się zgadzał, to uznałem, że
    można wstawić mój kod do Twojego programu i zadziała. I będziesz miał spóźniony prezent pod choinkę.

    Z ukłonami
    Andrzej Korycki
  • Specjalista - Mikrokontrolery
    Nie wiemy, ile operacji na Flash jest w programie. Odblokownai przez zapis FKEY powinno być jeden raz, inaczej próba odblokwoania odblokowanego Flash kończy się zablokowaniem. Kolejny problem - wykonujesz operacje logiiczne na CR zamiasz zwykłych zapisów. Nie wiem, co wcześniej wpisałeś do CR, więc nie wiadomo, jaki jest skutek operacji OR. Nie widzę też kasowania bitu EOP - być może ma to jakieś znaczenie.
  • Poziom 3  
    BlueDraco, w pierwszym poście są pokazane wszystkie operacje na flash (do momentu "zapętlenia"). Jedynym wcześniejszym zapisem do rejestrów związanych z flash było opóźnienie z powodu zastosowanej częstotliwości taktowania: FLASH->ACR |=1;
    Co do zastosowanych operacji logicznych, to zastosowałem kod najczęściej występujący w internecie który był opisywany jako działający.
    Jedynym kodem który widziałem z zastosowaniem EOP był podany przez AndrzejKor.
  • Poziom 1  
  • Specjalista - Mikrokontrolery
    Fajny kod. Po wywołaniu obu procedur mamy w CR ustawione bity PER i PG. Ciekawe, jak to działa... Szkoda, że mój kod dla F103 został na komputerze, od którego jestem teraz daleko.
  • Poziom 1