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.

arduino na STM32 z STLINK V2 - brak portu COM

17 Mar 2019 12:09 519 23
  • Poziom 13  
    Witam szanowne grono.
    Spotkałem się z takim problemem i nie umiem sobie z nim poradzić.
    Tworzę pewien projekt. Zainspirowany zastosowaniem procesora STM32 z tego tematu Link https://www.elektroda.pl/rtvforum/topic3484148.html postanowiłem go wykorzystać.
    arduino na STM32 z STLINK V2 - brak portu COM
    Załadowałem bootloader i pięknie wszystko się ładowało i testowało. Problem powstał, gdy projekt przeniosłem na płytkę i nie mogłem załadować programu. Okazało się, że wykorzystywałem piny, które są połączone do USB - dokładnie PA11 i PA12.

    arduino na STM32 z STLINK V2 - brak portu COM

    Podczas testu tych pinów nie używałem.
    Wpadłem na pomysł, aby zaprogramować przez programator ST LINK V2.

    arduino na STM32 z STLINK V2 - brak portu COM

    Wszystko ładnie się programuje. Jednak proces testowania już nie.

    arduino na STM32 z STLINK V2 - brak portu COM

    Przy testowaniu wykorzystuje się terminal z portu szeregowego.

    arduino na STM32 z STLINK V2 - brak portu COM

    arduino na STM32 z STLINK V2 - brak portu COM

    Programator ST LINK V2 nie uruchamia wirtualnego portu COM, przez co nie można uruchomić terminala.

    Czy ma ktoś jakiś pomysł lub zna inny driver dla tego programatora, który by taki port COM uruchomił pod ARDUINO. Zdaję sobie sprawę, że można to rozwiązać w inny sposób, jednak na początek chciałbym spróbować zrobić to standardowo.
  • PCBway
  • Poziom 30  
    janchar napisał:
    Programator ST LINK V2 nie uruchamia wirtualnego portu COM, przez co nie można uruchomić terminala.

    Jak podłączyłeś rzekomy VCOM na ST-LINK V2 do uruchamianej płytki? Pokaż schemat.
  • PCBway
  • Poziom 13  
    Na drugim obrazku płytka STM32. Piny przeznaczone do programowania przez programator STLINK V2 połączone jeden do jeden czyli SWDIO na płytce do programatora o tej samej nazwie SWDIO. Podobnie SWCLK. Na koniec GND. Co do Vcc to użyłem 3.3V lub bez niego dając oddzielne zasilanie. Z tym nie było różnicy.
  • Pomocny post
    Poziom 30  
    janchar napisał:
    Na drugim obrazku płytka STM32. Piny przeznaczone do programowania przez programator STLINK V2 połączone jeden do jeden czyli SWDIO na płytce do programatora o tej samej nazwie SWDIO. Podobnie SWCLK.

    No to podłączyłeś SWD do programowania/debugowania, gdzie połączenia rzekomego VCOM?

    Dodano po 37 [sekundy]:

    PS
    Może poczytaj o ST-LINK V2/1
  • Poziom 13  
    Więcej połączeń nie robi się. Przynajmniej tak mi się wydaje.

    Gdy programowałem i testowałem używając załadowanego bootloadera, a połączony byłem poprzez port USB, driver tworzył wirtualny port COM.

    Ponadto jak wspomniałeś programowania/debugowania... mi właśnie chodzi o to debugowanie.

    arduino na STM32 z STLINK V2 - brak portu COM

    arduino na STM32 z STLINK V2 - brak portu COM

    arduino na STM32 z STLINK V2 - brak portu COM
  • Poziom 30  
    janchar napisał:
    Więcej połączeń nie robi się.

    Skoro tak twierdzisz to nie rób.

    janchar napisał:
    Gdy programowałem i testowałem używając załadowanego bootloadera, a połączony byłem poprzez port USB,

    No właśnie. Ale twierdzisz, że więcej połączeń się nie robi.

    Pomijając to, pokaż mi w instrukcji ST-LINK V2 gdzie piszą o VCOM. Domyślam się też, że zignorowałeś moją radę i nie czytałeś o ST-LINK V2/1. Cóż, skoro wiesz lepiej.
  • Poziom 13  
    Nie czytałem instrukcji o ST-LINK V2.

    Wydaje mi się (gdybym wiedział to bym nie zawracał głowy) że jest alternatywą programowanie używając portu USB, poprzez ST-LINK czy poprzez UART.

    Alternatywą, czyli jedna z metod.

    Programowałem poprzez UART aby załadować bootloader i zakończone było sukcesem. Testowania, czyli uruchomienia terminala nie przeprowadzałem, gdyż nie miałem takiej potrzeby.

    Poprzez port USB (po wcześniejszym załadowaniu bootloadera) ładowałem program i uruchamiałem terminal. Pełen sukces do momentu, gdy fizycznie użyłem PIN-y PA11 i PA12, czyli gdy coś do nich elektrycznie podłączyłem.

    Poprzez programator ST-LINK ładowałem program, lecz terminala już nie można.
  • Poziom 30  
    janchar napisał:
    mi właśnie chodzi o to debugowanie.

    Do tego nie używa się VCOM ponadto Arduino IDE nie wspiera debugowania.

    janchar napisał:
    jest alternatywą programowanie używając portu USB, poprzez ST-LINK czy poprzez UART.

    Słyszysz, że dzwoni ale nie wiesz, w którym kościele.

    janchar napisał:
    Nie czytałem instrukcji o ST-LINK V2.

    Nie trzeba jej nawet czytać, wystarczy przeczytać jakie ma możliwości V/2 a jakie V2. Bez tego dalsza dyskusja jest bez sensu.

    janchar napisał:
    Pełen sukces do momentu, gdy fizycznie użyłem PIN-y PA11 i PA12, czyli gdy coś do nich elektrycznie podłączyłem.

    Wiesz do czego służą PA11 i PA12?

    Dodano po 2 [minuty]:

    janchar napisał:
    Poprzez programator ST-LINK ładowałem program, lecz terminala już nie można.

    I tak w kółko Macieju.
    Poczytaj o ST-LINK V2 i V2/1.
    Dowiedz się o USB więcej niż że jest to interfejs szeregowy.
    Co to VCOM, jak działa, co to mostek USB-UART.
    Poczytaj do czego służy JTAG i SWD.
    Zapoznaj się z bootloadem w STM32.
  • Poziom 13  
    LChucki napisał:
    Arduino IDE nie wspiera debugowania.

    Debugowanie przeprowadza się poprzez wyprowadzanie zmiennych na UART
    czyli dalej na terminal. Nie chodzi mi o wykonywanie krokowe instrukcji, gdyż tak też można. Idąc tym tropem można przeprowadzać debugowanie za pomocą diody świecącej. Jednak w tym przypadku staje się to męczące.

    LChucki napisał:

    Słyszysz, że dzwoni ale nie wiesz, w którym kościele.

    Nie bardzo rozumie. Gdybym wiedział, to bym nie pytał.

    LChucki napisał:

    Nie trzeba jej nawet czytać, wystarczy przeczytać jakie ma możliwości V/2 a jakie V2. Bez tego dalsza dyskusja jest bez sensu.

    Chyba będę musiał sięgnąć do innych źródeł.

    LChucki napisał:

    Wiesz do czego służą PA11 i PA12?

    W moim przypadku wykorzystuję je do sterowania tranzystorami n-mosfet.
    Ponadto wynika z dokumentacji, że są to piny D+ i D-, które mogą być użyte do portu USB.

    Dodano po 2 [minuty]:

    LChucki napisał:

    Poczytaj o ST-LINK V2 i V2/1.
    Dowiedz się o USB więcej niż że jest to interfejs szeregowy.
    Co to VCOM, jak działa, co to mostek USB-UART.
    Poczytaj do czego służy JTAG i SWD.
    Zapoznaj się z bootloadem w STM32.

    Im dalej w las, tym więcej drzew.
    Chyba nie o to mi chodzi. Dziękuję za pomoc i za poświęcony czas.
  • Poziom 30  
    janchar napisał:
    LChucki napisał:
    Arduino IDE nie wspiera debugowania.

    Debugowanie przeprowadza się poprzez wyprowadzanie zmiennych na UART

    To uruchom ten UART w swoim programie i podłącz przejściówkę USB-UART albo użyj ST-LINK V2/1.

    janchar napisał:

    Nie chodzi mi o wykonywanie krokowe instrukcji, gdyż tak też można.

    Pułapki, praca krokowa, podgląd zmiennych to prawdziwe debugowanie a nie wypluwanie zmiennych na UART.

    janchar napisał:

    Idąc tym tropem można przeprowadzać debugowanie za pomocą diody świecącej.

    Do tego dążysz używając UART zamiast debugera.

    janchar napisał:

    LChucki napisał:

    Słyszysz, że dzwoni ale nie wiesz, w którym kościele.

    Nie bardzo rozumie. Gdybym wiedział, to bym nie pytał.

    Napisałem z jakimi tematami masz się zapoznać. Nadal nie przeczytałeś o różnicach między ST-LINK V2 a V2/1. Wiedza sama nie przyjdzie.


    janchar napisał:

    LChucki napisał:

    Wiesz do czego służą PA11 i PA12?

    W moim przypadku wykorzystuję je do sterowania tranzystorami n-mosfet.
    Ponadto wynika z dokumentacji, że są to piny D+ i D-, które mogą być użyte do portu USB.

    Więc czemu się dziwisz, ze gdy miałeś pseudo debugowanie przez CDC i wyłączyłeś USB, to owo debugowanie przestało działać? Jak w Arduino UNO wykorzystasz TX0 i RX0 do sterowania tranzystorami to monitor będzie działać?
    <ciach>

    LChucki napisał:

    Poczytaj o ST-LINK V2 i V2/1.
    Dowiedz się o USB więcej niż że jest to interfejs szeregowy.
    Co to VCOM, jak działa, co to mostek USB-UART.
    Poczytaj do czego służy JTAG i SWD.
    Zapoznaj się z bootloadem w STM32.

    Im dalej w las, tym więcej drzew.
    [/quote]
    Nie masz podstaw a bez tego możesz liczyć najwyżej na szczęście. Jak zrozumiesz różnicę pomiędzy UART a USB, co robi mostek USB-UART to wszystko stanie się proste.

    Dodano po 2 [minuty]:

    rs6000 napisał:
    a tu porada sprowadza się do do tego, aby znalazł rozwiązanie sam

    Nie znalazł sam, tylko zaznajomił się z tym co niezbędne. Jak ktoś nie odróżnia USB wbudowanego w uC od mostka USB-UART to jak mam pomóc? <ciach>

    Moderowany przez Marek_Skalski:

    Zbędne uwagi usunąłem.

  • Pomocny post
    Poziom 34  
    janchar napisał:
    Czy ma ktoś jakiś pomysł lub zna inny driver dla tego programatora, który by taki port COM uruchomił pod ARDUINO. Zdaję sobie sprawę, że można to rozwiązać w inny sposób, jednak na początek chciałbym spróbować zrobić to standardowo.


    Nie można wykorzystać ST-LINK V2 jako monitor portu szeregowego w Arduino IDE, analogicznie (w dużym przybliżeniu) z tego samego powodu, z którego nie zadziała monitor portu szeregowego w Arduino IDE z programatorem USBasp w wypadku płytki Arduino z AVR.
    Aby skorzystać z monitora portu szeregowego musisz podpiąć się bezpośrednio do portu USB na płytce.

    Temat wielokrotnie poruszany na listach dyskusyjnych stm32duino np. tutaj.
  • Pomocny post
    Poziom 30  
    khoam napisał:
    Nie można wykorzystać ST-LINK jako monitor portu szeregowego w Arduino IDE,

    Ale ST-LINK V2/1 tak.

    Moderowany przez Marek_Skalski:

    Brak związku z tematem, ponieważ Autor nie posiada tego urządzenia. Zostawiam w temacie, aby zachować kontekst kolejnych postów.

  • Pomocny post
    Poziom 34  
    LChucki napisał:
    khoam napisał:
    Nie można wykorzystać ST-LINK jako monitor portu szeregowego w Arduino IDE,

    Ale ST-LINK V2/1 tak.


    Odniosłem się do programatora, którym dysponuje Autor (zdjęcie w pierwszym poście).

    Z tego co pamiętam, ST-LINK V2-1 instalowany jest bezpośrednio na płytkach Nucleo i Discovery, a taką płytką Autor też nie dysponuje.
    Jeżeli masz namiar na ST-LINK V2-1 w wersji standalone, to prośba o link - Autorowi tego wątku też się może przydać.
  • Poziom 13  
    khoam napisał:

    Nie można wykorzystać ST-LINK V2 jako monitor portu szeregowego w Arduino IDE, analogicznie (w dużym przybliżeniu) z tego samego powodu, z którego nie zadziała monitor portu szeregowego w Arduino IDE z programatorem USBasp w wypadku płytki Arduino z AVR.


    Co prawda nie tego się spodziewałem, ale skoro tak mówisz, to tak to przyjmuję. Ja jestem za cienki na to, aby napisać driver pod windowsa. Przyjmuję więc, że się nie da i w takim razie muszę sobie inaczej z tym poradzić.
    Dziękuję za odpowiedź na nurtujące mnie pytanie i pozostaje mi tylko zamknąć temat, aczkolwiek zawsze warto poczytać o czymś nowym.
    Dziękuję wszystkim.
  • Poziom 34  
    LChucki napisał:
    Ponadto, pseudo debugowaniu przez VCOM bliżej do debugowania metodą Mirek36 (muszę sprawdzić czy forum jeszcze aktywne) przy użyciu LED niż do prawdziwego debugowania. Niestety autor wychował się na Arduino i ma złe pojęcie o debugowaniu

    Serial w Arduino HAL nie służy tyle debugowaniu, co monitorowaniu na bieżąco podstawowych/istotnych parametrów programu w trakcie jego działania. W wielu przypadkach to wystarcza, a same funkcje monitorowania mogą być umieszczone na stałe w kodzie, ale mogą być dołączane opcjonalnie do kodu wynikowego po ustawieniu odpowiedniej flagi.
  • Poziom 30  
    janchar napisał:
    khoam napisał:

    Nie można wykorzystać ST-LINK V2 jako monitor portu szeregowego w Arduino IDE, analogicznie (w dużym przybliżeniu) z tego samego powodu, z którego nie zadziała monitor portu szeregowego w Arduino IDE z programatorem USBasp w wypadku płytki Arduino z AVR.


    Co prawda nie tego się spodziewałem, ale skoro tak mówisz, to tak to przyjmuję. Ja jestem za cienki na to, aby napisać driver pod windowsa.

    Nic nie trzeba pisać pod Windę. Gdybyś poczytał o samym ST-LINK V2-1 to już wiele byś wiedział. Napisałem też tematy innych zagadnień, z którymi trzeba się zapoznać. Niestety, choć piszesz
    janchar napisał:
    Jaka jest różnica pomiędzy UART i USB wiem.

    to tak do końca tego nie wiesz i w tym cały problem.
  • Poziom 34  
    LChucki napisał:
    Taniej kupić

    Taniej wyjdzie zakupienie konwertera USB/UART i podłączenie go do RX1/TX1.
    W Arduino HAL dla STM32 można ustawić ten port jako Serial dla monitora w Arduino IDE.
    Wadą tego rozwiązania będą dwa kable USB od płytki do komputera.
  • Poziom 30  
    khoam napisał:
    Serial w Arduino HAL nie służy tyle debugowaniu, co monitorowaniu na bieżąco podstawowych/istotnych parametrów programu w trakcie jego działania.

    Rozwijając temat, debugera używam zawsze i wszędzie ale poza nim, przez USB lub UART wysyłam informacje diagnostyczne i daję możliwość mniejszej lub większej kontroli nad programem. Dlatego w moich projektach znajdują się "dziwne" złącza np do RX, TX. Bywa, że wyświetlam informacje na LCD przyłączanym do SPI lub I2C, którego w docelowym urządzeniu nie ma, pozostaje tylko złącze.

    UART, USB czy inne złącze diagnostyczne uzupełnia debuger, niestety, nie ma możliwości, aby zastąpiło ono debuger w prosty sposób. Można napisać program monitora, ale czy warto, przy cenie ST-LINK? Ponadto, dobry monitor, pochłonąłby pewnie z 30kB, przeważnie nie dałby możliwości dynamicznego dodawania pułapek, a sprzętowy debuger nie zwiększ objętości kodu wynikowego wcale lub nieznacznie a pułapki można dodawać.

    Dodano po 7 [minuty]:

    khoam napisał:
    LChucki napisał:
    Taniej kupić

    Taniej wyjdzie zakupienie konwertera USB/UART i podłączenie go do RX1/TX1.

    Jeszcze taniej (0zł) wykorzystać sprzętowe USB w uC no ale tu wiedza na poziomie wydaje mi się, ze odróżniam USART od USB nie wystarczy chyba, że Arduino coś tam ułatwia.
  • Poziom 34  
    LChucki napisał:
    UART, USB czy inne złącze diagnostyczne uzupełnia debuger, niestety, nie ma możliwości, aby zastąpiło ono debuger w prosty sposób. Można napisać program monitora, ale czy warto, przy cenie ST-LINK? Ponadto, dobry monitor, pochłonąłby pewnie z 30kB, przeważnie nie dałby możliwości dynamicznego dodawania pułapek, a sprzętowy debuger nie zwiększ objętości kodu wynikowego wcale lub nieznacznie a pułapki można dodawać.


    Wszystkie te piękne rzeczy, o których piszesz na temat debuggera nie mają wsparcia w Arduino IDE, którego używa Autor.
    Dopóki Autor nie przesiądzie się na inne IDE ze wsparciem dla Arduino HAL, ST-LINK może użyć co najwyżej do wgrywania kodu - chociaż nawet i to się da zrobić bez tego programatora: Link

    Dodano po 10 [minuty]:

    LChucki napisał:
    Jeszcze taniej (0zł) wykorzystać sprzętowe USB w uC no ale tu wiedza na poziomie wydaje mi się, ze odróżniam USART od USB nie wystarczy chyba, że Arduino coś tam ułatwia.

    No nie wiem, czy to się tak da zrobić, jeżeli jednocześnie chcemy korzystać z ST-LINK oraz monitorować pracę urządzenia przez Serial w Arduino HAL, ale popraw mnie i wyjaśnij nieco więcej, jeśli się mylę.
  • Poziom 30  
    khoam napisał:

    LChucki napisał:
    Jeszcze taniej (0zł) wykorzystać sprzętowe USB w uC no ale tu wiedza na poziomie wydaje mi się, ze odróżniam USART od USB nie wystarczy chyba, że Arduino coś tam ułatwia.

    No nie wiem, czy to się tak da zrobić, jeżeli jednocześnie chcemy korzystać z ST-LINK oraz monitorować pracę urządzenia przez Serial w Arduino HAL, ale popraw mnie i wyjaśnij nieco więcej, jeśli się mylę.

    Po podłączeniu ST-LINK V2-1 w systemie pojawią się 3 urzadzenia:
    - ST-LINK - nie trzeba wyjaśniać.
    - VCOM - ST-LINK V2-1 ma wyprowadzone TX i RX.
    - Pamięć masowa - wystarczy skopiować do niej BIN i jego zawartością zastanie zaprogramowany uC.

    Dodano po 1 [minuty]:

    khoam napisał:
    LChucki napisał:
    UART, USB czy inne złącze diagnostyczne uzupełnia debuger, niestety, nie ma możliwości, aby zastąpiło ono debuger w prosty sposób. Można napisać program monitora, ale czy warto, przy cenie ST-LINK? Ponadto, dobry monitor, pochłonąłby pewnie z 30kB, przeważnie nie dałby możliwości dynamicznego dodawania pułapek, a sprzętowy debuger nie zwiększ objętości kodu wynikowego wcale lub nieznacznie a pułapki można dodawać.


    Wszystkie te piękne rzeczy, o których piszesz na temat debuggera nie mają wsparcia w Arduino IDE, którego używa Autor.
    Dopóki Autor nie przesiądzie się na inne IDE

    Jak zabiera się za ARM to chyba logiczne, ze długo z Arduino IDE nie pociągnie i przesiądzie się na normalne IDE.
  • Poziom 34  
    LChucki napisał:
    Po podłączeniu ST-LINK V2-1 w systemie pojawią się 3 urzadzenia:

    Autor używa ST-LINK V2, a nie ST-LINK V2-1.
    Jeżeli zacznie używać ST-LINK V2-1, to cała ta dyskusja w tym wątku jest bezprzedmiotowa, a dostępność interfejsu szeregowego dla Serial w Arduino IDE oczywista.
  • Pomocny post
    Poziom 1  
  • Poziom 34  
    Lepszym środowiskiem programowania będzie również PlatformIO (dostępne wtyczki do Eclipse i Visual Studio Code), gdzie jest obsługa debuggera oraz unit testing. Przesiadka z Arduino IDE będzie o tyle łatwiejsza, że samo PIO ma bardzo dobre wsparcie dla Arduino HAL - migracja kodu jest prosta, po utworzeniu pliku z definicją platformy sprzętowej, płytki oraz frameworka (w tym wypadku Arduino), wystarczy tylko wgrać swoje pliki źródłowe do głównego katalogu projektu. Źródło

    Używanie Arduino HAL w PIO nie oznacza oczywiście braku możliwości skutecznego użycia debuggera, opcja ta jest cały czas dostępna również dla kodu rozwijanego z wykorzystaniem Arduino HAL, jak również z użyciem programatora ST-LINK. Źródło