第一个是电路为啥是这样的
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的监测效果是
实际效果是鼠标没有移动(因为速度太快,人眼无法识别)。
|