金牌会员
 
- 积分
- 2317
- 金钱
- 2317
- 注册时间
- 2016-12-2
- 在线时间
- 354 小时
|
发表于 2016-12-2 10:47:20
|
显示全部楼层
本帖最后由 sammy902583 于 2016-12-2 11:04 编辑
1. HAL_PCD_DisconnectCallback() 应该在Host下reset的时候会被回call, 只是在Windows底下可能不容易出现, 在Linux用libusb控制应该可以达成. ConnectCallback应该是比较容易观察到, 下断点应该會停.
2. CDC_Receive_HS() 在STM32收到资料的时候会被回call.
您要在
USBD_CDC_SetRxBuffer(&hUsbDeviceHS, &Buf[0]);
USBD_CDC_ReceivePacket(&hUsbDeviceHS);
这两行之前处理 Buf里面的资料, 接受到的長度放在 *Len里面. 比方讲STM324xG_EVAL里面的sample里面, 呼叫
HAL_UART_Transmit_DMA(&UartHandle, Buf, *Len);
把资料转送到UART上面.
如果还需要再收资料的话要呼叫 USBD_CDC_ReceivePacket(&hUsbDeviceHS); 如果没有跑这一行, Host将无法在送资料给STM32, 不过也不一定在要Receive里面呼叫, 端看您的应用如何使用.
USBD_CDC_SetRxBuffer(&hUsbDeviceHS, &Buf[0]); 在Init的时候已经设过了, buffer没有变更, 其实这一行是不需要的.
3. APP_RX_DATA_SIZE这个值最好要設成CDC_DATA_HS_OUT_PACKET_SIZE, 因为如果Host传大小超過预设的4 byte, 程式可能会出现一些奇怪的现象.
|
|