keil那个usb库还不是一般的乱。。其实我资质愚钝。。看了一个多月还是云里雾里,,,,国内关于这个的资料也不多,,我只找到这两个比较容易看得懂的,
一个是百度文库的,《
USB的“JoyStickMouse”例程分析》,地址在名字那里,分析的挺详细,有些纰漏也问题不大,只是没有总结出自己开发usb设备的一个通用的流程。
另一个就是小新前辈的《
基于STM32的USB程序开发笔记》,这个就很详尽了,老板也叫我按这个做。可是我仔细看了看。。。我发现小新前辈用的固件比较老,基本上对不上号了,我在stm32官网也找不到对应的usb固件。。在小新的blog上也找不到源码。。我看很多人也应该找不到,百度了一下。。终于找到地址。。。
为了方便。我还是上传个给兄弟们参考参考吧~
原子哥,这个程序有个BUG:在usb_regs.h 315行
usb_regs.h
我在做HID键盘时,获取PC下发的LED状态时,获取PC的OUT数据 ,只能获取到第一次,因为SETUP过程都能正确完成(HID鼠标也没问题),一直没怀疑宏定义会有错,最后才发现这个宏定义好像不能正常设置非0端点的RX 接收状态。
正确的宏定义为:
#define SetEPR_RXStatus(bEPNum, wStatus)
{
unsigned short wRegVal = GetEPR(bEPNum) & EP_RX_DTOG_MASK;
if((EP_RX_DTOG1 & wStatus) != 0)
{wRegVal ^= EP_RX_DTOG1;}
if((EP_RX_DTOG2 & wStatus) != 0)
{wRegVal ^= EP_RX_DTOG2;}
SetEPR(bEPNum, wRegVal);
}
一周热门 更多>