OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6148|回复: 8

stm32下位机数据发不出去??

[复制链接]

6

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2013-12-16
在线时间
0 小时
发表于 2013-12-16 11:38:06 | 显示全部楼层 |阅读模式
本人是第一次发帖。
目前,上位机给下位机发数据可以接收到,但是stm32下位机往上位机发,就是发不出去。上位机是用Labview做的一个很简单的程序,发给下位机,下位机能够收到,但是收不到stm32下位机往上位机发的数据,我也用Bus Hound也只能看到上位机发的数据,stm32发给上位机的数据收不到。我自己反复的查看了自己的程序,始终找不到问题,请各位高手指点指点,小弟谢了!
const uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] =
{
     //#ifdef 0 
0x05, 0x8c, /* USAGE_PAGE (ST Page) */ 
0x09, 0x01, /* USAGE (Demo Kit) */ 
0xa1, 0x01, /* COLLECTION (Application) */ 
/* 6 */ 
// The Input report 
0x09,0x03,       // USAGE ID - Vendor defined 
0x15,0x00,       // LOGICAL_MINIMUM (0) 
0x26,0x00, 0xFF, // LOGICAL_MAXIMUM (255) 
0x75,0x08,       // REPORT_SIZE (8) 
0x95,0x40,       // REPORT_COUNT (20) 
0x81,0x02,       // INPUT (Data,Var,Abs) 
//19
// The Output report 
0x09,0x04,       // USAGE ID - Vendor defined 
0x15,0x00,       // LOGICAL_MINIMUM (0) 
0x26,0x00,0xFF,  // LOGICAL_MAXIMUM (255) 
0x75,0x08,       // REPORT_SIZE (8)  //每个数据域长度为8bit,即一个字节
0x95,0x40,       // REPORT_COUNT (20)//共包含8个数据域,即数据总长度为8字节 
0x91,0x02,       // OUTPUT (Data,Var,Abs) 
//32
0xc0 /* END_COLLECTION */ 
//#endif 
}

void CustomHID_Reset(void)
{
.
.
.
.
    /* Initialize Endpoint 1 从机发*/
     SetEPType(ENDP1, EP_INTERRUPT);
     SetEPRxAddr(ENDP1, ENDP1_RXADDR);
     SetEPRxCount(ENDP1, 64);  

     SetEPRxStatus(ENDP1, EP_RX_VALID);
     //SetEPTxStatus(ENDP1, EP_TX_DIS);

  /* Initialize Endpoint 2 从机收*/
     SetEPType(ENDP2, EP_INTERRUPT);
     SetEPTxAddr(ENDP2, ENDP2_TXADDR);
     SetEPTxCount(ENDP2, 64);  
     SetEPTxStatus(ENDP2, EP_TX_DIS);
     SetEPTxStatus(ENDP2, EP_TX_NAK);

  /* Set this device to response on default address */
  SetDeviceAddress(0);
#endif /* STM32F10X_CL */

  bDeviceState = ATTACHED;
}


void EP1_OUT_Callback(void)
{ u8 i;
     for(i=0;i<64;i++)   
{
Receive_Buffer=0; //对Receive_Buffer清零
     USB_ReceiveFlg = TRUE;
DataLen = GetEPRxCount(ENDP1);
        PMAToUserBufferCopy(Receive_Buffer, ENDP1_RXADDR,DataLen); //把缓冲区的数据拷贝到Receive_Buffer

     if(USB_ReceiveFlg ==TRUE)
  {  MsgCmd=1;
   GPIO_SetBits(GPIOF,GPIO_Pin_9); //接收亮灯LED1
 delay(50000000);
 GPIO_ResetBits(GPIOF,GPIO_Pin_9);   
  }
     else
    {MsgCmd=0; 
 printf("\r\nMsgCmd\r\n");
 SetEPRxStatus(ENDP1, EP_RX_VALID);
    }
}


void EP2_IN_Callback(void)
{
    u32 ii;
printf("\r\n下位机发送完毕,中断进入\r\n");
GPIO_SetBits(GPIOF,GPIO_Pin_8);
delay(5000000);
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
    for (ii=0;ii<64;ii++) Transi_Buffer[ii] = 0; //对发送变量清零

}







void GET_CMD(void)
   u8 i;

   for(i=0;i<DataLen;i++)
   {  
    Transi_Buffer=Receive_Buffer;  
   }
  if(MsgCmd==1)
  {
USB_SIL_Write(EP2_IN, Transi_Buffer, DataLen);
//    UserToPMABufferCopy(Transi_Buffer, GetEPTxAddr(ENDP2), DataLen); 
    SetEPTxCount(ENDP2, DataLen);
    SetEPTxValid(ENDP2);



//    UserToPMABufferCopy(Transi_Buffer, ENDP2_TXADDR, DataLen);
// SetEPTxCount(ENDP2,DataLen);
//    _SetEPTxStatus(ENDP2, EP_TX_VALID);
    MsgCmd=0;
  }












正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2013-12-16
在线时间
0 小时
 楼主| 发表于 2013-12-16 12:47:09 | 显示全部楼层
我用的是USB_HID做双向通信。代码一直都上传不了呢,怎么回事?
回复 支持 反对

使用道具 举报

6

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2013-12-16
在线时间
0 小时
 楼主| 发表于 2013-12-16 16:06:24 | 显示全部楼层
为什么stm32就是发不出去数据呢?我也参考了别人的代码,也是这么写的啊?哪位高手教教我?
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2013-12-16 22:22:44 | 显示全部楼层
帮顶
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-16 22:59:20 | 显示全部楼层
回复【楼主位】头发很乱:
---------------------------------
直接写个简单的代码,用printf,看看能不能收到?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2013-12-16
在线时间
0 小时
 楼主| 发表于 2013-12-17 08:37:38 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
原子哥,你好。你说的我试过了,我就是简单的发一串字符串都发不出去,如果stm32发出去的话,Bus Hound的也会有显示的。我还用了串口把发送接收的数据打印出来看过了,数据传递是正确的,但是就是发不出去。也不知道是不是我PC上位机的问题。如果上位机编程不对的话,会不会也会使stm32下位机usb数据发不出去呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-17 20:38:57 | 显示全部楼层
回复【6楼】头发很乱:
---------------------------------
那我也不清楚了,呵呵。帮不到你哦。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2013-12-16
在线时间
0 小时
 楼主| 发表于 2013-12-19 10:16:08 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
原子哥,谢谢你。我已经找到问题了,是我的labview上位机编程的时候没搞好,也是usb协议弄得不是很明白,中断轮询的时候出错了。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-19 16:27:02 | 显示全部楼层
回复【8楼】头发很乱:
---------------------------------
哦,不客气
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 00:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表