完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用NUC505 的U盘例子,可以识别U盘并读出扇区等,但不知道如何判断U盘已经拔出?
我做了下列尝试: 1. 使用下列断点办法判断USB设备拔出,但是没有效果: 该断点却可以感应到USB设备插入 for (;;) { if (USBH_ProcessHubEvents()) { put_rc(f_mount(&FatFs[0], "", 0)); //设置断点 } } 2. 观察NUC505的相关寄存器来判断USB设备拔出,也无效果 寄存器:Host Controller Root Hub Port Status 此寄存器有一个 CSC 标志位 Connect Status Change 3. 拦截USBH的中断,无效果 在此设置断点 void USBH_IRQHandler(void) |
|
相关推荐
1个回答
|
|
有两种方法可以判断U盘是否已经拔出:
1. 使用USBH_IsDeviceConnected函数判断 可以在循环中调用USBH_IsDeviceConnected函数,该函数会返回当前USB设备是否连接,如果返回0,则说明设备已经拔出。例如: for (;;) { if (USBH_ProcessHubEvents()) { if (!USBH_IsDeviceConnected(&USB_OTG_FS, MSC_DEVICE_ADDR)) { // U盘已经拔出 break; } // U盘仍然连接,继续操作 } } 2. 使用USBH_UserProcess函数判断 另一种方法是在USBH_UserProcess函数中判断U盘是否连接。该函数会在USB设备连接或者断开时被调用。例如: void USBH_UserProcess(USBH_HandleTypeDef *phost, uint8_t id) { if (phost == &USB_OTG_FS_Core) { // 判断是否为U盘设备 if (id == MSC_DEVICE_ADDR) { if (phost->gState == HOST_CLASS) { // U盘连接 printf("USB device connected.rn"); } else if (phost->gState == HOST_IDLE) { // U盘断开 printf("USB device disconnected.rn"); } } } } 这两种方法都可以有效地判断U盘是否已经拔出。需要注意的是,在操作U盘时一定要注意及时关闭文件、卸载文件系统、停止USB传输等操作,否则可能会导致U盘数据丢失。 |
|
|
|
只有小组成员才能发言,加入小组>>
733 浏览 0 评论
1132 浏览 1 评论
2512 浏览 5 评论
2846 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2693 浏览 6 评论
684浏览 7评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
996浏览 3评论
198浏览 2评论
如果mmcblk1boot0启动失败可不可以从mmcblk1boot1启动呢
189浏览 2评论
用核心板GPIO直接控制网卡1的复位信号是否会导致液晶屏初始化失败?
231浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 01:06 , Processed in 1.074041 second(s), Total 78, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号