ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
19 марта
734808
Связанные сообщения
Stm32Usb
[LCD Image Converter] - программа для создания С-файлов из картинок и шрифтов.2023-07-23
[The Dot Factory]: An LCD Font and Image Generator2023-07-23
У меня на STM было сделано так: Вот так на самом деле надо так:2023-07-10
Перевод документации на ИАР на русский, спасибо Петру2023-05-25
[TinyUSB] is an open-source cross-platform USB Host/Device stack for embedded system, designed to be memory...2021-02-24
Бывают USB-VGA переходники со встроенным ЦАП.2020-12-20
Что ты называешь дескриптором? HKLM\SYSTEM\CurrentControlSet\Enum\USB смотри -- подходит?2020-09-01
Нагуглил, дело не совсем в буте, но в буте тоже дыра есть. Про бутлоадер читал, что его можно дрючить командами с компа и я суть...2020-08-06
git репозиторий тулсов и либ ST2020-06-18
что надежнее, FT232R или МК с встроенным USB? UPD. Всем спасибо за комментарии. Я сделал вывод что лучше Silabs (CP2104) либо CD...2018-04-19
Все по разу по этим граблям прохаживались. А вот индусские программисты, писавшие USB-библиотеку STM32F0x2_USB-FS-Device_Lib V1....2015-10-13
В продолжении темы по ссылке. Я продолжаю ох#$вать теперь уже от USB-библиотеки STM32F0x2_USB-FS-Device_Lib V1.0.0. Скажите, ест...2015-02-13
ST - засранцы. Сел поизучать STM32F1xx. Смотрю, значит, ага: USB, Ethernet... Ну, думаю, отлично. Полез читать про слоки, а там ...2015-01-19
STM32_USB-FS-Device_Lib_V4.0.0 - я в ахуе!!!!2014-12-30
Передача данных через USB из МК в ПК на максимальной скорости. Интересует какой- либо режим наподобие передачи сырых пакетов, да...2014-03-18
Как подступится к STM32F100 после atmega? Глаза разбегаются от кол-ва мануалов.2013-03-03
измерил на STM32F103 утечки GPIO, токи КЗ2012-02-04
Вопрос по точности АЦП у STM32.2011-04-15
напомните распространённые защитные сборки для USB, кроме USB6B1. Желательно в более мелких корпусах2011-03-03
il-2 (08.02.2017 15:15 - 15:22, просмотров: 9259)
Про библиотеку STM32_USB-Host-Device_Lib_V2.2.0. Выступаю в своем амплуа: Делаю USB Host на STM32F105 для работы с флэшками. Собственно, сейчас нахожусь в процессе прикручивания исходников библиотеки к проекту. Как любой нормальный человек, который ВЫНУЖДЕННО наступает на кучу гуано, делаю это с зажмуренными глазами и зажатым носом :-) Но полностью зажмуриться не удалось :-) Началось все достаточно невинно - я увидел, что пользовательские callback для получения ProductString, ManufacturerString и SerialString возвращают нуль-терминированную строку в ASCII. Из любопытства решил глянуть, как он это преобразует из UNICODE. Лучше бы я этого не делал!!! Привожу куски глючного кода и жирным - исправленный вариант. UPD - что-то выделение не работает /* usbh_core.c */ uint8_t Local_Buffer[64]; ... if ( USBH_Get_StringDesc(pdev, phost, phost->device_prop.Dev_Desc.iManufacturer, Local_Buffer , 0xFF sizeof(Local_Buffer)) == USBH_OK) //<--- замена 0xFF на sizeof(Local_Buffer) Дальше /* usbh_stdreq.c */ USBH_Status USBH_Get_StringDesc(USB_OTG_CORE_HANDLE *pdev, USBH_HOST *phost, uint8_t string_index, uint8_t *buff, uint16_t length) { USBH_Status status; if((status = USBH_GetDescriptor(pdev, phost, USB_REQ_RECIPIENT_DEVICE | USB_REQ_TYPE_STANDARD, USB_DESC_STRING | string_index, pdev->host.Rx_Buffer, length MAX_DATA_LENGTH)) == USBH_OK) //<--- Замена length на MAX_DATA_LENGTH { /* Commands successfully sent and Response Received */ USBH_ParseStringDesc(pdev->host.Rx_Buffer,buff, length); } return status; } Дальше вообще бред: /* usbh_stdreq.c */ static void USBH_ParseStringDesc (uint8_t* psrc, uint8_t* pdest, uint16_t length) { uint16_t strlength; uint16_t idx; /* The UNICODE string descriptor is not NULL-terminated. The string length is computed by subtracting two from the value of the first byte of the descriptor. */ /* Check which is lower size, the Size of string or the length of bytes read from the device */ if ( psrc[1] == USB_DESC_TYPE_STRING) { /* Make sure the Descriptor is String Type */ /* psrc[0] contains Size of Descriptor, subtract 2 to get the length of string */ strlength = ( ( (psrc[0]-2) <= length) ? (psrc[0]-2) :length); //<--- Это убирается strlength = ( ( (psrc[0]-2) < length) ? (psrc[0]-2) : (length-1)); //<--- Это добавляется strlength *= 2; //<--- Это добавляется psrc += 2; /* Adjust the offset ignoring the String Len and Descriptor type */ for (idx = 0; idx < strlength; idx+=2 ) {/* Copy Only the string and ignore the UNICODE ID, hence add the src */ *pdest = psrc[idx]; pdest++; } *pdest = 0; /* mark end of string */ } } И это только то, что я нашел случайно и с первого раза!!! Писец короче...