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] Sterowanie diodą przez USB w STM32F103VBT6 - jak aktywować LEDON?

kamil12239 15 Sie 2019 18:50 996 9
REKLAMA
  • #1 18117065
    kamil12239
    Poziom 17  
    Posty: 244
    Pomógł: 18
    Ocena: 45
    Szanowni Forumowicze,
    Mam problem z Virtual Port COM. Używam procesora STM32F103VBT6. Na nim chcę zrobić taki sterownik uniwersalny kilka wejść wyjść oraz USB do wysyłania komend i odczytu stanu wejść i wyjść. Chcę zrobić to tak że np mam wyjście powiedzmy PA0 i jest tam podłączona dioda i po wysłaniu komendy "LEDON" włączy się. Niestety mając do dyspozycji taki kod nie jest to możliwe. Czy moglibyście pomóc dociec co może być nie tak? Płytka na pewno działa sprawdzałem wszystko po kolei włączajac prostą komendą każde wyjścia i wejścia. Płytka mojego wykonania. Komunikacja USB też działa mogę np wysłać ADC i w terminalu mi wyświetla. Poniżej kod:
    Czy ta funkcja powinna działać?
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Przykład kodu mam ze strony Link

    plik main.c
    [code]
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    oraz plik usbd_cdc_if.c
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Proszę o pomoc.
  • REKLAMA
  • Pomocny post
    #2 18117081
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • Pomocny post
    #4 18117207
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #5 18118754
    kamil12239
    Poziom 17  
    Posty: 244
    Pomógł: 18
    Ocena: 45
    Kolega drobok trafił ze wszytkimi moimi problemami. Nie wiem czemu zaczynałem w ten sposób kombinować z "switchem" oraz "ifem" to nie mogło tak czy inaczej działać. To wieczorne zmęczenie. Pozdrawiam Forumowiczów.
  • REKLAMA
  • #6 18131342
    kamil12239
    Poziom 17  
    Posty: 244
    Pomógł: 18
    Ocena: 45
    Mam problem z wysłaniem komendy i odbioru wartość 16bit w urządzeniu. Sprawa wygląda tak:

    Przez aplikacje napisaną w C# wpf komunikuję się z urządzeniem. Mam tam Slider który ma sterować przetwornikiem DAC 16bit. Komunikacja po SPI. Wzorowałem się na stronie: Link

    W obecnej chwili działa mi on ale mogę wysyłać tylko starszy bardziej znaczący bit wartość od 0-255. No i działa tylko w górę w dół już nie. Ja chce przerobić kod w ten sposób że: odbiór (komenda, wartość (16bit)); Jak to zakodować?

    Mój kod w C#:
    Kod: C#
    Zaloguj się, aby zobaczyć kod


    Mój kod w C STM32:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #7 18131432
    osctest1
    Poziom 21  
    Posty: 451
    Pomógł: 36
    Ocena: 74
    1. C# ma inne stringi niż C. I zrobienie mainport.Write("DAC"); wyśle tylko 3 znaki a nie cztery jak C oczekuje.

    Tak że strcmp w C ma UB. bo to co jest odebrane nie jest C stringiem.

    Dodatkowo pokaż prawdziwy kod, bo masz złą ilość nawiasów w C#.


    Możesz:

    1. Dodać zero w kodzie C
    2. Dodać zer w kodzie C# np

    Kod: C#
    Zaloguj się, aby zobaczyć kod


    Zrobienie kolejnego sp.Write(...) z samym zerem może (sądząc po tym, jak piszesz) nie zadziałać, ponieważ może (ale nie musi) to przyjść w 2 różnych transmisjach USB.
  • Pomocny post
    #9 18131450
    osctest1
    Poziom 21  
    Posty: 451
    Pomógł: 36
    Ocena: 74
    Cały niepotrzebny. Wysyłasz nie C string. Czytaj poprzedni post

Podsumowanie tematu

✨ Użytkownik ma problem z aktywacją diody LED podłączonej do portu PA0 w mikrokontrolerze STM32F103VBT6 za pomocą komendy "LEDON" przez port USB. Otrzymał wskazówki dotyczące poprawnego porównania ciągów znaków, sugerując użycie funkcji strcmp zamiast operatora porównania. Po zastosowaniu strcmp, użytkownik zapytał o implementację switch-case, co również zostało skrytykowane jako niewłaściwe. W dalszej części dyskusji poruszono problemy z komunikacją między aplikacją C# a urządzeniem, w tym konieczność dodania znaku końca do wysyłanych danych. Użytkownik ostatecznie potwierdził, że dodanie zera w kodzie rozwiązało jego problem.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA