21ic问答首页 - 关于STM32F429IGT6的USB_Device_VPC接收问题
关于STM32F429IGT6的USB_Device_VPC接收问题
123123adl2020-12-24
调试STM32F429igt6时使用USB的VPC与串口助手通信。发送已经没有问题了,接收的时候发现每次都会接收到除了发送外的额外字节,请问这个怎么处理?下面三张图是编写内容,第一个是在回调函数中添加函数,第二张图就是这个接收函数的处理,第三张图就是将接收长度的数据发送后在串口助手上显示的结果。(后面插图)
赞0
评论
2021-01-11
赞0
评论
2021-01-11
赞0
评论
2021-01-11
赞0
评论
2021-01-11
赞0
评论
2020-12-24
赞0
评论
2020-12-24
赞0
static uint16_t usb_rdat_length = 0;
然后使用串口助手
[09:38:33.260]发→◇64 73 66 61 73 66 □
[09:38:33.266]收←◆64 73 66 61 73 66 18 47
[09:38:34.916]发→◇64 73 66 61 73 66 □
[09:38:34.921]收←◆64 73 66 61 73 66 18 47
[09:38:35.095]发→◇64 73 66 61 73 66 □
[09:38:35.102]收←◆64 73 66 61 73 66 18 47
[09:38:35.284]发→◇64 73 66 61 73 66 □
[09:38:35.289]收←◆64 73 66 61 73 66 18 47
可以看到每次增加的字节长度都是不定长的。
评论
2020-12-24
赞0
{
/* USER CODE BEGIN 6 */
USB_Uartx_RxCpltCallback();//添加的自定义回调函数
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
return (USBD_OK);
/* USER CODE END 6 */
}
第一个是在回调函数中添加一个函数
2.void USB_Uartx_RxCpltCallback(void)
{
uint16_t usb_rx_len = 0;
usb_rx_len = strlen((char*)UserRxBufferFS);
if((usb_rdat_length+usb_rx_len)<USB_DAT_LENMAX)//不超过内存最大值
{
memcpy(usb_rdat+usb_rdat_length,UserRxBufferFS,usb_rx_len);//内存赋值
usb_rdat_length+=usb_rx_len;
}
memset(UserRxBufferFS,0x00,usb_rx_len);
}
第二个就是将缓存数据存在usb_rdat[]中。
3.[09:20:46.339]发→◇31 32 33 34 35 0D 0A □
[09:20:46.344]收←◆31 32 33 34 35 0D 0A 5E
[09:20:47.021]发→◇31 32 33 34 35 0D 0A □
[09:20:47.026]收←◆31 32 33 34 35 0D 0A 5E
[09:20:47.296]发→◇31 32 33 34 35 0D 0A □
[09:20:47.302]收←◆31 32 33 34 35 0D 0A 5E
[09:20:47.514]发→◇31 32 33 34 35 0D 0A □
[09:20:47.519]收←◆31 32 33 34 35 0D 0A 5E
第三个就是串口助手返回的数据。可以看到每次返回都会多出几个字节,进入仿真可以看到在UserRxBufferFS中就已经多了这么几个字节
评论
2020-12-24
赞0
评论
2020-12-24
您需要登录后才可以回复 登录 | 注册