logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Zawieszanie się programu przy zapisie do flash STM32F103C8T6

Monys 30 Gru 2018 23:26 693 12
REKLAMA
  • #1 17664846
    Monys
    Poziom 7  
    Posty: 15
    Witam

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

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

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

    Pozdrawiam.
  • REKLAMA
  • REKLAMA
  • #3 17665856
    Monys
    Poziom 7  
    Posty: 15
    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 ?
  • REKLAMA
  • #4 17665876
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    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 [;
  • #6 17666001
    Monys
    Poziom 7  
    Posty: 15
    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?
  • REKLAMA
  • #7 17666079
    AndrzejKor
    Poziom 13  
    Posty: 58
    Pomógł: 8
    Ocena: 5
    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
  • #8 17666121
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    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.
  • #10 17666540
    Monys
    Poziom 7  
    Posty: 15
    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.
  • #11 17666745
    Konto nie istnieje
    Poziom 1  
  • #12 17666803
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    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.
  • #13 17666928
    Konto nie istnieje
    Poziom 1  

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik napotkał problem z zawieszaniem się programu podczas zapisu danych do pamięci flash procesora STM32F103C8T6. W odpowiedziach zasugerowano sprawdzenie rejestrów FLASH, zwłaszcza SR i CR, oraz omówiono wpływ przerwań na operacje zapisu. Wskazano na konieczność jednorazowego odblokowania pamięci flash oraz na znaczenie bitu EOP. Użytkownicy podzielili się fragmentami kodu oraz linkami do dokumentacji, sugerując, że stosowanie odpowiednich procedur zgodnych z dokumentacją ST może rozwiązać problem.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA