OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9007|回复: 8

触控USB实验的两个问题。

[复制链接]

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-12-22 12:42:03 | 显示全部楼层 |阅读模式
第一个是电路为啥是这样的


D+这里接了1.5K的上拉电阻。
STM32的D+不是可以内部上拉的吗?这里接1.5K上拉电阻感觉多余了,且调试USB程序特别不便。

另外一个是程序的问题,
以下是USB初始化成功后的大循环,原子哥的程序上面直接改的,把不用的外设全部给删了。
实现的功能是:鼠标左右移动轮换进行。
while(1)
{
   if(bDeviceState==CONFIGURED)
   {
     i++;
     if(i%2)
      Joystick_Send(0,-1,0,0);
     else
      Joystick_Send(0,1,0,0);
   }
 }
现在的问题是,我用USB的Bus Hound检测到的是这样一个情况


造成了连续发送-1和1.
鼠标的移动情况是这样的,可以看到很明显的晃动。

我更改程序为
while(1)
 {
   if(bDeviceState==CONFIGURED)
   {
    if(EP1BUSY==0)
    {
         EP1BUSY=1;
         i++;
         if(i%2)
              Joystick_Send(0,-1,0,0);
         else
              Joystick_Send(0,1,0,0);
    }
  }
 }
u8 EP1BUSY=0;

void EP1_IN_Callback(void)
{
 EP1BUSY=0;
}
并且添加输入端点1回调函数。

EP1BUSY入端点1繁忙的标志位。
发送数据后,输入端点1处于繁忙,不能再进行发送数据。
知道发送成功后,输入缓冲区清空,才能继续加载数据,如果输入缓冲区没有清空,又发送数据,那么数据的发送是错误的。
进入了端点1输入缓冲区回调,就代表数据已发送给PC,输入缓冲已空,可以发下一组数据。

Bus Hound的监测效果是


实际效果是鼠标没有移动(因为速度太快,人眼无法识别)。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-12-22 14:26:10 | 显示全部楼层
STM32的D+不是可以内部上拉的吗?
在哪里看到的?我怎么没看到过哦.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
 楼主| 发表于 2012-12-22 14:53:03 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
对啊,可以内部上拉。但是MINI板上面接了个上拉电阻,调试USB不方便啊~
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
 楼主| 发表于 2012-12-22 19:19:31 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
STM32内部上拉电阻怎么拉起来的?我怎么用KEIL的例程也不行。。。
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
 楼主| 发表于 2012-12-22 19:29:09 | 显示全部楼层
F103似乎必须要接外部上拉,仅仅内部上拉是不行的
F105貌似就不用外不上啦
回复 支持 反对

使用道具 举报

4

主题

200

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2012-12-19
在线时间
0 小时
发表于 2012-12-22 20:25:35 | 显示全部楼层
是启用usb电源后,原来的端口设置包括上拉都不可用了吧?
目前在玩STM32,BBB,RPi
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-12-22 20:50:14 | 显示全部楼层
回复【4楼】lsj9383:
---------------------------------
我就没看到过USB的D+用内部上拉.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
 楼主| 发表于 2012-12-22 21:02:52 | 显示全部楼层
回复【6楼】w0rmis20:
---------------------------------
启动usb电源,不能对该IO口设置输入输出了。但是仍然可以设置USB的上拉电阻。
但是STM32F103的IO口貌似不能设置上拉电阻。我试过,无效。
我在网上看见说F105才可以。
103和105的USB核是不一样的。
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
 楼主| 发表于 2012-12-22 21:03:53 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
呵呵,我之前用PDIUSBD12也可以内部上拉D+呀~。
原子哥,发送数据后要等发送数据成功后,才能进行下次发送啊~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-19 15:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表