完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
CH573/CH573 USB IN端点发送数据给PC,怎么知道数据已经发送完成?
由于项目中UART都使用了,于是USB CDC例程通过USB打印log,发现有些log打印不出来,判断问题出在端点发送上,代码没有实现发送完成判断,每次调用usb发送都是简单机械的往端点2里面填充 void?USBSendData(uint8_t?*SendBuf,uint8_t?l) { ????usb_sent_flag=0; ????memcpy(pEP2_IN_DataBuf,SendBuf,l); ????DevEP2_IN_Deal(l); } 我想再每次填充、写完发送长度后等待主机把缓冲区的数据取走后再跳出发送函数,查看USB中断处理代码,发现在中断处理代码中会将端点2的发送状态写成NAK: case?UIS_TOKEN_IN?|?2: ????R8_UEP2_CTRL?=?(?R8_UEP2_CTRL?&?~MASK_UEP_T_RES?)?|?UEP_T_RES_NAK; break; 于是我想可不可以判断这个值呢,有了以下代码: void?USBSendData(uint8_t?*SendBuf,?uint8_t?l) { ????usb_sent_flag?=?0; ????memcpy(pEP2_IN_DataBuf,SendBuf,l); ????DevEP2_IN_Deal(l); ????//等待发送完成 ????while((R8_UEP2_CTRL&MASK_UEP_T_RES)?==?UEP_T_RES_ACK) ????{ ????????WWDG_SetCounter(0x0); ????} } 但是发现不行,会一直等在这里,我这野路子估计不行,希望官方能给支个招,提前祝你国庆假期玩的开心!!!! 编辑原因,修改代码样式 |
|
相关推荐
1个回答
|
|
首先需要确保的是,实现的USB设备类型,主机解析后会向EP2发起IN事务,这个是大前提。
其次要确认,是因为USB传输有些问题导致的看门狗超时,还是因为看门狗超时导致的USB无法处理,先后顺序需要理清楚。 仅看这部分代码,应该是没什么问题的。 还有这个busy标志别真的死等(这不可取),主循环中轮询,需要发送的数据做队列。 |
|
|
|
只有小组成员才能发言,加入小组>>
243 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2722 浏览 2 评论
2241 浏览 1 评论
288浏览 7评论
请问一下CH573的PA9引脚用作TMR0功能可以做输入捕获用来进行红外解码吗?
1267浏览 7评论
BLE-Dongle与CH9141-A核心板进行双向透传,无法接收到串口数据怎么解决?
474浏览 7评论
380浏览 5评论
请问CH579默认启动时PC指针是不是指向0x3f000的引导程序的?
258浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-8 11:19 , Processed in 0.980781 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191