padus Napisano Lipiec 18, 2021 Udostępnij Napisano Lipiec 18, 2021 Prosto, zwięźle i na temat. Dzięki za odpowiedź. Czy autorzy przewidują w tym kursie odcinek dotyczący portu USB? Chodzi mi o to, że chciałbym się podłączyć do procesora nie poprzez przejściówkę i USART2 ale bezpośrednio poprzez USB. Nigdy tego nie robiłem, podejrzewam, że jest jakaś biblioteka na procesor oraz sterowniki do PC z wirtualnym COM'em. Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Lipiec 20, 2021 Udostępnij Lipiec 20, 2021 @padus w ramach tego kursu nie poruszamy tematyki USB, ale nie wykluczone, że temat ten pojawi się w ewentualnej kontynuacji 😉 Jeśli jesteś mocno zainteresowany USB to zerknij do naszego starego, zarchiwizowanego kursu STM32F4 - tam pojawił się przykład wykorzystanie USB. Uprzedzam jednak, że jest to stary materiał i część informacji może być już nieaktualna (dlatego kurs został zarchiwizowany). 1 Link do komentarza Share on other sites More sharing options...
padus Lipiec 21, 2021 Autor tematu Udostępnij Lipiec 21, 2021 Cytat ...zerknij do naszego starego, zarchiwizowanego kursu STM32F4 - tam pojawił się przykład wykorzystanie USB.... Dokładnie o to mi chodziło. Dzięki. Link do komentarza Share on other sites More sharing options...
Gieneq Lipiec 21, 2021 Udostępnij Lipiec 21, 2021 (edytowany) Pozwoliłem sobie wydzielić ponieważ temat jest dość ciekawy i można coś tu dodać. Link do tematu, z którego został wydzielony: @padus Niedawno próbowałem swoich sił w podłączeniu STM32 do komputera jako myszy wiec mogę coś podpowiedzieć. Nie jeste mspecjalistą ale działa 🙂 Pierwszy problem to że potrzebujesz oscylator HSE - kwarc X3 8MHz, którego nie masz wlutowanego fabrycznie na płytce. Jak przylutujesz (uwaga na pady zworek, które łatwo oderwać...) to wchodzisz w RCC i ustawiasz HSE: Ustawienia USB Clock config: Middleware -> wybierz HID Tylko problem... na płytce nie ma dodatkowego USB. Więc trzeba zrobić swoje. Tu podpatrzyłem ze schematu STM32F3 Discovery, złącze i kilka rezystorów: Diody możesz sobie dla testu darować, bo zasilanie masz z mini USB. Podłączasz złącze USB możliwie blisko wyprowadzeń - na luźnych kabelkach mogą być problemy. U mnie to wygląda tak... Domyślnie deskryptor dotyczy prac w roli myszy, możesz to sprawdzić w pliku usbd_hid.c: /* USB HID device Other Speed Configuration Descriptor */ __ALIGN_BEGIN static uint8_t USBD_HID_OtherSpeedCfgDesc[USB_HID_CONFIG_DESC_SIZ] __ALIGN_END = { 0x09, /* bLength: Configuration Descriptor size */ USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */ USB_HID_CONFIG_DESC_SIZ, /* wTotalLength: Bytes returned */ 0x00, 0x01, /* bNumInterfaces: 1 interface */ 0x01, /* bConfigurationValue: Configuration value */ 0x00, /* iConfiguration: Index of string descriptor describing the configuration */ #if (USBD_SELF_POWERED == 1U) 0xE0, /* bmAttributes: Bus Powered according to user configuration */ #else 0xA0, /* bmAttributes: Bus Powered according to user configuration */ #endif USBD_MAX_POWER, /* MaxPower 100 mA: this current is used for detecting Vbus */ /************** Descriptor of Joystick Mouse interface ****************/ /* 09 */ 0x09, /* bLength: Interface Descriptor size */ USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface descriptor type */ 0x00, /* bInterfaceNumber: Number of Interface */ 0x00, /* bAlternateSetting: Alternate setting */ 0x01, /* bNumEndpoints */ 0x03, /* bInterfaceClass: HID */ 0x01, /* bInterfaceSubClass : 1=BOOT, 0=no boot */ 0x02, /* nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse */ 0, /* iInterface: Index of string descriptor */ W linii: 0x02, /* nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse */ Masz dalej w tym pliku deskryptor podstawowej konfiguracji myszy: __ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] __ALIGN_END = { 0x05, 0x01, 0x09, 0x02, 0xA1, 0x01, 0x09, 0x01, 0xA1, 0x00, 0x05, 0x09, 0x19, 0x01, 0x29, 0x03, 0x15, 0x00, 0x25, 0x01, 0x95, 0x03, 0x75, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x05, 0x81, 0x01, 0x05, 0x01, 0x09, 0x30, 0x09, 0x31, 0x09, 0x38, 0x15, 0x81, 0x25, 0x7F, 0x75, 0x08, 0x95, 0x03, 0x81, 0x06, 0xC0, 0x09, 0x3c, 0x05, 0xff, 0x09, 0x01, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x02, 0xb1, 0x22, 0x75, 0x06, 0x95, 0x01, 0xb1, 0x01, 0xc0 }; Funkcja do przygotowania bufora do wysłania: static void Mouse_Data_Send(uint8_t* buff, uint8_t button, int8_t Cursor_Move_X, int8_t Cursor_Move_Y, int8_t Scrool_Value) { buff[1] = 0x00; buff[2] = 0x00; buff[3] = 0x00; buff[4] = 0x00; //Lub memset memset(buff, 0x00, 4); if(Cursor_Move_X <= 127 && Cursor_Move_Y >= (-127) && Cursor_Move_X <= 127 && Cursor_Move_Y >= (-127)) { buff[1]=Cursor_Move_X; buff[2]=Cursor_Move_Y; } else { buff[1]=0; buff[2]=0; } buff[0] = button; } Dalej mamy bardzo wygodną funkcję do komunikacji: USBD_HID_SendReport(&hUsbDeviceFS,HID_Buffer,4); I przykładowy program kręcący kursorem: /* USER CODE BEGIN WHILE */ float mx0 = 0.0, my0 = 0.0, mx1, my1; float rad = 0.0, theta = 0.0; while (1) { theta += 20.0/250.0; rad = 90.0*cos(theta * 4.0); mx1 = (int)(rad*cos(theta)); my1 = (int)(rad*sin(theta)); Mouse_Data_Send(HID_Buffer, 0x00, (int)(mx1-mx0), (int)(my1-my0), 0x00); USBD_HID_SendReport(&hUsbDeviceFS,HID_Buffer,4); mx0 = mx1; my0 = my1; HAL_Delay(20); /* USER CODE END WHILE */ Wgrywamy, podłaczamy: I efekt jest taki: Edytowano Lipiec 21, 2021 przez Gieneq Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
H1M4W4R1 Lipiec 21, 2021 Udostępnij Lipiec 21, 2021 1 godzinę temu, Gieneq napisał: Pierwszy problem to że potrzebujesz oscylator HSE - kwarc X3 8MHz, którego nie masz wlutowanego fabrycznie na płytce. Nie zawsze potrzebujesz - np. STM32L432KBU6 obsługuje USB bez kwarcu. Ale to tylko taka luźna dygresja. https://oshwlab.com/business/stm32er3_copy Może nie jest to najlepszy przykład, ale jest tam ogarnięte USB (CDC) bez użycia kwarcu. 1 Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »