рдерд░реНрдорд▓ рдЗрдореЗрдЬрд░ рдХреЛ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ? рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ! рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдпрд╣ USB рд╣реЛрд╕реНрдЯ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде STM32 рдФрд░ рдбрдбрдЧреЗрдЯ рд╕реЗ рд╕реАрдХ рдерд░реНрдорд▓ рдерд░реНрдорд▓ рдЗрдореЗрдЬрд░ рд╣реИ!
рд╕реАрд░рдордерд░реНрдорд▓ рдерд░реНрдорд▓ рдЗрдореЗрдЬрд░ рдХреА рдЖрдВрдЦреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЛрд▓реНрдбрд░рд┐рдВрдЧ рдЖрдпрд░рдирдкрд░рд┐рдЪрдп
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдерд░реНрдорд▓ рдЗрдореЗрдЬрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЧреИрдЬреЗрдЯреНрд╕ рдореЗрдВ рдЖрдпрд╛ рд╣реИ, рдареАрдХ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рд╛ рд╣реИред рдФрд░ рдЗрди рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ, рдЧреИрдЬреЗрдЯреНрд╕ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЙрдкрд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдВрдкреНрдпреВрдЯрд░ рдпрд╛ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░рд╣ рдХреЗ рд╕реЗрдЯ-рдЯреЙрдк рдмреЙрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЖрдЬ рд╣рдо
рд╕реАрдХ рдерд░реНрдорд▓ рдерд░реНрдорд▓ рдЗрдореЗрдЬрд░ рдХреЛ рдПрд╕рдЯреАрдПрдо 32 рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рдФрд░ рдХрдВрдкрдиреА рдбрдбрдЧреЗрдЯ рдиреЗ рдореБрдЭреЗ рдЗрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ред Geektimes рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдкрд░, рдЗрд╕ рдерд░реНрдорд▓ рдЗрдореЗрдЬрд░ рдХреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛: рдЗрд╕рдиреЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдХрд╛рдо рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛, рд╕рд╛рде рд╣реА рдЗрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдПрдХ рдкреАрд╕реА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦред рдореЗрд░реА рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ, рдореИрдВ USB рд╣реЛрд╕реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ STM32 рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗ рд╕реАрдХ рдерд░реНрдорд▓ рдерд░реНрдорд▓ рдЗрдореЗрдЬрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ
рдЗрддрдирд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ! рдЖрдкрдХреЗ рд╕рднреА STM32 рдореЗрдВ USB рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╣реЛрд╕реНрдЯ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рдФрд░ рдПрд▓рд╕реАрдбреА рд╕реНрдХреНрд░реАрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдХрд▓реНрдк STM32F4 - рдбрд┐рд╕реНрдХрд╡рд░реА рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ STM32F746G-Discovery рдмреЛрд░реНрдб рдерд╛ред рддрджрдиреБрд╕рд╛рд░, рд╡рд┐рд╡рд░рдг рдЗрд╕ рдмреЛрд░реНрдб рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди! рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб CubeMX рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рдФрд░ EVM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдореИрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рднреБрдЧрддрд╛рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВред
рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ
рдпрд╣ рдерд░реНрдорд▓ рдЗрдореЗрдЬрд░ USB рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдЪрд╛рд░ рдХрд░рддреЗ рд╕рдордп рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рднреА рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╕реАрдзреЗ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд▓реНрдХ-рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред рдХрдВрдЯреНрд░реЛрд▓ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдкрд░ рдХрдорд╛рдВрдб (рдЕрдиреБрд░реЛрдз) рднреЗрдЬрдХрд░, рдЖрдк рдерд░реНрдорд▓ рдЗрдореЗрдЬрд░ рдХреЛ рдЪрд╛рд▓реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдХреИрд▓рд┐рдмреНрд░реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдПрдХ рдлреНрд░реЗрдо, рдпрд╛ рдХрдИ рдлреНрд░реЗрдо рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реАрдХ рдерд░реНрдорд▓ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддреГрдд рдХрд╛рдо рдЗрд╕
рдордВрдЪ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдерд░реНрдорд▓ рдЗрдореЗрдЬрд░ рдХреЗ рд▓рд┐рдП рдПрд╕рдЯреАрдПрдо 32 рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
1) рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдмреЛрд░реНрдб рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА USB рд╣реЛрд╕реНрдЯ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдВ (рдореИрдВрдиреЗ STM32 USB рд╣реЛрд╕реНрдЯ CDC рдЙрджрд╛рд╣рд░рдг STM32F7 CubeMX рдирдореВрдирд╛ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рд▓рд┐рдпрд╛);
2) рдбрд┐рд╡рд╛рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджреЗрдВ;
3) рдПрдВрдбрдкреЙрдЗрдВрдЯ рдФрд░ рдбреЗрдЯрд╛ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрдврд╝рдиреЗ / рд▓рд┐рдЦрдиреЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реИрдкрд░ рд▓рд┐рдЦреЗрдВ;
4) рдХрдЪреНрдЪреЗ рдбреЗрдЯрд╛ рдХреЛ рдХреБрдЫ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд┐рдЦреЗрдВ;
5) рд░рдВрдЧ рдореЗрдВ рдПрдХ рдореЛрдиреЛрдХреНрд░реЛрдо рдЫрд╡рд┐ рдХреЛ рд░рдВрдЧрдиреЗ рдХреЗ рд▓рд┐рдП LUT (рдХрд▓рд░ рд▓реБрдХ рдЕрдк рдЯреЗрдмрд▓) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рдлрд╝рд┐рдЪ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдХреЗ рдПрд╕рдЯреАрдПрдо 32 рдкрд░рд┐рд╡рд╛рд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдПрд▓рд╕реАрдбреА рд╕реНрдХреНрд░реАрди рдХреЗ рд╕рд╛рде рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо libusb рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ HAL рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛:
Libusb рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛрдбint libusb_control_transfer(libusb_device_handle* dev_handle, uint8_t request_type, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char* data, uint16_t wLength, unsigned int timeout) { hUSBHost.Control.setup.b.bmRequestType = request_type; hUSBHost.Control.setup.b.bRequest = bRequest; hUSBHost.Control.setup.b.wValue.w = wValue; hUSBHost.Control.setup.b.wIndex.w = wIndex; hUSBHost.Control.setup.b.wLength.w = wLength; int status; do { status = USBH_CtlReq(&hUSBHost, data, wLength); } while (status == USBH_BUSY); if (status != USBH_OK) { hUSBHost.RequestState = CMD_SEND; return 0; } else { return wLength; } }
рддрдм рд╣рдо
рдпрд╣рд╛рдВ рдЬрд╛рддреЗ
рд╣реИрдВ рдФрд░
seller_transfer рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЪреЛрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
seller_transfer рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛрдб int vendor_transfer(bool direction, uint8_t req, uint16_t value, uint16_t index, uint8_t * data, uint8_t size, int timeout) { int res; uint8_t bmRequestType = (direction ? LIBUSB_ENDPOINT_IN : LIBUSB_ENDPOINT_OUT) | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_INTERFACE; uint8_t bRequest = req; uint16_t wValue = value; uint16_t wIndex = index; uint8_t * aData = data; uint16_t wLength = size; if (!direction) {
рдЕрдЧрд▓рд╛, рд╣рдо рдЪрд┐рддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рд╕реАрдбреАрд╕реА рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЬрд╛рд╕реВрд╕реА, рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рд╣реИред
USB рдбреЗрдЯрд╛ рд░рд┐рд╕реЗрдкреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ int CAM_ProcessReception(USBH_HandleTypeDef *phost) { USBH_URBStateTypeDef URB_Status = USBH_URB_IDLE; uint16_t length = 0; uint8_t data_rx_state = CDC_RECEIVE_DATA; size = FRAME_WIDTH * FRAME_HEIGHT; int bufsize = size * sizeof(uint16_t); int bsize = 0; while (data_rx_state != CDC_IDLE) { switch(data_rx_state) { case CDC_RECEIVE_DATA: USBH_BulkReceiveData (phost, &rawdata[bsize], 512, InPipe); data_rx_state = CDC_RECEIVE_DATA_WAIT; break; case CDC_RECEIVE_DATA_WAIT: URB_Status = USBH_LL_GetURBState(phost, InPipe); if(URB_Status == USBH_URB_DONE ) { length = USBH_LL_GetLastXferSize(phost, InPipe); bsize+= length; if(((bufsize - length) > 0) && (bsize < bufsize))
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдбреЗрдЯрд╛ рдХреЗ 20 рд╡реЗрдВ рдмрд╛рдЗрдЯ рдореЗрдВ, рдЬреЛ 16-рдмрд┐рдЯ рд╕рд░рдгреА рдХрд╛ рдкрд┐рдХреНрд╕реЗрд▓ рд╣реИ, рдлреНрд░реЗрдо рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рдлреНрд░реЗрдо рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рдЕрдВрд╢рд╛рдВрдХрди рдлреНрд░реЗрдо рдФрд░ рдПрдХ рдХрд╛рдордХрд╛рдЬреА рдлреНрд░реЗрдо рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдПрдХ рдЕрдВрд╢рд╛рдВрдХрди рдлреНрд░реЗрдо рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдерд░реНрдорд▓ рдЗрдореЗрдЬрд░ рдкрд░реНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ "рдЕрдВрдзреЗрд░реЗ" рдХреА рддрд╕реНрд╡реАрд░ рд▓реЗрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдлреНрд░реЗрдо рдХреА рд╢реВрдЯрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп, рд╢рдЯрд░ рдЦреБрд▓рд╛ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдЖрдк рд╣рдореЗрд╢рд╛ рд╕реБрдирддреЗ рд╣реИрдВ рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рд╢рдЯрд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИред
рд╕реНрдХреНрд░реАрди рдбреНрд░рд╛рдЗрдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ void BSP_LCD_DrawArray(uint32_t Xpos, uint32_t Ypos, uint32_t width, uint32_t height, uint8_t bit_pixel, uint8_t *pbmp) { uint32_t index = 0; uint32_t index2 = 0;
рдЕрдВрдд рдореЗрдВ, рдореБрдЦреНрдп рдЪрдХреНрд░, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЬрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд╛рдЯрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд╣рд╛рдВ рдХреБрдЫ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рдерд╛ред
рдореБрдЦреНрдп рдЪрдХреНрд░ #define DELAY1 10 #define USB_PIPE_NUMBER 0x81 #define FRAME_WIDTH 208 #define FRAME_HEIGHT 156 uint8_t OutPipe, InPipe; uint8_t usb_device_state; uint8_t rawdata[FRAME_HEIGHT*FRAME_WIDTH*2]; uint8_t data[64]; USBH_StatusTypeDef status; uint8_t transf_size; int size; int main(void) { CPU_CACHE_Enable(); HAL_Init(); SystemClock_Config(); CDC_InitApplication(); USBH_Init(&hUSBHost, USBH_UserProcess, 0);
рдирд┐рд╖реНрдХрд░реНрд╖
рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рд╛рде
рдерд░реНрдорд▓ рдЗрдореЗрдЬрд░ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬ рджрд┐рдЦрддрд╛ рд╣реИред рдореИрдВ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рддрд╛рдкреАрдп рддрд╕реНрд╡реАрд░ рдХрд╛ рдЖрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдбреИрдЬреЗрдЯ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдерд░реНрдорд▓ рдЗрдореЗрдЬрд░ рдореЗрдВ рдПрдХ рд╕рдорд╛рдпреЛрдЬреНрдп рдлреЛрдХрд▓ рд▓рдВрдмрд╛рдИ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдмреЛрд░реНрдб рдкрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рдШрдЯрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ! рдЕрдВрдд рдореЗрдВ, рдПрдХ рд╡реАрдбрд┐рдпреЛ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЖрдк рдерд░реНрдорд▓ рдЗрдореЗрдЬрд░ рдХреА рдЧрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдХрд╣реАрдВ-рдХрд╣реАрдВ 8-9 рдПрдлрдкреАрдПрд╕)
рд╕рдВрднрд╛рд╡рд┐рдд рдЦрд░реАрджрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА