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

[Rozwiązano] STM32F103C8T6 - SysTick nie generuje przerwań, mimo konfiguracji przez CUBE

baxter007 06 Gru 2018 13:53 2373 12
REKLAMA
  • #1 17608629
    baxter007
    Poziom 11  
    Posty: 55
    Pomógł: 3
    Witam,
    Jakiś czas temu używałem dosyć często przerwania co 1ms od SysTick i wysztko było w porządku. Aktualnie już pare godzin szukam problemu dlaczego nie otrzymuję przerwania od tego timera. Skonfigurowany przez CUBE czyli HAL_SYSTICK_Config(f zegara/1000) = w moim przypadku 24000. Funkcja inicjalizyje i startuje timer, niestety nie wykonuje się funkcja:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    a co za tym idzie
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    też nie.
    Czy coś zostaje niedopatrzone albo pominięte, jak myślicie ?
  • REKLAMA
  • #2 17608678
    Konto nie istnieje
    Poziom 1  
  • #3 17608745
    LChucki
    Poziom 31  
    Posty: 1940
    Pomógł: 104
    Ocena: 379
    W jaki sposób stwierdzasz, ze przerwanie nie wykonuje się? Debugerem?
  • #4 17610011
    baxter007
    Poziom 11  
    Posty: 55
    Pomógł: 3
    HCLK = 24MHz , Cube w funkcji void SystemClock_Config(void) ustawia SysTick w taki sposób:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    rozumiem , że to wystarczy aby SysTick wystartował i dawał przerwanie co 1ms czyli powinien wykonać :
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    co za tym idzie :
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

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

    Pin C13 na starcie ustawiony jest w stan niski i tak pozostaje. W taki sposób domyślam się że nie wykonuje się funkcja od przerwania SysTick. Co mogłem przeoczyć ?
  • REKLAMA
  • #5 17610043
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    baxter007 napisał:
    Pin C13 ... Co mogłem przeoczyć ?

    Małe cyferki odsyłaczy przy opisie pinu PC13 w datasheecie.

    Przy okazji istotne jest rozszerzenie pliku w którym masz to przerwanie - czy jest to plik C czy C++.
  • #6 17610150
    Konto nie istnieje
    Poziom 1  
  • #7 17610151
    baxter007
    Poziom 11  
    Posty: 55
    Pomógł: 3
    Dzięki bardzo za odpowiedź, funkcja :
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    już się wykonuje , ale
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    dalej nie
  • #8 17610268
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #9 17610349
    baxter007
    Poziom 11  
    Posty: 55
    Pomógł: 3
    Tak jak piszesz dodałem zmiane pinu który pierwotnie jest w stanie wysokim do:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    i się nie zmienia. Oto co się wykona :
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    a to już nie :
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    funkcja SysTick_Handler znajduje się w pliku stm32f1xx_it.c
    funkcje HAL_SYSTICK_IRQHandler oraz HAL_SYSTICK_Callback w stm32f1xx_hal_cortex.c
    być może funcję HAL_SYSTICK_Callback w pliku main.c powinienem wywołać inaczej niż to robię ? konsola wyrzuca 'HAL_SYSTICK_Callback' defined but not used ?
  • REKLAMA
  • #10 17610413
    Konto nie istnieje
    Poziom 1  
  • #11 17610494
    baxter007
    Poziom 11  
    Posty: 55
    Pomógł: 3
    W main.c czarów nie ma , bo stworzyłem nowy projekt golasa na potrzebę uproszczenia szukania problemu. Nie jestem programistą ani elektronikiem ,a do sprawy podchodzę hobbistycznie jako początkujący. Korzystam z System Workbenach for stm32 + Stm32CubeMX z bibliotekami HAL. Cube szykuje wszystko po czym ja tylko dodaję funkcję HAL_SYSTICK_Callback.
    plik main.c
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    część pliku stm32f1xx_it.c
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    oraz część pliku stm32f1xx_hal_cortex.c
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    gdy podstawiam moją zmianę poziomu na pinie w funkcji void SysTick_Handler(void) czy void HAL_SYSTICK_IRQHandler(void) czy tez __weak void HAL_SYSTICK_Callback(void) to działa, ale w main.c void HAL_SYSTICK_Callback(void) juz nie. z góry dzięki
  • Pomocny post
    #12 17610577
    Konto nie istnieje
    Poziom 1  
  • #13 17610618
    baxter007
    Poziom 11  
    Posty: 55
    Pomógł: 3
    Heh,
    tyle czasu zmarnowane, tak to jest jak się odgrzewa kotlety po kilku latach. dzięki bardzo.

Podsumowanie tematu

✨ Użytkownik napotkał problem z generowaniem przerwań przez timer SysTick w mikrokontrolerze STM32F103C8T6, mimo poprawnej konfiguracji w STM32CubeMX. Po wstępnej konfiguracji, funkcja SysTick_Handler była wywoływana, ale HAL_SYSTICK_Callback nie była wykonywana. Użytkownicy zasugerowali sprawdzenie, czy funkcja HAL_SYSTICK_Callback nie jest zadeklarowana jako static oraz przeniesienie jej poza funkcję main, co mogło powodować problemy z widocznością. Po wprowadzeniu poprawek, użytkownik potwierdził, że problem został rozwiązany.
Wygenerowane przez model językowy.
REKLAMA