电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
问答
STM32 USB驱动怎么编写
已解决
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驱动怎么编写
写回答
关注问题
×
我要举报该内容,理由是:
内容质量差:
内容太水、伸手党
垃圾广告信息:
广告、招聘、推广、测试内容等
偏离问答主题:
与技术无关、讨论类
与社区已有内容重复:
违规内容:
色情、暴力、血腥、敏感信息等
不友善内容:
人事攻击、挑衅辱骂、恶意行为
以上选项都不是: