Closed snikeguo closed 7 months ago
背景: 有一个STM32设备,长期电源供电,可以理解为,长时间有点的,我期望的目标:当设备的USB口插入USB数据线时和PC正常通讯,拔掉就拔掉了,再次插入USB数据线也能正常通讯。也就是说再次期间STM32设备一直没有重启。 于是我开发了如下代码:
static void notify_handler(uint8_t event, void *arg) { case USBD_EVENT_CONFIGURED: usbd_ep_start_read(); } void ep_out(uint8_t ep, uint32_t nbytes) { send sem(); } recTask() { wait sem( wait forever); dosth(); usbd_ep_start_read(); }
以上代码 在第一次USB插入时工作很好,当第二次插入时,提示报错: 于是我将代码改成如下:
int usbd_ep_start_read(const uint8_t ep, uint8_t *data, uint32_t data_len) { uint8_t ep_idx = USB_EP_GET_IDX(ep); uint32_t pktcnt = 0; if (!data && data_len) { return -1; } /*if (USB_OTG_OUTEP(ep_idx)->DOEPCTL & USB_OTG_DOEPCTL_EPENA) { return -2; 去掉这个判断~~ }*/
问题就解决了, 请问我的解决方案对不对,有没有更优雅的解决方案?
背景: 有一个STM32设备,长期电源供电,可以理解为,长时间有点的,我期望的目标:当设备的USB口插入USB数据线时和PC正常通讯,拔掉就拔掉了,再次插入USB数据线也能正常通讯。也就是说再次期间STM32设备一直没有重启。 于是我开发了如下代码:
以上代码 在第一次USB插入时工作很好,当第二次插入时,提示报错: 于是我将代码改成如下:
问题就解决了, 请问我的解决方案对不对,有没有更优雅的解决方案?