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

[STM32][System Workbench] Błędy przy imporcie projektu z keil V5

07 Wrz 2019 19:05 363 16
  • Poziom 22  
    Witam,
    chciałbym uruchomić moduł wyświetlacza e-papierowego Waveshare 2.9". Podłączyłem go do płytki Nucleo (z µC STM32-F103RB), następnie pobrałem projekt demonstracyjny stąd. Niestety został on napisany w środowisku Keil V5 (uVision5?), a ja posiadam System Workbench for STM32 (na bazie Eclipse). Otworzyłem zatem projekt za pomocą STM32CubeMX, wybrałem odpowiedni toolchain (SW4STM32) i pomyślnie udało się zaimportować wygenerowany projekt do System Workbench. W preferencjach (Project/Properties/C C++ Build/Settings/MCU GCC Compiler/Includes) dodałem ścieżki do folderów BSP i Fonts, tak jak sugerował to plik readme. Niestety jakakolwiek próba "zbuildowania" projeku kończy się lawiną błędów z powodu braku bibliotek

    Spoiler:
    Building file: ../Drivers/CMSIS/RTOS2/Template/cmsis_os1.c
    Invoking: MCU GCC Compiler
    D:\Documents\Konstrukcje\STM32\EPD-test\Debug
    arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -mfloat-abi=soft '-D__weak=__attribute__((weak))' '-D__packed=__attribute__((__packed__))' -DUSE_HAL_DRIVER -DSTM32F103xB -I"D:/Documents/Konstrukcje/STM32/EPD-test/Inc" -I"D:/Documents/Konstrukcje/STM32/EPD-test/Fonts" -I"D:/Documents/Konstrukcje/STM32/EPD-test/BSP" -I"D:/Documents/Konstrukcje/STM32/EPD-test/Drivers/STM32F1xx_HAL_Driver/Inc" -I"D:/Documents/Konstrukcje/STM32/EPD-test/Drivers/STM32F1xx_HAL_Driver/Inc/Legacy" -I"D:/Documents/Konstrukcje/STM32/EPD-test/Drivers/CMSIS/Device/ST/STM32F1xx/Include" -I"D:/Documents/Konstrukcje/STM32/EPD-test/Drivers/CMSIS/Include" -O2 -g3 -Wall -fmessage-length=0 -ffunction-sections -c -fmessage-length=0 -MMD -MP -MF"Drivers/CMSIS/RTOS2/Template/cmsis_os1.d" -MT"Drivers/CMSIS/RTOS2/Template/cmsis_os1.o" -o "Drivers/CMSIS/RTOS2/Template/cmsis_os1.o" "../Drivers/CMSIS/RTOS2/Template/cmsis_os1.c"
    In file included from ../Drivers/CMSIS/RTOS2/Template/cmsis_os1.c:28:0:
    ../Drivers/CMSIS/RTOS2/Template/cmsis_os.h:157:10: fatal error: cmsis_os2.h: No such file or directory
    #include "cmsis_os2.h"
    ^~~~~~~~~~~~~
    compilation terminated.
    make: *** [Drivers/CMSIS/RTOS2/Template/cmsis_os1.o] Error 1
    Drivers/CMSIS/RTOS2/Template/subdir.mk:18: recipe for target 'Drivers/CMSIS/RTOS2/Template/cmsis_os1.o' failed

    19:02:59 Build Finished (took 11s.60ms)


    Niestety to są moje początki z STM32 i nie mam pojęcia, jakie pliki mógłbym dołączyć, albo czy może popełniłem gdzieś błąd przy migrowaniu projektu z Keila do SW :/
  • PCBway
  • Poziom 15  
    xdiax napisał:
    ../Drivers/CMSIS/RTOS2/Template/cmsis_os1.c:28:0:
    na pewno pliki z katologu template są zbędne.

    Generalnie proponuję najpierw nauczyć się konfigurować projekty a dopiero później bawić się w takie importy. Stawiam, że to dopiero początek problemów.
  • Poziom 22  
    osctest1 napisał:
    na pewno pliki z katologu template są zbędne.

    Też mi się tak wydawało, ale po ich usunięciu pojawia się z kolei
    make: *** No rule to make target 'Drivers/CMSIS/RTOS2/Template/cmsis_os1.o', needed by 'EPD-test.elf'. Stop.

    osctest1 napisał:
    proponuję najpierw nauczyć się konfigurować projekty

    Polecałbyś może jakiś poradnik?
  • Poziom 15  
    xdiax napisał:
    Polecałbyś może jakiś poradnik?

    Obawiam się, że taki nie istnieje. Musisz zrobić wiele swoich projektów, gdzie bedziesz dodawać pliki, bilioteki do linkowania i różne incude i nabrać doświadczenia. Innej drogi nie ma.,

    Daj projekt to Ci go przerobię. (załacz do postu w jakims zipie) - bo tak jak pisałem będziesz miał kłopoty ze wszystkim.
  • PCBway
  • Poziom 22  
    osctest1 napisał:
    Innej drogi nie ma.

    No cóż, STM ma dość marny support w porównaniu do platformy Arduino (w sumie nie ma co się dziwić :P). Poniżej dołączam zipa (dla zainteresowanych: wzięty z repo powyżej). Mógłbyś w miarę możliwości opisać, co musiałeś zrobić, żeby go przekonwertować? Myślę, że ta wiedza przyda się nie tylko mi :)

    PS. Są jakieś popularniejsze i przyjemniejsze w użytkowaniu MDK od SysW?
  • Poziom 15  
    xdiax napisał:
    No cóż, STM ma dość marny support w porównaniu do platformy Arduino

    Ciekawa teoria. To Arduino ma jakikolwiek support? Można napisać do firmy Arduino w USA albo we Włoszech i o coś zapytać? Wątpię.
  • Poziom 22  
    Miałem na myśli bardzo rozbudowane forum - ale to raczej z powodu popularności.
    osctest1 napisał:
    i o coś zapytać

    Tylko po co, skoro Arduino to praktycznie Atmega z paroma elementami biernymi :)
  • Pomocny post
    Poziom 15  
    masz tu projekt,.

    Uwagi: nie łąduj wszystkiego co znajdziesz w internecie. do tego projektu naprawdę nie potrzebujesz CMSIS-DAP, DSP cz NN. Możesz je wyłaczyć z budowania ale ja Ci to usunąłem po prostu. W katalogiu debug masz już gotowy kompilat
  • Poziom 22  
    Dzięki wielkie za pomoc, plik projektu otwiera się ... ale niestety nie działa mimo poprawnych połączeń na płytce - ale to już nie jest wina importu. Mógłbyś po krótce opisać, w jaki sposób przerabiałeś projekt? Zmieniałeś w ustawieniach coś oprócz ścieżek do BSP i Fonts?
  • Poziom 15  
    Weż sobie poczytaj dokumentację eclipse albo szukaj : atollic manual . Tam masz opisane jak ustawiać scieżki, linkować pliki, ustawiać czy coś kompilować czy nie itd

    Ale tak naprawdę to jak już pisałem jeno praktyka czyni swoje.
  • Poziom 22  
    osctest1 napisał:
    praktyka czyni swoje

    Otóż to, dlatego teraz po lekturze spróbowałem swoich sił.
    Stworzyłem nowy projekt w CubeMX, na F103RB, wszystko skonfigurowałem jak w pliku demo dostarczonym przez Waveshare, wygenerowane pliki zaimportowałem do SW, podlinkowałem foldery (screenshot poniżej).
    [STM32][System Workbench] Błędy przy imporcie projektu z keil V5

    Ale oczywiście wyskakuje błąd:
    Spoiler:
    D:/Documents/Konstrukcje/STM32/EPD-2.9-B/SW4STM32/EPD-2.9-B/Inc/usart.h:24:8: error: unknown type name 'UART_HandleTypeDef'
    extern UART_HandleTypeDef huart1;
    ^~~~~~~~~~~~~~~~~~

    Co jest dziwne, bo w tym samym pliku wcześniej dodany jest plik nagłówkowy stm32f1xx_hal.h, który jest poprawnie linkowany przez kompilator.
    Jak temu zaradzić?

    PS. W razie "W" dołączam zipa z projektem, jest inny od tego podrzuconego kilka postów wyżej.

    [EDIT]
    Dodany plik jest w tym momencie przestarzały, zauważyłem, że walnąłem się w paru ustawieniach w CubeMX. Teraz ustawiam od nowa strukturę plików w SW, bo sypie błędami z gatunku undefined reference.

    [EDIT2]
    Zaktualizowałem plik. Nadal otrzymuję błąd
    Spoiler:
    main.c:109: undefined reference to `EPD_2in9bc_test'

    co jest absurdalne, ponieważ na górze pliku main.c jest zaincludowany plik EPD_Test.h, który zawiera tę definicję!
  • Pomocny post
    Poziom 22  
    xdiax napisał:
    Co jest dziwne, bo w tym samym pliku wcześniej dodany jest plik nagłówkowy stm32f1xx_hal.h, który jest poprawnie linkowany przez kompilator.

    Bardziej "inkludowany", bo to robi kompilator.

    xdiax napisał:

    co jest absurdalne, ponieważ na górze pliku main.c jest zaincludowany plik EPD_Test.h, który zawiera tę definicję!

    W pliku nagłówkowym masz tylko deklarację, a nie definicję, dlatego dostajesz błąd.
    Spojrzałem do załącznika i prawdopodobnie katalog "User" w ogóle nie podlega kompilacji ani linkowania.
    Sprawdzisz to zaglądając do katalogu Debug lub Release zobacz czy dostajesz pliki obiektowe ".o", odpowiadające plikom ".c" z katalogu "User" i jego podkatalogów.
    Jeśli nie dostajesz to powinieneś zawartość "User" przenieść do katalogu "Src" i odpowiednio zmodyfikować ścieżki do plików nagłówkowych.
  • Poziom 15  
    simw napisał:
    powinieneś zawartość "User" przenieść do katalogu

    Nic nie musi przenosić. Wystarczy prawy klik na katalog i w Properties Build zobaczyć, czy nie jest odznaczony "exclude from build"
  • Poziom 22  
    osctest1 napisał:
    Nic nie musi przenosić.

    Niestety w Navigatorze po lewej nie wyświetlał się w ogóle folder User (co byłoby logiczne, bo CubeMX nie wygenerował projektu w głównym folderze, tylko w /SW4STM32/EPD-2.9B/). Przeniosłem go tam, razem z folderami Src i Inc.
    Teraz z kolei kompilator nie widzi deklaracji pinów sterowania wyświetlaczem w DEV_config.h:
    [STM32][System Workbench] Błędy przy imporcie projektu z keil V5
    Nie wiem, czy mam rację, ale wydaje mi się, że powinny być deklarowane przez CubeMX, który ma ustawione takie etykiety na tych pinach. Wieczorem spróbuję jeszcze "na sztywno" podać porty i piny GPIO i dam znać.
    Dziękuję za pomoc :)
  • Poziom 15  
    Zrób refresh jeżeli katalog jest w drzewie projektu, albo dolinkuj do projektu (wtedy nie musisz kopiować). Linkowanie niestety utrudnia version control, bo trzeba tworzyć submoduły.
  • Poziom 22  
    Zmieniłem parę ustawień projektu, skompilował się w końcu poprawnie, wgrał ... Ale nie działa :D No cóż, na oscyloskopie widać sygnał na liniach sterujących, więc można powiedzieć, że udało się prawidłowo zaimportować projekt, a przyczyna leży w samym kodzie.
    Pozdrawiam wszystkich i dziękuję za pomoc
  • Poziom 22  
    Dla zainteresowanych - przyczyną niedziałania ekranu były sygnały D/C i BUSY wpięte do pinów PA2 i PA3 - na których działa również interfejs USART2, połączony w płytce nucleo do programatora. Mimo wyłączenia go w CubeMX, najwyraźniej pojawiała się tam jakaś komunikacja.