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

STM32F105 USB接收数据不断进入中断,出现“死机”现象

[复制链接]
ccd007 提问时间:2018-2-2 08:19 /
程序不断进入USBD_OTG_ISR_Handler中断下面的  DCD_HandleOutEP_ISR(pdev);   和   DCD_HandleInEP_ISR(pdev);中,不知什么原因。 此问题偶然出现,同样的数据我发送几十次甚至几百次会出现一次死机现象。不知道是不是我的接收处理问题,由于设备接收缓冲满时我会暂缓写 DCD_EP_PrepareRx(pdev, D_OUT_EP, (uint8_t*)(USB_Rx_Buffer), D_OUT_PACKET)函数,等接收缓冲有空间时才会进行DCD_EP_PrepareRx(pdev, D_OUT_EP, (uint8_t*)(USB_Rx_Buffer), D_OUT_PACKET)。不知道是不是这个原因引起的。但除了这个方法我不知怎么向发送端提示USB_BUSY,暂不接收数据的意思。谁知道我的问题出在什么地方?谢谢
收藏 评论4 发布时间:2018-2-2 08:19

举报

4个回答
随风飘扬 回答时间:2018-2-2 09:55:36
这个问题没有遇到过,不过大概看了一下数据手册,发现下面两处内容
1.PNG
2.PNG
第一个说明只要有数据,就会进入中断
第二个算是一种方法吧,有数据的时候屏蔽掉中断,读取完成在打开,如果怕丢数据,则在通信协议上想想办法,比如上位机在接受到下位机继续的指令之前,不会继续发送数据

评分

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

查看全部评分

ccd007 回答时间:2018-2-2 10:40:50
yu0405jie 发表于 2018-2-2 09:55
这个问题没有遇到过,不过大概看了一下数据手册,发现下面两处内容

谢谢。关闭中断我试过,但会出现丢数据的现象。DCD_EP_PrepareRx是不是代表该数据已经读出?
feixiang20 回答时间:2018-2-2 11:39:10
本帖最后由 feixiang20 于 2018-2-2 11:41 编辑
ccd007 发表于 2018-2-2 10:40
谢谢。关闭中断我试过,但会出现丢数据的现象。DCD_EP_PrepareRx是不是代表该数据已经读出?
...

我偶然看到这么一句, USBD_GetRxCount 通过这个函数可以获取到DCD_EP_PrepareRx  传输的数据长度  DCD_EP_PrepareRx 只是把buf地址告诉otg库 数据不是立即返回 USBD_GetRxCount 读取的是上一次DCD_EP_PrepareRx 操作后 otg库拷贝到buf里的数据长度。串口清中断后下次再接收数据会不会再次进入中断。。是否对你有个帮助?

评分

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

查看全部评分

KEVIN.Z 回答时间:2023-8-26 03:40:07

USB_OTG_GetEPStatus和USB_OTG_SetEPStatus不知道能否直接对端点是否忙进行控制

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版