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

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,暂不接收数据的意思。谁知道我的问题出在什么地方?谢谢
收藏 评论3 发布时间:2018-2-2 08:19

举报

3个回答
yu0405jie 回答时间: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

查看全部评分

所属标签

相似问题

官网相关资源

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