[STM32F1] 抱歉!只有15分了!STM32F4D的核心处理函数可以不用死循环么?

[复制链接]
4574|23
 楼主| aoty 发表于 2014-3-14 00:41 | 显示全部楼层 |阅读模式
电脑是怎么在不影响别的功能的同时完成对usb设备的识别的?

是通过中断实现对usb设备的识别的吗?

识别以后电脑是一直在查询usb设备的状态吗?

我现在已经搞出来usb host,但是现在我的stm32f407discovery官方程序里的核心处理函数  USBH_Process(&USB_OTG_Core_dev , &USB_Host) ;  是放在主函数的死循环里面的!而且对于数据的处理也是放在了这个循环里,

个人分析,程序里的中断传输也是一种查询,现在我希望的是可以达到按下按键的时候进行数据的处理,就像电脑识别完键盘后只有按按键的时候才会发送数据,

又没有一种方法可以不用死循环一直查询状态机,就像电脑和键盘一样!

网上有人说用外部中断实现,但是我不知道怎么去实现,或者说还又没有一种更好的解决办法呢?

求搞过 usb 的朋友给一点建议~!
 楼主| aoty 发表于 2014-3-14 08:10 | 显示全部楼层
顶一下!!!
是电子爱好者 发表于 2014-3-14 08:29 | 显示全部楼层
等待香水解答~~~~~
 楼主| aoty 发表于 2014-3-14 08:32 | 显示全部楼层
是电子爱好者 发表于 2014-3-14 08:29
等待香水解答~~~~~

帮顶的都是好孩子!
mmuuss586 发表于 2014-3-14 08:53 | 显示全部楼层

USB大全.pdf

12.19 MB, 下载次数: 28

mmuuss586 发表于 2014-3-14 08:54 | 显示全部楼层
有空看下USB的协议吧。不是几句能说清的
 楼主| aoty 发表于 2014-3-14 08:59 | 显示全部楼层
mmuuss586 发表于 2014-3-14 08:54
有空看下USB的协议吧。不是几句能说清的

不知道我的这个问题和协议的关系很多么?
我觉得这只是一种解决办法?不知道你调试USB的时候遇到过这个问题没?
mmuuss586 发表于 2014-3-14 09:01 | 显示全部楼层
有中断传输模式,还有其它传输模式……
mmuuss586 发表于 2014-3-14 09:06 | 显示全部楼层
我上位机用的查询,想什么时候查询,看你软件怎么写了,你可以多开几个线程啊……
下位机查询,中断都做过。
上位机:一个USB,数据量小,对系统影响不是很大
wangzhihai1986 发表于 2014-3-14 09:09 | 显示全部楼层
用个系统,让一个任务来定时执行它。
 楼主| aoty 发表于 2014-3-14 09:30 | 显示全部楼层
mmuuss586 发表于 2014-3-14 09:01
有中断传输模式,还有其它传输模式……

是不是我的问题说的不清楚,程序里的确有一个中断通道接收数据,在这个函数里USBH_HID_Handle,但是现在的话我认为这个并不是我想要的中断,至于我想要达到的目的,上面已经写得很清楚了!
呵呵~不过有一条不变的就是我想去掉while(1),HID类的数据传输的确数据量很小,但是我测试了下,加入在while(1)里的那个核心函数下面加一个比较长的延时,他就无法发出数据,但是可以枚举成功!
主要是我担心万一别人的功能加上去,这样的话,手柄不就失灵了么?
至于你说的协议,我没搞的很深,只是浅浅的一点点!
 楼主| aoty 发表于 2014-3-14 09:31 | 显示全部楼层
本帖最后由 aoty 于 2014-3-14 09:34 编辑
wangzhihai1986 发表于 2014-3-14 09:09
用个系统,让一个任务来定时执行它。

可以具体说一下么?我现在最深的就是ucos2了!我觉得定时器中断并不是很好吧,定时短频繁中断,定时长数据丢失~呵呵~
我没搞过,方便的话,多解释下吧~
wangzhihai1986 发表于 2014-3-14 10:15 | 显示全部楼层
aoty 发表于 2014-3-14 09:31
可以具体说一下么?我现在最深的就是ucos2了!我觉得定时器中断并不是很好吧,定时短频繁中断,定时长数据 ...

        while(1)
        {
                USBH_Process(&USB_OTG_Core, &USB_Host);
                OSTaskDly(30);
        }
类似上面这样。
 楼主| aoty 发表于 2014-3-14 10:36 | 显示全部楼层
wangzhihai1986 发表于 2014-3-14 10:15
while(1)
        {
                USBH_Process(&USB_OTG_Core, &USB_Host);

额。。。
这个是啥意思?在核心函数后面加一个延时?只是这么一个作用么、
airwill 发表于 2014-3-14 18:16 | 显示全部楼层
个人分析,程序里的中断传输也是一种查询,现在我希望的是可以达到按下按键的时候进行数据的处理,就像电脑识别完键盘后只有按按键的时候才会发送数据,又没有一种方法可以不用死循环一直查询状态机,就像电脑和键盘一样!

想法不错, 不过可能不能实现, 因为不符号 USB 协议

啊龙 发表于 2014-3-14 19:56 | 显示全部楼层
USB host 都是主动发起通讯的。可以把USB函数放到定时中断里。如果这样不能正常通讯,应该是处理器速度不够了。
 楼主| aoty 发表于 2014-3-14 23:44 | 显示全部楼层
啊龙 发表于 2014-3-14 19:56
USB host 都是主动发起通讯的。可以把USB函数放到定时中断里。如果这样不能正常通讯,应该是处理器速度不够 ...

我的是F407的处理速度,168M,足够快了!
很多人也说过可以用定时中断,但是我担心频繁的进入中断,这样的话,会影响别人的功能!
你觉得呢?而且别人程序的某一个功能的优先级是必须最高的,但是我要手柄实时响应,我又想把我的优先级设置为最高!!
MJM_WSY 发表于 2014-3-15 00:01 | 显示全部楼层
龙哥我顶……
 楼主| aoty 发表于 2014-3-15 00:19 | 显示全部楼层
MJM_WSY 发表于 2014-3-15 00:01
龙哥我顶……

你是?难道是山东大哥?
是电子爱好者 发表于 2014-3-15 14:14 | 显示全部楼层
airwill 发表于 2014-3-14 18:16
个人分析,程序里的中断传输也是一种查询,现在我希望的是可以达到按下按键的时候进行数据的处理,就像电脑 ...

难道电脑识别usb设备是不符合usb协议的吗?为什么电脑可以实现呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:很高兴注册21IC

31

主题

207

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部