FreeRTOS+Cube搭建USB_CDC功能接收上位机发送的数据。
定义接收缓存为256个字节
#define APP_RX_DATA_SIZE 256
[mw_shl_code=c,true]uint8_t UserRxBufferFS[APP_RX_DATA_SIZE];[/mw_shl_code]
初始化函数
[mw_shl_code=c,true]static int8_t CDC_Init_FS(void)
{
USBD_CDC_SetTxBuffer(&hUsbDeviceFS, UserTxBufferFS, 0);
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, UserRxBufferFS);
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
return (USBD_OK);
}[/mw_shl_code]
上位机传输数据时,一包数据小于64字节,能收全。
传输139字节数据时,前128字节数据能收全。后面11个数据显示为0。
我看了下接收函数里的Len值,接收139字节数据时,分别为64,64,11.
[mw_shl_code=c,true]static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)
{
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
return (USBD_OK);
}[/mw_shl_code]
在CubeMX中,配置“Endpoint 0 Max Packet size”最大为64Bytes.
之前配置APP_RX_DATA_SIZE为128,接收75字节数据能接收全的,后来和上位机传输协议修改,增加了64字节数据,变成138字节,相应的我把UserRXBuffer缓存也增加到256了。但是出现之前描述的现象。请问大神们出现这种情况的原因可能有哪些呢?是不是需要用双缓存什么的,USB接收数据时是按每包64字节接收的吧,然后存放在缓存中,按地址增加?
一周热门 更多>