[STM32L4] USB HID通信问题

[复制链接]
886|4
 楼主| suqiang1271 发表于 2019-11-14 11:00 | 显示全部楼层 |阅读模式
使用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问题解决,感觉是动态分配出了问题,但是串口发送函数仍然没问题。
mmuuss586 发表于 2019-11-25 09:40 | 显示全部楼层
内存一般是够的
elife 发表于 2019-11-25 13:32 | 显示全部楼层
是不是局部变量没有全部初始化为0的原因。
木木guainv 发表于 2019-12-10 11:17 | 显示全部楼层
帮楼主顶一下
kingkits 发表于 2019-12-10 11:45 | 显示全部楼层
你该看看地址,静态变量使用的地址和由堆分配的地址不一样,有一部分内存是DMA访问不到的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

44

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部