完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我的程序只有一个线程,里面的工作很简单,就几句话,就是控制LED灯的翻转,用rt_thread_mdelay(1000)来1000ms翻转一次状态,如果没有开PM组件的情况下,用示波器可以看到是比较准确的1000ms翻转一次,如果开了PM组件,默认进入PM_SLEEP_MODE_DEEP状态,我用外部RTC时钟来109ms唤醒CPU一次,再用示波器观察外部RTC的时钟中断脚,可以看到每到LED线程该恢复工作的那个周期,RTC的中断周期就多加了100ms,见下图。我更改外部RTC的唤醒时钟周期为203ms以后,用示波器看也是同样的情况,每到LED线程该恢复工作的那个周期,RTC的中断周期也同样多加了100ms左右。请问这是什么原因造成的?多谢。。。 |
|
相关推荐
5个回答
|
|
我把再次使能外置RTC时钟中断的函数放在了idle线程中的rt_system_power_manager()前面,见下图。我感觉时钟周期变长好像是短时间两次进idle线程叠加了周期时间的原因,如果是这样的话,那为什么第一次没有直接进低功耗模式呢?也就是LED线程的那个rt_thread_mdelay后没有进入低功耗模式。 |
|
|
|
|
|
|
|
多谢老大回复。
不好意思忘了说平台,是STM32F103RE,用的是sunwan大佬的BSP包,说是已经适配好了F1的平台,用的是内部RTC。因为我上面两个示波器的图片是测量的外部RTC的时钟中断的输出,外部RTC的精度还是可以的,大部分周期也是准确的,只是在LED线程延时到时恢复运行的周期,外部RTC的时钟周期就被延长了,所以我就怀疑到底是外部RTC的时钟周期被重复写了,还是时间补偿的有问题。 |
|
|
|
rtc的清中断和设中断不应该在空闲线程中调用,rtc的中断处理中已经做处理了吧!如果需要做处理也应该是在rtc中断处理中做
|
|
|
|
多谢回复。
我这个idle线程中的清中断和开中断是处理的外部RTC的,因为我是靠外部RTC的时钟中断来唤醒CPU的。我也想过这个放的地方是不是合适,但是我是想让CPU休眠一定的时间就由外部RTC唤醒,所以我就放在idle线程中的rt_system_power_manager()前面了。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
842 浏览 0 评论
6562 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2869 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
3105 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
33536 浏览 11 评论
73731 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-5 04:42 , Processed in 0.751678 second(s), Total 78, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号