灵动微mm32f系列的 tinyusb 例程 是怎样进入 suspend 模式的,以及怎样退出的,请根据demo code ,帮我写一份进入 suspend 和 resume 的示例代码
时间: 2023-06-11 07:06:25 浏览: 247
在灵动微mm32f系列的 tinyusb 例程中,进入和退出suspend模式的代码如下:
进入suspend模式:
```c
void tud_suspend_cb(void)
{
// Wake up by uart or button press
// so no need to do anything here
// but must call tud_rh_suspend_complete() to acknowledge the suspend request
tud_rh_suspend_complete();
}
// Invoked when usb bus is resumed
void tud_resume_cb(void)
{
(void) tud_control_xfer(0, 0, 0, NULL, 0); // dummy control request to wake up host if it is sleeping
}
```
在进入suspend模式时,需要调用tud_rh_suspend_complete()函数,以确认收到suspend请求。当usb bus被唤醒时,调用tud_resume_cb()函数。
退出suspend模式:
```c
// Invoked when received control request to enter DFU mode
bool tud_control_request_cb(uint8_t rhport, tusb_control_request_t const * p_request)
{
switch (p_request->bmRequestType_bit.typeRecipient)
{
case TUSB_REQ_TYPE_STANDARD:
switch (p_request->bRequest)
{
case TUSB_REQ_SET_FEATURE:
if ( p_request->wValue == 0 ) tud_suspend();
break;
case TUSB_REQ_CLEAR_FEATURE:
if ( p_request->wValue == 0 ) tud_resume();
break;
}
break;
}
return false;
}
void tud_suspend(void)
{
// Stop usb
usb_device_disconnect();
// Enter into deep sleep mode
// ...
}
void tud_resume(void)
{
// Leave deep sleep mode
// ...
// Start usb
usb_device_connect();
}
```
在退出suspend模式时,需要在tud_control_request_cb()函数中,根据收到的控制请求来判断是否需要退出suspend模式。在tud_suspend()函数中,停止usb设备,并进入深度睡眠模式。在tud_resume()函数中,退出深度睡眠模式,并重新启动usb设备。
阅读全文