我尝试使用CH32V305做一个DAP调试器。USB设备这一块已经基本调试好,插上后可以认出CDC与DAP设备了。
但我在主程序里面这样写:
while(1){WFI();}
则USB设备就枚举失败了。用一个空的while(1),就没任何问题。
全部差异只有这一个WFI()了。调试记录可以看到有USB中断产生,但获取描述符这一步失败。
我尝试使用CH32V305做一个DAP调试器。USB设备这一块已经基本调试好,插上后可以认出CDC与DAP设备了。
但我在主程序里面这样写:
while(1){WFI();}
则USB设备就枚举失败了。用一个空的while(1),就没任何问题。
全部差异只有这一个WFI()了。调试记录可以看到有USB中断产生,但获取描述符这一步失败。
您好,调用WFI会进入低功耗模式,直接放在while循环中会不停的进入睡眠模式,你可以具体说一下你的想法或目的,这样的用法可能会有问题。可以通过邮箱(lzs@wch.cn)和我具体沟通一下。
主要是想这样:
while(1){
WFI();
DAP_Handle();
}
想在没有中断和其他任务时进入低功耗状态。以前在ARM上可以这样用。RTOS的Idle也会调用WFI。
我猜测是wfi之后,usb未完成的DMA也被终止了吧。
似乎arm上,wfi只停止cpu核,并不停止外设的。
您好,CH32V305执行WFI后会进入睡眠模式,该模式下外设时钟也是开启的,你可以在执行WFI后加个延时试一下,若方便可将工程发我具体看一下,后续问题的沟通可通过邮箱和我沟通。
工程已经发送,请帮忙看一下