4860|5

65

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM32的USB中断上传数据错误,请高手指点! [复制链接]



大家好,
       我用STM32的USB功能,除端点0外增加了3个端点,1-IN,2-OUT,3-Interrup.
现在3号端点(INTERRUPT)上传的数据总是相同,用仿真器跟踪,发现是从40006000内存地址发出的数据,我的配置如下:

  SetEPType(ENDP3, EP_INTERRUPT);
  SetEPTxAddr(ENDP3, ENDP3_TXADDR);
  SetEPTxCount(ENDP3, 4);
  SetEPRxStatus(ENDP3, EP_RX_DIS);
  SetEPTxStatus(ENDP3, EP_TX_NAK);


#define BTABLE_ADDRESS      (0x00)
/* EP0  */
/* rx/tx buffer base address */
#define ENDP0_RXADDR        (0x18)
#define ENDP0_TXADDR        (0x58)
/* EP1  */
/* tx buffer base address */
#define ENDP1_TXADDR        (0x98)
/* EP2  */
/* Rx buffer base address */
#define ENDP2_RXADDR        (0xD8)
/* EP3  */
/* tx buffer base address */
#define ENDP3_TXADDR        (0x118)



    while(SC_InsertFlag == 0x55)
    {
      
       SC_InsertFlag = 0x00;
      
       TempCCIDBuff[0] = 0x50;
       TempCCIDBuff[1] = 0X00;
       TempCCIDBuff[2] = 0X02;
       TempCCIDBuff[3] = 0X03;
  
RespLength = 4;

CCID_Transfer_Data_Request(TempCCIDBuff, RespLength);
      
    }


void CCID_Transfer_Data_Request(u8* Data_Pointer, u16 Data_Length)
{  
  UserToPMABufferCopy(Data_Pointer, ENDP3_TXADDR, Data_Length);
  SetEPTxCount(ENDP3, Data_Length);
  SetEPTxStatus(ENDP3, EP_TX_VALID);
}

现在每次从中断端点上传的数据总是 58 00 1A 00
我用仿真器跟踪发现数据是从40006000发出来的: 58 00 00 00 1a 00 00 00

而缓存区40006230(0X118*2+40006000)的数据是:50 00 00 00 02 03

请高手指点一下,为此我已经折腾一周了,恳求高手指点!!
此帖出自stm32/stm8论坛

最新回复

                                 usb缓冲区是16位的 但是按32位对齐的 只用了低16位 高16不用 开始搞的时候也碰到这个问题  详情 回复 发表于 2009-10-10 14:29
点赞 关注
 

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你试试:

#define BTABLE_ADDRESS      (0x00)
/* EP0  */
/* rx/tx buffer base address */
#define ENDP0_RXADDR        (0x00)
#define ENDP0_TXADDR        (0x40)
/* EP1  */
/* tx buffer base address */
#define ENDP1_TXADDR        (0x80)
/* EP2  */
/* Rx buffer base address */
#define ENDP2_RXADDR        (0xC0)
/* EP3  */
/* tx buffer base address */
#define ENDP3_TXADDR        (0x100)
此帖出自stm32/stm8论坛
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
谢谢2楼,

         我刚才试了,但是不行,改成上面的地址主机会报告"无法识别的设备",
还有其它的方法吗?恳请帮助!急
此帖出自stm32/stm8论坛
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

4
 
汗。。。我以前碰到过类似的问题,好像改了地址就好了。

这个是我现在在用的分配地址,和你的应用差不多,要不你再试试:
#define BTABLE_ADDRESS      (0x00)

/* EP0  */
/* rx/tx buffer base address */
#define ENDP0_RXADDR        (0x40)
#define ENDP0_TXADDR        (0x80)

/* EP1  */
/* tx buffer base address */
#define ENDP1_TXADDR        (0xC0)
#define ENDP2_TXADDR        (0x100)
#define ENDP3_RXADDR        (0x110)

因为我的EP2是中断端点,所以用到的字节少。
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(中级)

5
 
                                 
此帖出自stm32/stm8论坛
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

6
 
usb缓冲区是16位的 但是按32位对齐的 只用了低16位 高16不用
开始搞的时候也碰到这个问题
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表