完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我们的低功耗是通过睡眠来实现的,单片机在进入睡眠状态时,USB模块是停止工作的,但是由于配置了RB_UC_DEV_PU_EN强制上拉,根集线器不会判断为设备断连,主机也就不会移除USB设备。若此时主机给USB设备发送数据,而设备的USB模块停止工作而不能及时应答,主机可能会主动移除USB设备导致断连,设备需要再次经过枚举才能连上。
可以自行设置一个标志,检测USB模块是否处于工作中。在即将进入睡眠时判断标志,若仍在收发数据,就跳出而不进入睡眠状态。 |
|
|
|
HAL_SLEEP是在宏定义开启,如何在工作中关闭不进入睡眠呢?
|
|
|
|
HAL_SLEEP只用于睡眠功能的使能,进入睡眠需要调用进入低功耗睡眠模式的函数,对于58x系列的单片机函数名为CH58X_LowPower。
手动设置一个flag标志,在枚举收到令牌包时,这个flag置位,表示USB正在工作中。在调用CH58X_LowPower前或是在函数中添加对flag的判断,若判断为USB仍在工作中则直接return,不继续执行睡眠模式的启动。 当USB数据传输完毕,用户从USB接口拔掉设备时,flag需要清除标志位。可以向主机发个数据包看主机是否有应答,或者是读D+D-两脚上的电压是否都没有上拉,来判断设备是否手动拔出。若已经拔出,flag标志清除,则可以进入低功耗睡眠。 |
|
|
|
只有小组成员才能发言,加入小组>>
456 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2865 浏览 2 评论
2352 浏览 1 评论
804浏览 2评论
CH569通过HSPI实现USB3.0和FPGA高速双向通讯
629浏览 1评论
489浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
353浏览 1评论
629浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 21:44 , Processed in 2.177239 second(s), Total 80, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号