STM32
直播中

李舒桀

7年用户 1236经验值
私信 关注
[问答]

STM32有没有USB库里面有变量记录着每次发送的实际长度?

uint8_t  USBD_HID_DataOut (void  *pdev, uint8_t epnum)
{
  DCD_EP_PrepareRx(pdev,HID_IN_EP,Report_buf,USB_REPORT_BUFF_SIZE);
  return USBD_OK;
}
假设USB_REPORT_BUFF_SIZE为64,主机有可能只发送32 23等等小于64字节,
每次都是把Report_buf的数据全部读出来,然后再根据自己定的协议定的长度 再解析出本次发送
过来的具体长度。有没有USB库里面有变量记录着每次发送的实际长度?

回帖(1)

h1654155275.5741

2024-4-28 17:13:03
在STM32的USB库中,确实有一个变量可以记录每次发送的实际长度。这个变量通常是一个全局变量,用于存储当前传输的数据长度。在STM32的HAL库中,这个变量被称为`wTransferSize`。

在你的代码示例中,你已经使用了`USBD_HID_DataOut`函数来处理USB数据的接收。在这个函数中,你可以通过以下方式获取实际传输的数据长度:

```c
uint8_t USBD_HID_DataOut(void *pdev, uint8_t epnum)
{
    uint32_t actual_length;
    DCD_EP_PrepareRx(pdev, HID_IN_EP, Report_buf, USB_REPORT_BUFF_SIZE);
    // 等待数据接收完成
    while (USBD_LL_IsStallEP(pdev, epnum));
    // 获取实际接收到的数据长度
    actual_length = USBD_LL_GetRxDataSize(pdev, epnum);
    // 根据实际长度解析数据
    // ...
    return USBD_OK;
}
```

在这个示例中,我们使用了`USBD_LL_GetRxDataSize`函数来获取实际接收到的数据长度。这个函数会返回一个`uint32_t`类型的值,表示当前传输的数据长度。

请注意,这个示例假设你已经配置了STM32的USB设备,并且使用了STM32的HAL库。如果你使用的是其他库或固件,可能需要查找相应的函数来获取实际传输的数据长度。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分