打印
[STM32F1]

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

[复制链接]
3863|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
等待香水解答~~~~~

帮顶的都是好孩子!

使用特权

评论回复
5
mmuuss586| | 2014-3-14 08:53 | 只看该作者

USB大全.pdf

12.19 MB

使用特权

评论回复
6
mmuuss586| | 2014-3-14 08:54 | 只看该作者
有空看下USB的协议吧。不是几句能说清的

使用特权

评论回复
7
aoty|  楼主 | 2014-3-14 08:59 | 只看该作者
mmuuss586 发表于 2014-3-14 08:54
有空看下USB的协议吧。不是几句能说清的

不知道我的这个问题和协议的关系很多么?
我觉得这只是一种解决办法?不知道你调试USB的时候遇到过这个问题没?

使用特权

评论回复
8
mmuuss586| | 2014-3-14 09:01 | 只看该作者
有中断传输模式,还有其它传输模式……

使用特权

评论回复
9
mmuuss586| | 2014-3-14 09:06 | 只看该作者
我上位机用的查询,想什么时候查询,看你软件怎么写了,你可以多开几个线程啊……
下位机查询,中断都做过。
上位机:一个USB,数据量小,对系统影响不是很大

使用特权

评论回复
10
wangzhihai1986| | 2014-3-14 09:09 | 只看该作者
用个系统,让一个任务来定时执行它。

使用特权

评论回复
11
aoty|  楼主 | 2014-3-14 09:30 | 只看该作者
mmuuss586 发表于 2014-3-14 09:01
有中断传输模式,还有其它传输模式……

是不是我的问题说的不清楚,程序里的确有一个中断通道接收数据,在这个函数里USBH_HID_Handle,但是现在的话我认为这个并不是我想要的中断,至于我想要达到的目的,上面已经写得很清楚了!
呵呵~不过有一条不变的就是我想去掉while(1),HID类的数据传输的确数据量很小,但是我测试了下,加入在while(1)里的那个核心函数下面加一个比较长的延时,他就无法发出数据,但是可以枚举成功!
主要是我担心万一别人的功能加上去,这样的话,手柄不就失灵了么?
至于你说的协议,我没搞的很深,只是浅浅的一点点!

使用特权

评论回复
12
aoty|  楼主 | 2014-3-14 09:31 | 只看该作者
本帖最后由 aoty 于 2014-3-14 09:34 编辑
wangzhihai1986 发表于 2014-3-14 09:09
用个系统,让一个任务来定时执行它。

可以具体说一下么?我现在最深的就是ucos2了!我觉得定时器中断并不是很好吧,定时短频繁中断,定时长数据丢失~呵呵~
我没搞过,方便的话,多解释下吧~

使用特权

评论回复
13
wangzhihai1986| | 2014-3-14 10:15 | 只看该作者
aoty 发表于 2014-3-14 09:31
可以具体说一下么?我现在最深的就是ucos2了!我觉得定时器中断并不是很好吧,定时短频繁中断,定时长数据 ...

        while(1)
        {
                USBH_Process(&USB_OTG_Core, &USB_Host);
                OSTaskDly(30);
        }
类似上面这样。

使用特权

评论回复
14
aoty|  楼主 | 2014-3-14 10:36 | 只看该作者
wangzhihai1986 发表于 2014-3-14 10:15
while(1)
        {
                USBH_Process(&USB_OTG_Core, &USB_Host);

额。。。
这个是啥意思?在核心函数后面加一个延时?只是这么一个作用么、

使用特权

评论回复
15
airwill| | 2014-3-14 18:16 | 只看该作者
个人分析,程序里的中断传输也是一种查询,现在我希望的是可以达到按下按键的时候进行数据的处理,就像电脑识别完键盘后只有按按键的时候才会发送数据,又没有一种方法可以不用死循环一直查询状态机,就像电脑和键盘一样!

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

使用特权

评论回复
16
啊龙| | 2014-3-14 19:56 | 只看该作者
USB host 都是主动发起通讯的。可以把USB函数放到定时中断里。如果这样不能正常通讯,应该是处理器速度不够了。

使用特权

评论回复
17
aoty|  楼主 | 2014-3-14 23:44 | 只看该作者
啊龙 发表于 2014-3-14 19:56
USB host 都是主动发起通讯的。可以把USB函数放到定时中断里。如果这样不能正常通讯,应该是处理器速度不够 ...

我的是F407的处理速度,168M,足够快了!
很多人也说过可以用定时中断,但是我担心频繁的进入中断,这样的话,会影响别人的功能!
你觉得呢?而且别人程序的某一个功能的优先级是必须最高的,但是我要手柄实时响应,我又想把我的优先级设置为最高!!

使用特权

评论回复
18
MJM_WSY| | 2014-3-15 00:01 | 只看该作者
龙哥我顶……

使用特权

评论回复
19
aoty|  楼主 | 2014-3-15 00:19 | 只看该作者
MJM_WSY 发表于 2014-3-15 00:01
龙哥我顶……

你是?难道是山东大哥?

使用特权

评论回复
20
是电子爱好者| | 2014-3-15 14:14 | 只看该作者
airwill 发表于 2014-3-14 18:16
个人分析,程序里的中断传输也是一种查询,现在我希望的是可以达到按下按键的时候进行数据的处理,就像电脑 ...

难道电脑识别usb设备是不符合usb协议的吗?为什么电脑可以实现呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

31

主题

207

帖子

1

粉丝