使用STM32 CUBE 生成usb hid通信遇到一个奇怪问题 感觉像内存分配问题,单又觉得不是,望高手解惑! 程序情况: 1.单片机STM32L452 2.操作系统FreeRTOS 3.任务数量1,其它任务屏蔽了的 4.通信情况,使用过USB助手发送数据,程序收到后,通过串口打印出数据,同时将数据发送到USB助手。 第一种正常情况: void App_LoraLoginTask(void const * argument) { uint16_t length; uint8_t buff[128]; USB_BUFF *USB_Buff; for(;;) { if( UsbBuff.Queuex != 0 ) { if( xQueueReceive( UsbBuff.Queuex, &USB_Buff, 0 ) == pdPASS ) { if( length = Get_bytes_count( &USB_Buff->R_RingBuff ) ) { length = Read_ring_buffer( &USB_Buff->R_RingBuff, buff, length ); Write_ring_buffer( &USB_Buff->T_RingBuff, buff, length ); USB_SendBuff( USB_Buff ); } } } osDelay(1); } } void USB_SendBuff( USB_BUFF *usb_f ) { static uint8_t sbuff[64] = { USB_CMD, 62 }; uint16_t length = 62; length = Read_ring_buffer( &usb_f->T_RingBuff, &sbuff[2], length ); sbuff[1] = length; while( USBD_CUSTOM_HID_SendReport( &hUsbDeviceFS, sbuff, 64 ) == USBD_OK ); Bsp_UsartxIntSendBuff(&UartBuffTbl[ UART_1 ], sbuff, 64 ); } USB助手发送数据 串口能正常收到数据,USB也能收到发出的数据, 2第二种情况,去掉USB_SendBuff里的static ,如下: void USB_SendBuff( USB_BUFF *usb_f ) { uint8_t sbuff[64] = { USB_CMD, 62 }; uint16_t length = 62; length = Read_ring_buffer( &usb_f->T_RingBuff, &sbuff[2], length ); sbuff[1] = length; while( USBD_CUSTOM_HID_SendReport( &hUsbDeviceFS, sbuff, 64 ) == USBD_OK ); Bsp_UsartxIntSendBuff(&UartBuffTbl[ UART_1 ], sbuff, 64 ); } 串口还是能正常收,USB收到数据错误,发送不变的情况下,USB收到恒定的错误值 但是sbuff[0] sbuff[1]数据却正常。 函数说明 App_LoraLoginTask 任务主函数,堆栈1024字节, USB_SendBuff 子函数,被主函数调用 USBD_CUSTOM_HID_SendReport USB 发送函数 Bsp_UsartxIntSendBuff 串口发送函数 开始怀疑过任务堆栈,加大到4096问题一样,排除了堆栈问题, 加上static问题解决,感觉是动态分配出了问题,但是串口发送函数仍然没问题。 但是加上static后 连续循环发送两包数据,出现第一包数据掉包现象 void USB_SendBuff( USB_BUFF *usb_f ) { static uint8_t sbuff[64] = { USB_CMD, 62 }; uint16_t length = 62; while( length = Read_ring_buffer( &usb_f->T_RingBuff, &sbuff[2], length ) ) { // length = Read_ring_buffer( &usb_f->T_RingBuff, &sbuff[2], length ); sbuff[1] = length; while( USBD_CUSTOM_HID_SendReport( &hUsbDeviceFS, sbuff, 64 ) == USBD_OK ); Bsp_UsartxIntSendBuff(&UartBuffTbl[ UART_1 ], sbuff, 64 ); } } while循环两次,第一次发送的数据USB助手未收到,bus hound监控数据 确实是STM32没有发出 |
USBH CDC通讯,如何修改通讯波特率?
STM32F407 USB的IN端点只能是0x81么?
求技术解答,STM32H723的USB模拟U盘应用过程遇到了问题。
请问一下,我的nucleo板子连接usb线,找不到target,一直无法下载程序怎么回事呢?
请问一下,stm32WB有可以驱动声卡的驱动程序吗(声卡是PCM2704)?
STM32F407 USB怎么测试接口的极限速度
我的电脑识别不到STM32的ST-LINK驱动(特指针对芯片stm32wle5ccu6)
请问各位大佬,STM32F4怎么利用Typec口OTG,硬件电路怎么实现
stm32 usb复合设备支持键盘鼠标和hid串口通信可以实现吗
stm32f407 开启两路(FS和HS) Custom HID,与上位机通信偶尔中断
while( length = Read_ring_buffer( &usb_f->T_RingBuff, &sbuff[2], length ) )
这里没问题的 直接相当于判断的length值
非常感谢,我之前也想过是因为局部变量内存分配被释放导致,所以在发送后加了延时,发现延时10ms也不行,但是我不理解为什么USB发送数据会这么慢,理论是不应该这样的,并且我也是判断了返回状态再发下一帧数据的(sbuff定义为static的情况下)
并且我测试了连续发送两包数据,需要间隔150ms以上才能成功发送 这种情况不对吧
非常感谢,确实有这种问题,感谢了 大神