[STM32F1]

STM32F103RE使用FreeRTOS的Tickless低功耗模式的问题

[复制链接]
669|2
手机看帖
扫描二维码
随时随地手机跟帖
caoenq|  楼主 | 2019-12-31 10:04 | 显示全部楼层 |阅读模式
各位大佬好,STM32F103RE使用FreeRTOS的Tickless低功耗模式(sleep模式)时遇到一个问题:就是每隔1ms单片机就会从sleep模式下唤醒一次。
程序中共有2个任务,第一个任务每隔500ms翻转一次IO口(PB12)电平;第二个任务每隔1000ms唤醒执行一次,2个任务如图1所示。
我的理解正常的逻辑是:单片机进入tickless模式(sleep模式)后,应该500ms左右唤醒一次是正常的,可是试验结果无情的打了我的脸,1ms竟然就唤醒一次,测量波形如图2所示测得的PA2脚电平翻转(PA2的电平在这个PostSleepProcessing(uint32_t *ulExpectedIdleTime)函数内部进行翻转,如图3。这个函数是单品从Sleep模式醒来后就会执行一次)。
程序中没有开启其他外设中断,请各位大佬帮忙分析一下原因,感激不尽。

图1:程序中的2个任务

图1:程序中的2个任务

图2:测量的PA2脚电平翻转图

图2:测量的PA2脚电平翻转图

图3:单片机唤醒后执行的函数

图3:单片机唤醒后执行的函数

使用特权

评论回复
dalarang| | 2019-12-31 10:20 | 显示全部楼层
没注意过freeRTOS的低功耗模式,但是freeRTOS默认开启1ms的SysTick中断做时间片基准,你看看是不是这个问题

使用特权

评论回复
caoenq|  楼主 | 2019-12-31 10:52 | 显示全部楼层
dalarang 发表于 2019-12-31 10:20
没注意过freeRTOS的低功耗模式,但是freeRTOS默认开启1ms的SysTick中断做时间片基准,你看看是不是这个问题 ...

感谢回复,freertos是默认开启1ms的时基,但是进入sleep模式之前,已经关闭了时基了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

1349

帖子

11

粉丝