реклама на сайте
подробности

 
 
> STM32F302 и HID USB 32 байта
Tronix286
сообщение Feb 2 2016, 10:37
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 25-10-14
Пользователь №: 83 341



Приветствую,

Пытаюсь реализовать "эхо" обмена контроллер-комп по 32-байта. Сначала я заполняю массив числами от 0 до 31 и шлю его раз в пять секунд.
Код
  while (1)
  {
    HAL_Delay(5000);
    USBD_HID_SendReport(&hUsbDeviceFS, OutBuffer, HID_EPIN_SIZE);
  }


Принимаю на компе нормально. Затем я передаю контроллеру массив из всех нулей. В программе приемный массив должен скопироваться в тот, что я отсылаю и по-идее я должен увидеть в обратку массив нулей.

Код
static uint8_t  USBD_HID_DataOut (USBD_HandleTypeDef *pdev,
                              uint8_t epnum)
{
    if (epnum != (HID_EPOUT_ADDR & 0x0F))
        return USBD_FAIL;
              
        int8_t i = 0;
    while (i < HID_EPOUT_SIZE)
    {
        OutBuffer[i] = usb_rx_buffer[i];
        i++;
    }

    USBD_LL_PrepareReceive(pdev,
                 HID_EPOUT_ADDR,                                      
                 usb_rx_buffer,
                 HID_EPOUT_SIZE);    
    
    return USBD_OK;
}


Но у меня появляются откуда-то числа 0x20 и 0x40



Дескриптор репорта:

Код
{
//.................................
0x06, 0xFF, 0xFF,                                                        
// 04|2   , Usage Page (vendor defined?)
0x09, 0x01,                                                                    
// 08|1   , Usage      (vendor defined
0xA1, 0x01,                                                                    
// A0|1   , Collection (Application)
//..................................
// IN report
0x09, 0x02,                                                                    
// 08|1   , Usage      (vendor defined)
0x09, 0x03,                                                                    
// 08|1   , Usage      (vendor defined)
0x15, 0x00,                                                                    
// 14|1   , Logical Minimum(0 for signed byte?)
0x26, 0xFF, 0x00,                                                        
// 24|1   , Logical Maximum(255 for signed byte?)
0x75, 0x08,                                                                    
// 74|1   , Report Size(8) = field size in bits = 1 byte
// 94|1   , ReportCount(size) = repeat count of previous item
0x95,HID_EPIN_SIZE,
0x81, 0x02,                                                                    
// 80|1   , IN report (Data,Variable, Absolute)
//....................................
// OUT report
0x09, 0x04,                                                                    
// 08|1   , Usage      (vendor defined)
0x09, 0x05,                                                                    
// 08|1   , Usage      (vendor defined)
0x15, 0x00,                                                                    
// 14|1   , Logical Minimum(0 for signed byte?)
0x26, 0xFF, 0x00,                                                        
// 24|1   , Logical Maximum(255 for signed byte?)
0x75, 0x08,                                                                    
// 74|1   , Report Size(8) = field size in bits = 1 byte
// 94|1   , ReportCount(size) = repeat count of previous item
0x95, HID_EPOUT_SIZE,
0x91, 0x02,                                
// 90|1   , OUT report (Data,Variable, Absolute)
// Feature report
0x09, 0x06,                                    
// 08|1   , Usage      (vendor defined)
0x09, 0x07,                                    
// 08|1   , Usage      (vendor defined)
0x15, 0x00,                                    
// 14|1   , LogicalMinimum(0 for signed byte)
0x26, 0xFF, 0x00,                                    
// 24|1   , Logical Maximum(255 for signed byte)
0x75, 0x08,                                    
// 74|1   , Report Size(8) =field size in bits = 1 byte
0x95, HID_EPOUT_SIZE,                    
// 94|x   , ReportCount in byte
0xB1, 0x02,                                    
// B0|1   , Feature report
0xC0                                
// C0|0   , End Collection


Ставил бряк на функцию USBD_HID_DataOut. Странное дело, но тогда в массиве usb_rx_buffer то же есть эти числа 0x20 и 0x40, но они идут подряд под 22 и 23 номером в массиве. Почему их разносит друг от друга в разные стороны при отправке, и откуда они там вообще берутся?
Помогите нубу, плиз
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 22:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01352 секунд с 7
ELECTRONIX ©2004-2016