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

[stm32f4] STM32F407VGT6 - Przerwania timera PWM co 0.5s po kompilacji w Keil

max7532 25 Lut 2013 23:11 3288 20
REKLAMA
  • #1 11987567
    max7532
    Poziom 10  
    Posty: 53
    Ocena: 1
    Witam,
    Od niedawna planuję przejść na mikrokontroler stm32f407vgt6 z stm32f103vct6, ze względu na szybszą pracę. Niestety napotkałem na bardzo poważny problem. Aby przedstawić jak najlepiej dany problem, zamieszczę printscreen z analizatora stanów.
    [stm32f4] STM32F407VGT6 - Przerwania timera PWM co 0.5s po kompilacji w Keil
    Na wykresie widzimy przerwanie pracy timera, które w żadnym stopniu nie zostało przeze mnie zrealizowane. Przerwanie takie odbywa się około co 0.5 sekundy. Problem ten występuje po kompilacji poniższego kodu za pomocą programu Keil.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Jest to przykład od STMicroelectronics. W danym przykładzie, jak i we wszystkich bibliotekach kompletnie nic nie zostało zmodyfikowane.(sprawdzałem również inne przykłady, problem ten sam, próbowałem też w Eclipse z CodeSourcery, również to samo)
    Miał ktoś może podobny problem ?
    Pozdrawniam.
  • REKLAMA
  • #2 11987637
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    To spróbuj bez debuggera.
  • REKLAMA
  • #3 11987688
    max7532
    Poziom 10  
    Posty: 53
    Ocena: 1
    To jest praca bez debuggera. Analizator stanów logicznych sprawdza tylko stany na wyjściach pinów.
  • Pomocny post
    #4 11987696
    Electix
    Poziom 21  
    Posty: 462
    Pomógł: 46
    Ocena: 6
    A nie masz tam czasem włączonego jakiegoś Watchdoga czy czegoś takiego co Ci resetuje procka? :)
  • #5 11987729
    max7532
    Poziom 10  
    Posty: 53
    Ocena: 1
    Właśnie zapomniałem dodać, że zachowanie to bardzo mocno przypomina mi restart od watchdoga, problem w tym, że nie mam żadnego watchdoga. Jak już wcześniej pisałem biblioteki oraz plik main nie były w ogóle modyfikowane. Chyba że STMicroelectronics dorzuca watchdog (nie mam pojęcia gdzie) i nic o tym nie pisze
  • REKLAMA
  • Pomocny post
    #6 11987765
    Electix
    Poziom 21  
    Posty: 462
    Pomógł: 46
    Ocena: 6
    Jak się bawisz Keilem, to prześledź sobie działanie programu w symulatorze jak nie masz debuggera. Zobacz też czy masz zdefiniowane przerwanie od systick i co ono robi, jak nie grzebałeś nic w pliku konfiguracyjnym, to z automatu on jest włączany na wartości domyślne.
  • #7 11987857
    max7532
    Poziom 10  
    Posty: 53
    Ocena: 1
    Jeżeli chodzi o debugowanie w Keil, to odmawia mi posłuszeństwa. Debugowałem w Eclipse korzystając z jakiegoś znalezionego serwera to zawsze wpadał mi w Reset_Handler czyli prawdopodobnie się restartuje. Na początku nie brałem tego poważnie pod uwagę stwierdziłem, że proces debugowania jest niepoprawny, lecz teraz widzę, że to chyba nie tylko w debugowaniu wykonują się restarty.
  • Pomocny post
    #8 11987900
    Electix
    Poziom 21  
    Posty: 462
    Pomógł: 46
    Ocena: 6
    Jeśli korzystasz z stm32f4 discovery, to sprawdź czy masz dobrze ustawionego st-linka. Musisz mieć zainstalowany w systemie sterownik do niego, Keil nawet zaktualizuje w nim soft jeśli zajdzie taka potrzeba. Jeżeli chodzi o konfigurację st linka w Keilu, wszystko znajdziesz w dokumentacji u ST na stronie. Nie wiem też czy dobrze się zrozumieliśmy. Debug w Keilu ma dwa tryby. Jeden to symulator i do tego nie potrzebujesz nawet fizycznie procka, a drugi to debug przy połączeniu z targetem, w tym przypadku przez st linka. Prześledź dobrze zawartość plików stm32f4xx.h i system_stm32f4xx.c czy wszystkie ustawienia początkowe systemu są zgodne z Twoimi oczekiwaniami. Mam tu na myśli konfigurację RCC która zawarta jest w pliku system_stm32f4xx.c a odwołuje się do niej startup_stm32f4xx.s poprzez funkcję SystemInit(); Przejrzyj też zawartość stm32f4xx_it.c Tam znajdują się definicje wszystkich przerwań i wyjątków. Do głowy przychodzi mi jeszcze jedna rzecz. Spróbuj odczytać przyczynę resetu z RCC. I sprawdź czy np zasilanie Twojego układu nie wnosi tu jakichś nieprawidłowości.
  • REKLAMA
  • #9 11989126
    max7532
    Poziom 10  
    Posty: 53
    Ocena: 1
    Więc tak :
    Tak, korzystam z stm32f4discovery

    Najpierw chciałem odpalić symulator w Keil 4.7. Dostaję błąd :
    
    *** error 65: access violation at 0x0000000C : no 'read' permission 
    

    i tak dalej. W google znalazłem ten problem i rozwiązanie. Odpowiednio zastosowałem rozwiązanie dla mojego przypadku. Utworzyłem plik.ini w którym wpisałem :
    
    MAP  0x8000000, 0x8100000  READ WRITE  // allow R/W access to IO space
    MAP  0x20000000, 0x20020000  READ WRITE  // allow R/W access to IO space
    

    Dalej ten sam błąd.

    Próbowałem wgrać program ustawiając wszystko w zakładce "utilitis" dostaję błąd :
    error: flash download failed - "Cortex-M4"
    Próbowałem debug za pomocą programatora st-link ten sam problem.

    Teraz mam w planie zainstalować starszą wersję Keil 4.6 ponieważ znalazłem na stronie Keil, że obsługuje tego stlinka.
    Również chcę skonfigurować open-ocd z Eclipse do debug.

    Mam takie pytanie :
    Co masz na myśli dobrze ustawionego st-linka ? Ja mam wszystkie zworki założone oraz programowanie za pomocą "st-link Utility" działa prawidłowo bez żadnego problemu.

    STlinka ustawiałem na podstawie wcześniejszych doświadczeń z Keil i zawsze działało. Oprócz tego przeczytałem kilka poradników jak go ustawić, niestety nie działa, między innymi stąd :
    http://www.keil.com/appnotes/files/apnt_230.pdf

    Nie za bardzo rozumiem, jak odczytać przyczynę resetu z RCC, mógłbyś mi wytłumaczyć?

    Jeżeli chodzi o zasilanie które wprowadza nieprawidłowości. Wydaje mi się, że zasilanie jest stabilne, płytkę zasilam z portu USB. Próbowałem również odłączać laptopa od ładowarki żeby zmniejszyć wpływ zakłóceń, lecz nic nie pomogło.
  • Pomocny post
    #10 11989149
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    Poszukaj w dokumentacji procesora hasła "reset source".

    Nie sądzę, żeby Keil 4.70 nie obsługiwał ST-Link V2. U mnie w każdym razie działa. Driver ST-Link instaluj z pliku, który zainstalował Keil, a nie z pliku ściągniętego ze stron ST.
  • #11 11989438
    Electix
    Poziom 21  
    Posty: 462
    Pomógł: 46
    Ocena: 6
    Dobra konfiguracja projektu ma duże znaczenie nawet i w tak mocno "zautomatyzowanym" IDE jak Keil. Dobre ustawienie ST-Linka i środowiska to:

    1. Poprawnie wybrany mikrokontroler i ustawiony kwarc:
    [stm32f4] STM32F407VGT6 - Przerwania timera PWM co 0.5s po kompilacji w Keil

    2. Poprawnie wybrany debugger:
    [stm32f4] STM32F407VGT6 - Przerwania timera PWM co 0.5s po kompilacji w Keil
    Ustawiony na SWD:
    [stm32f4] STM32F407VGT6 - Przerwania timera PWM co 0.5s po kompilacji w Keil

    3. Poprawnie ustawiony programator FLASH:
    [stm32f4] STM32F407VGT6 - Przerwania timera PWM co 0.5s po kompilacji w Keil

    4. Poprawnie ustawiony zakres pamięci do programowania:
    [stm32f4] STM32F407VGT6 - Przerwania timera PWM co 0.5s po kompilacji w Keil

    Musisz oczywiście pamiętać że ST-Link powinien być zainstalowany w systemie i rozpoznawany przez windows. Ale skoro mówisz że na innych aplikacjach Ci działał, to znaczy że masz to zrobione. Tym samym można też uznać że połączenie z USB w kompie jest prawidłowe i kabelek też nie szwankuje... :)
  • #12 11990289
    Piotr Piechota
    Poziom 22  
    Posty: 519
    Pomógł: 55
    Ocena: 85
    Analizator stanów logicznych nie robi Ci psikusa? Zmień częstotliwość próbkowania na mniejszą np.8 [MHz], zmniejsz długość bufora ...
    Powodzenia
  • #13 11992452
    max7532
    Poziom 10  
    Posty: 53
    Ocena: 1
    Dziękuję bardzo wszystkim za odpowiedzi.

    Zacząłem od skonfigurowania Eclipse z Open-ocd 0.6.1. Niestety z procesu debugowania wynika nadal że procesor się ciągle restartuje.
    Dzisiaj około 19-20 postaram się odczytać rejestr przechowujący "source reset".

    Piotr Piechota : Według mnie nie jest to problem od strony analizatora, ale sprawdziłem zmieniając częstotliwość próbkowania oraz długość bufora, bez zmian.

    Electix : Jeżeli chodzi o konfigurację programu Keil to tak miałem już skonfigurowany. Jutro postaram się przetestować program Keil na innym komputerze. Sterowniki też instalowałem z folderu Keil i nic.

    Mam takie pytanie, działa wam może debugowanie za pomocą symulatora procesora stm32f4, np. jakiś przykład od STMicroelectronics lub przykład od Keil (np. ten : ...\Keil\ARM\Boards\ST\STM32F4-Discovery\Blinky)?

    Zapomniałem napisać, że mam program Keil 4.7a, ale to chyba nie powinno robić różnicy.
  • #14 11994201
    Electix
    Poziom 21  
    Posty: 462
    Pomógł: 46
    Ocena: 6
    Ja też mam najnowszego Keila, z tym że bawię się płytką Discovery dla F0. I działa wszystko jak należy i symulacja i debug. Jedyny problem jest taki, że F0 jest na tyle świeżym produktem, że Keil nie zdołał jeszcze napisać do niego graficznego interfejsu peripherals w symulatorze/debuggerze.
  • #15 11996107
    max7532
    Poziom 10  
    Posty: 53
    Ocena: 1
    Przed chwilą sprawdzałem rejestr "source reset" w dwóch różnych sytuacjach :

    1. Przy włączonym timerze :
    RCC_FLAG_PINRST: Pin reset 1
    RCC_FLAG_SFTRST: Software reset 1

    2. Przy wyłączonym timerze :
    RCC_FLAG_PINRST: Pin reset 1
    RCC_FLAG_IWDGRST: Independent Watchdog reset 1

    Nie mam pojęcia skąd biorą się te resety. Myślicie że może to być przez np. źle przylutowany pin resetu uc ?

    Keil testowałem również na drugim komputerze, identyczny błąd.
  • #17 11996278
    max7532
    Poziom 10  
    Posty: 53
    Ocena: 1
    Zapomniałem dopisać, że żadnego watchdoga nie włączałem. Chyba, że watchdog jest automatycznie włączany przy inicjalizacji, ale raczej w to wątpię.
  • Pomocny post
    #18 11996612
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Możemy się kłócić, możesz uważać, że Twój układ Cię okłamuje twierdząc, że zresetowany został przez IWDG, ale...

    Cytat:
    17.3.1 Hardware watchdog
    If the “Hardware watchdog” feature is enabled through the device option bits, the watchdog
    is automatically enabled at power-on, and will generate a reset unless the Key register is
    written by the software before the counter reaches end of count.


    Tak więc weź sobie ST-LINK UTILITY i NAPRAWDĘ skasuj wszystko, włącznie z Option Bytes.

    4\/3!!
  • #19 11996888
    max7532
    Poziom 10  
    Posty: 53
    Ocena: 1
    DZIĘKI BARDZO. W końcu działa :)

    Keil nie chciał wgrywać programu i debugować ponieważ pamięć była zabezpieczona, trzeba było ją odblokować i wszystko jest ok.
    Rzeczywiście uc resetował się przez układ watchdog. Najciekawsze jest to że był on od początku i nawet o tym nie wiedziałem.
    Jeszcze raz dziękuję bardzo ;) Pozdrawiam
  • #20 11996897
    Electix
    Poziom 21  
    Posty: 462
    Pomógł: 46
    Ocena: 6
    A o co pytałem w moim pierwszym poście napisanym w tym temacie? ;)
  • #21 11996906
    max7532
    Poziom 10  
    Posty: 53
    Ocena: 1
    Wiem że o watchdoga ;) Resety powtarzały się cyklicznie co około 0,5s, ewidentnie to wskazywało na watchdoga, tylko, że stwierdziłem, skoro go nie ustawiam to go nie ma.
    Dzięki jeszcze raz bardzo wszystkim :)

Podsumowanie tematu

✨ Użytkownik napotkał problem z mikrokontrolerem STM32F407VGT6, który restartuje się co 0,5 sekundy po kompilacji kodu w Keil. Pomimo braku aktywnego watchdog'a, zachowanie to sugeruje jego obecność. Użytkownik próbował debugować w różnych środowiskach, w tym Eclipse z OpenOCD, ale nadal występowały restarty. W trakcie dyskusji zasugerowano sprawdzenie konfiguracji ST-Link, ustawień przerwań oraz źródła resetu. Ostatecznie okazało się, że problem wynikał z zabezpieczenia pamięci, które uniemożliwiało wgranie programu, a watchdog był aktywowany automatycznie.
Wygenerowane przez model językowy.
REKLAMA