打印
[STM32L4]

USB HID通信问题

[复制链接]
648|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 | 只看该作者
帮楼主顶一下

使用特权

评论回复
5
kingkits| | 2019-12-10 11:45 | 只看该作者
你该看看地址,静态变量使用的地址和由堆分配的地址不一样,有一部分内存是DMA访问不到的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

44

帖子

1

粉丝