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

STM32L151 - Zawieszanie się przy zapisie EEPROM po 9. bajcie

wilk125 16 Maj 2014 13:18 2196 21
  • #1 13606180
    wilk125
    Poziom 23  
    Posty: 912
    Pomógł: 17
    Ocena: 44
    Witam
    Uzywam funkcji jak ponizej do zapisu w eepromie, zapisuje 20 kolejnych bajtów i po 9 bajcie procek sie zawiesza (nie wiem gdzie laduje bo nie ma jak sprawdzić,ale program dalej nie idzie), jak mam go odpalonego z debuggera to działa ok,problem pojawia się jak odepne zasilanie i podlacze ponownie to zatrzymuje sie po zapisie 9 bajtu, o co mu chodzi bo mi rece opadaja?
    Uzywam stlinkv2, eclipse i openocd
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #2 13606219
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Jeśli te funkcje zwracają status, to proponuję sprawdzać jaki dokładnie - DATA_EEPROM_Unlock(), DATA_EEPROM_Lock(), a zapewne też przez FLASH_ClearFlag().

    4\/3!!
  • #3 13606400
    wilk125
    Poziom 23  
    Posty: 912
    Pomógł: 17
    Ocena: 44
    Freddie Chopin napisał:
    Jeśli te funkcje zwracają status, to proponuję sprawdzać jaki dokładnie - DATA_EEPROM_Unlock(), DATA_EEPROM_Lock(), a zapewne też przez FLASH_ClearFlag().

    nic nie zwracaja, usatwiaja tylko rejestry

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Ale zauwazylem coś innego, funkcja do zapisu jest na poczatku programu po ustawieniach zegarów portów itp., jak ta funkcję umiescilem po funkcjach (ale przed startem schedulera) tworzacych zadania w systemie freertos to juz się nie wiesza. Pomyslalem więc ze moze zaraz po starcie napiecie jest za niskie/niestabilne dla eepromu, ale jak robie reset proca przyciskiem to efekt jest ten sam czyli proc wisi. Zrobilem jeszce specjalne opoznienie programowe ale proc takze wisi, ok jest wtedy jak umieszcze zapis eepromu po funkcji tworzacej zadanie.
    Problem rozwiazany polowiecznie bo co prawda proc sie nie wiesza ale co takiego sie dzieje po utworzeniu zadania ze pozniej jest ok to nie wiem.

    Dodano po 25 [minuty]:

    Zapomnialem napisac o jeden ważnej rzeczy, wszystkie opisane problemy wystepują gdy program głowny jest wykonywany z pod adresu 0x8003000, na pierwszych 0x3000 jest bootloader.
    Jak uruchomie program bez bootloadera z bazowego adresu 0x8000000, to zapis eeproma działa prawidłowo i to na samym poczatku programu.
    Jak przestawie w linkierze adres na 0x08003000 i przesune wektor przerwan o te 0x3000, to cały program z przerwaniami działa opróczt tego zapisu do eeproma na poczatku programu.

    Jeszce jedna ciekawostka, mam dwie takie same płytki, te same procesory, program usationy na adres 0x08003000, załadowany normalnie przez openocd, bootloader nie wgrany wiec pierwsze 0x3000 pamieci to same zera.
    1.Odpalam program przez debuger i obydwa działają prawidłowo. Po odłaczeniu zasilania jedna płytka nie rusza wogóle, druga startuje ale z problemem zapisu do eeproma.
    2. Wgrywam bootloader a pozniej bootloaderem docelowy program, obydwa procki startuja ale występuje problem z zapisem eepromu (jak funkcja zapisu jest po funkcjach tworzacych zadania to jest ok).
  • #4 13606493
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Może po prostu Twój bootloader coś włącza i zapomina wyłączyć, to "coś" zgłasza przerwanie które w głównym kodzie nie jest obsługiwane i taki efekt?

    Jeśli masz dwa układy które się różnie zachowują to można rozważyć problem sprzętowy (jakieś złe luty albo nawet uszkodzony układ), choć to raczej byłoby dziwne... A skoro płytka z pustą pamięcią w obszarze wektorów startuje sama, to raczej ten obszar nie jest pusty (;

    4\/3!!
  • #5 13606617
    wilk125
    Poziom 23  
    Posty: 912
    Pomógł: 17
    Ocena: 44
    raczej masz racje nie jest pusty poczatek bo open ocd kasuje tylko ten fragment gdzie wgrywa soft, wiec jak był tam bootloader to siedzi nadal, druga płytka była nowa i odrazu wgrany soft z ofsetem 0x3000 dlatego nie ruszył, wiec obie płytki są takie same i raczej ok.
    Co do faktu ze wszytsko działa z debugera to popram mnie jesli żle myslę, ale debufer poprostu widzać ze program zaczyna się z ofsetem to tam ustawia paczatek i odrazu startuje z tego adresu wiec bootloader jest pomijany i dlatego dziła ok.
    Zatem winny, tak jak piszesz bedzie bootloader, a wyglada tak.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Jak jest aplikacja to oprocz ustawienia predkosci kwarcu i skokiem do programu glownego nic nie robi,.
  • Pomocny post
    #6 13606652
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    wilk125 napisał:
    Jak jest aplikacja to oprocz ustawienia predkosci kwarcu i skokiem do programu glownego nic nie robi,.

    Dosyć odważna teza... Całkowicie błędna niestety.

    Bootloader przed skokiem do aplikacji powinien wyłączyć WSZYSTKO co włączył/skonfigurował, Ty natomiast nie wyłączasz niczego:
    - RCC i PLL,
    - przycisk,
    - SysTick.

    Funkcja konfigurująca SysTick włącza przerwanie (to tak apropo używania funkcji bez ich zrozumienia). Przerwanie to wykorzystywane jest przez RTOS, tyle że przed jego pierwszym wywołaniem RTOS musi zostać skonfigurowany. Gdy dasz swoją (długo trwającą) funkcję do zapisu do EEPROM _przed_ konfiguracją RTOSa, to przerwanie SysTick się wywołuje i używa jakichś śmieci. Gdy najpierw coś skonfigurujesz, to coś już coś tam jest i działa OK. Zapewne chodzi o wątek "idle" lub o TCB.

    W bootloaderze przed skokiem do aplikacji ZAWSZE trzeba wyłączyć/zresetować WSZYSTKO czego używałeś, bo potem masz takie kwiatki i szukanie na ślepo. W-S-Z-Y-S-T-K-O i Z-A-W-S-Z-E! W przeciwnym wypadku Twoja "oszczędność czasu" się kiedyś zemści.

    Przy okazji - nie wiem czemu wektory przerwań przestawiasz dopiero w aplikacji - przecież to również powinno być zadanie bootloadera...

    4\/3!!
  • #7 13606703
    wilk125
    Poziom 23  
    Posty: 912
    Pomógł: 17
    Ocena: 44
    racja, problem było przerwanie systick, dzieki za pomoc, od teraz bede wszytsko wylaczal w bootloaderze bo faktycznie juz kupe czasu stracilem.
  • #8 13638148
    TMEA
    Poziom 16  
    Posty: 345
    Pomógł: 3
    Ocena: 62
    podepnę się pod temat aby nie zakładać nowego. Mam zestaw STEVAL-IKR002V4 i na pokładzie jest procesor ARM STM32L151. Jakim środowiskiem go obsłużyć? zainstalowałem Atollic TrueStudio, ale nie ma tam do wyboru tego procesora tym bardziej całej płyty.
    pozdrawiam
  • #9 13638177
    tadzik85
    Poziom 38  
    Posty: 3404
    Pomógł: 415
    Ocena: 16
    TMEA napisał:
    podepnę się pod temat aby nie zakładać nowego. Mam zestaw STEVAL-IKR002V4 i na pokładzie jest procesor ARM STM32L151. Jakim środowiskiem go obsłużyć? zainstalowałem Atollic TrueStudio, ale nie ma tam do wyboru tego procesora tym bardziej całej płyty.
    pozdrawiam


    Atollic wspiera L1 jak i zapewne wszystkie dostępne środowiska.
  • #10 13638196
    TMEA
    Poziom 16  
    Posty: 345
    Pomógł: 3
    Ocena: 62
    hmm to musze coś pokombinować bo nie chce dzialać i nie widzi układu
  • #11 13638231
    tadzik85
    Poziom 38  
    Posty: 3404
    Pomógł: 415
    Ocena: 16
    Co znaczy nie widzi ukladu?
  • #12 13638259
    TMEA
    Poziom 16  
    Posty: 345
    Pomógł: 3
    Ocena: 62
    po prostu podłączam płytkę STEVAL i w tym Atolicu nie mogę znależć nigdzie tego procesora. Robię programy na MSP430 w CCS5 a atolic to jest to samo co CCS5 bo tak samo wygląda i się wszystko robi tak samo :D ogólne może coś źle wybieram ale nie ma tego procesora w wyborze.
  • #13 13638264
    tadzik85
    Poziom 38  
    Posty: 3404
    Pomógł: 415
    Ocena: 16
    Wex odpowiadaj jak inzynier.

    Nie widzi bo co? utworzyć projektu dla niego nie możesz?
    Połączyć się w układem nie możesz czy co
  • #14 13638310
    TMEA
    Poziom 16  
    Posty: 345
    Pomógł: 3
    Ocena: 62
    robię tak:
    File->new project C->embedded c project następnie mam tabelkę target i wybieram procesor. Więc ustawiam
    vendor - STMicroelektronics
    mikroprocesor mam a właściwie to na nim pisze STM32L151 RBT6 i nie wiem ktory wybrać i może dlatego nie działa, ale potem naciskam dalej dalej dalej i jest wybór debug probe selection i nie wiem co wybrać jak mam ten zestaw ewaluacyjny STEVAL
  • #15 13638319
    tadzik85
    Poziom 38  
    Posty: 3404
    Pomógł: 415
    Ocena: 16
    Bez evaluation board, family STM32L1xxx wlasciwa dla tego co masz
    Debug zgodny z tym co posiadasz a tego nie wiemy.
  • #16 13638357
    TMEA
    Poziom 16  
    Posty: 345
    Pomógł: 3
    Ocena: 62
    hmm nie mam nic poza tą plytką :/ nie pójdzie bez osobnego debuggera?
  • #17 13638363
    tadzik85
    Poziom 38  
    Posty: 3404
    Pomógł: 415
    Ocena: 16
    Co najwyżej przez bootloader.... Ale współczuję tak rozwijać projekt....
  • #19 13638465
    tadzik85
    Poziom 38  
    Posty: 3404
    Pomógł: 415
    Ocena: 16
    Może być i nie SWIM a SWD.
    Ewentualnie wykorzystać discovery.
  • #20 13638481
    TMEA
    Poziom 16  
    Posty: 345
    Pomógł: 3
    Ocena: 62
    mam też zestaw ewaluacyjny stm8L-discovery? tego mogę programowac z poziomu płytki ewaluacyjnej czy też muszę mieć programator osobny?
  • #21 13638501
    tadzik85
    Poziom 38  
    Posty: 3404
    Pomógł: 415
    Ocena: 16
    Nie. Nie ma wyprowadzonego SWD.
  • #22 13638515
    TMEA
    Poziom 16  
    Posty: 345
    Pomógł: 3
    Ocena: 62
    znaczy nie da sie programować? szczerze to 1 raz spotykam się z STM8 i STM32 i muszę określić czy będzie to odpowiedni produkt dla nas

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik zgłasza problem z zawieszaniem się mikrokontrolera STM32L151 podczas zapisu do EEPROM po 9. bajcie. Po analizie kodu i zachowania systemu, zauważono, że problem może być związany z nieprawidłowym zarządzaniem przerwaniami, szczególnie SysTick, które nie zostały wyłączone w bootloaderze przed przejściem do aplikacji. Po przeniesieniu funkcji zapisu EEPROM po konfiguracji RTOS, problem ustąpił. W dyskusji poruszono również kwestie związane z używaniem środowiska Atollic TrueStudio do programowania STM32L151 oraz potrzebą posiadania odpowiedniego programatora do debugowania.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA