打印

stm32f4 vcp接收函数死机?

[复制链接]
4402|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
KC_CEC|  楼主 | 2013-9-9 15:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 KC_CEC 于 2013-9-9 16:00 编辑

修改了一些ST库(STM32_USB-Host-Device_Lib_V2.1.0)的例子,但是接收程序有问题。
下面是我的收发程序:
void USB_SEND(uint8_t* Buf,uint32_t Length)
{
  uint32_t i;
  for(i= 0;i<Length;i++)
  {
           APP_Rx_Buffer[APP_Rx_ptr_in]=*(Buf++);
           APP_Rx_ptr_in++;
  }
    // To avoid buffer overflow
  if(APP_Rx_ptr_in == APP_RX_DATA_SIZE)
  {
   APP_Rx_ptr_in = 0;
  }
}
void USB_Receive(uint8_t *Buf,uint32_t Length)
{
  uint32_t i;
   /* Send the received buffer */
   for (i = 0; i < Length; i++)
   {
     Buf=USB_Rx_Buffer;
    USB_Rx_Buffer = 0;      
   }
}
发送函数没有问题,比较稳定,但是接收函数每接收几千个字节单片机就挂掉了。
应用函数如下:

USB_Receive(ReceiveBuffer,1);
if(ReceiveBuffer[0]==0x58)    USB_SEND("接收到数据!",17);
我对USB协议不是很熟悉,希望大家指点一下,谢谢!
沙发
KC_CEC|  楼主 | 2013-9-9 16:01 | 只看该作者
我在网上搜到看有人是这么写的:
static uint16_t TEMPLATE_DataRx (uint8_t* Buf, uint32_t Len)
{
   uint32_t i;

   for (i = 0; i < Len; i++)
   {
     ceshibuf = *(Buf + i);   
   }

   return USBD_OK;
}
硬是没看懂为什么这么写啊

使用特权

评论回复
板凳
KC_CEC|  楼主 | 2013-9-12 15:40 | 只看该作者
仔细对比了一下与ST库的不同之处在于:
for( int i= 0;i<Len;i++)
        {
           APP_Rx_Buffer[APP_Rx_ptr_in]=*(Buf++);
           APP_Rx_ptr_in++;
           // To avoid buffer overflow
  //下面这个溢出检测需要在for循环类,每发送一次检测
      if(APP_Rx_ptr_in == APP_RX_DATA_SIZE)
          {
           APP_Rx_ptr_in = 0;
          }
        }
接收函数经验证没有错误:
void USB_Receive(uint8_t *Buf,uint32_t Length)
{
        uint32_t i;
    /* Send the received buffer */
   for (i = 0; i < Length; i++)
   {
    Buf=USB_Rx_Buffer;
   USB_Rx_Buffer = 0;      
   }
}
由其内核代码函数:static uint8_t  usbd_cdc_DataOut (void *pdev, uint8_t epnum)可以看出来


那么,结贴了.................

使用特权

评论回复
地板
trumpxp| | 2013-9-12 19:01 | 只看该作者
问题解决了  就好   不错    记得多逛21ic

使用特权

评论回复
5
trumpxp| | 2013-9-12 19:01 | 只看该作者
很不错的学习帖子   这个  我仔细的看了看   有点收获啊

使用特权

评论回复
6
liguang02| | 2015-5-5 16:02 | 只看该作者
KC_CEC 发表于 2013-9-12 15:40
仔细对比了一下与ST库的不同之处在于:
for( int i= 0;i

//下面这个溢出检测需要在for循环类,每发送一次检测,这个红线的是你自己添加的吧,st原来的是循环结束才检查防止溢出的

使用特权

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

本版积分规则

20

主题

169

帖子

1

粉丝