CH32V003 使用 __WFI() 后有概率唤不醒 MCU

使用的中断有:
1) systick 中断,配置超时时间为 5ms;
2) uart 的 IDLE,DMA 的 TC,HT 中断;

在 systick 时间到期发现没有事情可做,就调用了 __WFI();
1)如果在 systick 到期后只让 LED 闪烁,没有串口通讯,也就是说没有 uart 和 dma 中断,程序运行一直都正常;
2)当进行串口数据收发(波特率115200): 20ms 间隔发送 250 字节,很快就发现 MCU 无法被唤醒,数据无法收发,LED 也不闪烁;

发生这种情况之后,通过 SDI 也无法下载程序,必须要复位了;

上边这种测试场景只需要把 __WFI() 注释掉,连续串口通讯 10 分钟 MCU 都运行正常,也不会发生丢数据的情况。

请问 __WFI() 正确的使用方式是?

您好,若需要进入睡眠模式,直接调用__WFI()函数即可。可以检查一下出现问题之后程序是不是进HardFault或者跑飞了,若方便,可将工程发至我的邮箱(lzs@wch.cn),这边测试一下,后续问题的沟通也可以通过邮箱进行沟通。


邮件已发送,请查收,谢谢


只有登录才能回复,可以选择微信账号登录