使用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问题解决,感觉是动态分配出了问题,但是串口发送函数仍然没问题。
|