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

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

查看全部评分

shimengdacs 回答时间: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


Kevin_G 回答时间: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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版