你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

USB EP2没写对应的接收函数,但为什有能接收到PC发的数据?

[复制链接]
hqw 提问时间:2019-1-14 18:25 /
请教下大家,用USB调试助手来调试USB所遇到的困惑。问题如下面截图;

在程序只找到一个MCU接收PC所发数据的函数(如下)。但这是EP1的,而非EP2的。但在调试时,确发现PC通过EP2下发的数据,mcu却能收得到。(因为在在程序里,是有EP2对PC发送数据的函数的)
void EP1_OUT_Callback(void)
{
        #ifndef STM32F10X_CL
        PMAToUserBufferCopy(USB_Receive_Buffer, ENDP1_RXADDR, REPORT_COUNT);
          SetEPRxStatus(ENDP1, EP_RX_VALID);
         USB_Received_Flag=1;
        #else
                   // USB_SIL_Read(EP1_OUT,USB_Receive_Buffer);
                   // USB_Received_Flag=1;
        #endif
}


程序是有EP2对PC的发送数据函数。但没找得到EP2接收PC所发数据的函数
uint32_t USB_SendData(uint8_t *data,uint32_t dataNum)
{
        #ifndef STM32F10X_CL
        //数据通过USB送出去
        UserToPMABufferCopy(data, ENDP2_TXADDR, dataNum);
        SetEPTxCount(ENDP2, REPORT_COUNT);
        SetEPTxValid(ENDP2);
        #else
        USB_SIL_Write(EP2_IN, data, dataNum);
        #endif
        return dataNum;  
}

而且,看程序另一个地方的设置,#define  EP2_OUT_Callback   NOP_Process,这个也没加屏蔽,也就是 EP2接收PC所发数据的函数或功能也没使能
/* CTR service routines */
/* associated to defined endpoints */
//#define  EP1_IN_Callback   NOP_Process
//#define  EP2_IN_Callback   NOP_Process
#define  EP3_IN_Callback   NOP_Process
#define  EP4_IN_Callback   NOP_Process
#define  EP5_IN_Callback   NOP_Process
#define  EP6_IN_Callback   NOP_Process
#define  EP7_IN_Callback   NOP_Process

//#define  EP1_OUT_Callback   NOP_Process
#define  EP2_OUT_Callback   NOP_Process
#define  EP3_OUT_Callback   NOP_Process
#define  EP4_OUT_Callback   NOP_Process
#define  EP5_OUT_Callback   NOP_Process
#define  EP6_OUT_Callback   NOP_Process

#define  EP7_OUT_Callback   NOP_Process

请高手们分析下,谢谢


2.png

MW_MCU_Eval_Board - Kicer -a - 副本.zip

下载

6.87 MB, 下载次数: 16, 下载积分: ST金币 -1

PortHelper.zip

下载

2.87 MB, 下载次数: 18, 下载积分: ST金币 -1

收藏 评论8 发布时间:2019-1-14 18:25

举报

8个回答
斜阳__ 回答时间:2019-1-15 13:13:20
MC端点1收到数据,修改标志
snipaste_1.png

读取数据,并发送

snipaste_2.png

通过端点2发送出去

snipaste_3.png

所以你端点2能发出数据。至于端点2能收到数据,不知道你怎么判断的


评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

731260702 回答时间:2019-1-16 10:00:45
在EP2的接收缓冲区中打一个数据断点,到了断点的时候看代码,是哪里的代码把数据写入了EP2的接收缓冲,个人观点

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

hqw 回答时间:2019-1-16 10:02:36
斜阳__ 发表于 2019-1-15 13:13
MC端点1收到数据,修改标志

EP2能发送接收到的数据给到PC,这个流程我是请楚的。我就是弄不清,调试助手是通过EP2向MCU来发送数据,而我在例程里根本是没找到EP2的接收函数(EP1的接收函数倒是有的)。这个是买开发板送的例程,不是我自己写的。

而且从下面例程的设定来看,EP2的接收(这里的接收是指接收PC发的数据)压根就没打开,红体字所示。难道说,调试助手上PC通过EP2向MCU来发送数据,MCU其实是通过EP1来接收的吗?
/* EP1  */
/* tx buffer base address */
//地址为32位对其,位4的倍数,不能超过 bMaxPacketSize

#define ENDP1_RXADDR        (0x98)
#define ENDP1_TXADDR        (0xD8)
//EP2
//#define ENDP2_RXADDR        (0x118)
#define ENDP2_TXADDR        (0x118)

/* CTR service routines */
/* associated to defined endpoints */
//#define  EP1_IN_Callback   NOP_Process
//#define  EP2_IN_Callback   NOP_Process
#define  EP3_IN_Callback   NOP_Process
#define  EP4_IN_Callback   NOP_Process
#define  EP5_IN_Callback   NOP_Process
#define  EP6_IN_Callback   NOP_Process
#define  EP7_IN_Callback   NOP_Process

//#define  EP1_OUT_Callback   NOP_Process
#define  EP2_OUT_Callback   NOP_Process
#define  EP3_OUT_Callback   NOP_Process
#define  EP4_OUT_Callback   NOP_Process
#define  EP5_OUT_Callback   NOP_Process
#define  EP6_OUT_Callback   NOP_Process
#define  EP7_OUT_Callback   NOP_Process


Kevin201707 回答时间:2019-1-16 10:10:48
应该是buf被写入了,不是收到的数据吧?

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

hqw 回答时间:2019-1-16 14:32:25
Kevin201707 发表于 2019-1-16 10:10
应该是buf被写入了,不是收到的数据吧?

在程序里,你找得到BUF被写入的内容吗?我每次连上USB,调试助手上,EP2接收区的数据是和发送区一致的,不过,若此后再改变发送区的数据,EP2接收区的数据就还是原来的,不会跟着发送区的数据而变化
yue_viper 回答时间:2019-1-16 16:13:59
EP1怎么不能发送数据

评分

参与人数 1蝴蝶豆 +1 收起 理由
STMCU + 1

查看全部评分

hihi22 回答时间:2019-1-24 13:36:34
只要描述符里有EP2out端点,上位机软件就能发送数据出去,至于MCU接受,可以看接收中断是如何执行的。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

天臆弄人 回答时间:2019-1-24 14:04:39
这是上位机问题,包括我自己写的HID 上位机也有这问题,都是直接调用调底的write,read 所以,,,

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版