• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STM32 USB驱动怎么编写

TT__UUming 2017-11-01 浏览量:693
对于USB全速设备来说,只要USB设备插入,进行正确枚举后,USB设备相当于在线,上位机每1ms会发送一个SOF帧首标志给下位机,因此下位机每1ms会调用一次帧首中断回调函数,简言之就是上述中断处理函数会1ms进一次。问题发现了,解决就比较好办了,不过解决办法有点笨,设置一个全局BOOL变量来标识,当有真正的用户数据到来时才抛出HM_USB消息。解决问题后代码如下:
中断处理函数:
static INT USB_LP_CAN1_RX0_IRQHandler(LPVOID lpThis, UINT auLevel, LPVOID lpParam)
{
USB_Istr();
if(IsReceiveData == TRUE)
{
PostEvent(DEV_USB, HM_USB);
IsReceiveData = FALSE;
}
return 0;
}
在真正接收到用户数据时置全局变量为FRUE:
void EP3_OUT_Callback(void)
{
u32 len,i=3000;

len = GetEPRxCount(ENDP3);
if ( len > 0 )


PMAToUserBufferCopy(gpDataBuffer + count_out, ENDP3_RXADDR, len);
count_out += len;
}
IsReceiveData = TRUE;
SetEPRxValid(ENDP3);
while(i-->0); // delay 
}
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • STM32 USB驱动


    https://wenku.baidu.com/view/240560158e9951e79b8927dc.html​

    • 发布于 2017-11-02
    • 举报
    • 评论 1
    • 0
    • 0
TT__UUming 回复了 汉云:终于解决了 回复

其他答案 数量:0

相关问题

问题达人换一批

STM32 USB驱动怎么编写