Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Solved] STM32 USB CDC odczyt - komendy

kamil12239 15 Aug 2019 18:50 723 9
  • #1
    kamil12239
    Level 17  
    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ć?
    Code: c
    Log in, to see the code


    Przykład kodu mam ze strony Link

    plik main.c
    [code]
    Code: c
    Log in, to see the code


    oraz plik usbd_cdc_if.c
    Code: c
    Log in, to see the code


    Proszę o pomoc.
    [28-30.06.2022, targi] PowerUP EXPO 2022 - zasilanie w elektronice. Zarejestruj się za darmo
  • Helpful post
    #2
    User removed account
    Level 1  
  • Helpful post
    #4
    User removed account
    Level 1  
  • #6
    kamil12239
    Level 17  
    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#:
    Code: csharp
    Log in, to see the code


    Mój kod w C STM32:
    Code: c
    Log in, to see the code
  • Helpful post
    #7
    osctest1
    Level 21  
    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

    Code: csharp
    Log in, to see the code


    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.
  • Helpful post
    #9
    osctest1
    Level 21  
    Cały niepotrzebny. Wysyłasz nie C string. Czytaj poprzedni post