suozhang 发表于 2018-11-9 11:09:52

FreeRTOS tickless STM32 STOP模式实现可能性

本帖最后由 suozhang 于 2018-11-16 15:38 编辑

1、FreeRTOS 源码中已经实现了tickless 模式 STM32配合 sleep 模式实现,功耗在mA级别,具体功耗看下图表格。sleep模式好处是外设功能正常,GPIO/UART/等外设不会受到 FreeRTOS的 tickless模式影响 。
2、在STM32的STOP模式下,保持RAM不变的情况下,利用低功耗模式下的自动唤醒(AWU)(RTC可以在不需要依赖外部中断的情况下唤醒低功耗模式下的微控制器(自动唤醒模式)。RTC提供一个可编程的时间基数,用于周期性从停止或待机模式下唤醒),实现FreeRTOS的tickless模式,功耗在 uA 级别,详细看下表,缺点是,在休眠期间,外设不能正常工作,恢复工作后,需要重新初始化使用的外设。

是否可行,等待万能的网友实现?
---所长,2018年11月9日

2018年11月15日16:07:26,实现RTC 作为 FreeRTOS 时钟源 ,请注意,vTaskDelay( 1024 ); //1024 才是 1S 钟

2018年11月16日14:44:52, 实现 利用 低功耗模式下的自动唤醒(AWU) STOP模式 实现 FreeRTOS tickless 模式,这个 定时有问题 ,因为 外部 32.768K 不稳定,楼下有个内部晶振的 !!

qq57379550 发表于 2018-11-9 15:33:43

这种情况还不如直接创建个电源管理,tickless模式下用sleep,想stop再进入stop,没必要tickless中实现stop吧,

eric2013 发表于 2018-11-10 01:37:00

谢谢楼主分享。

byccc 发表于 2018-11-10 11:48:35

不错,支持下。

suozhang 发表于 2018-11-12 14:51:28

本帖最后由 suozhang 于 2018-11-12 14:54 编辑

qq57379550 发表于 2018-11-9 15:33
这种情况还不如直接创建个电源管理,tickless模式下用sleep,想stop再进入stop,没必要tickless中实现stop ...
你这样 就不能很方便的使用FreeRTOS 的定时器 以及 taskdelay了!

suozhang 发表于 2018-11-12 14:53:29

我发现 实现 有点问题,就是 ,RTC 没办法精准的实现 1mS 定时 ,预分频 设置 32.768 才是 1ms 定时,如果设置 31 的 话 ,误差………………

qq57379550 发表于 2018-11-12 17:52:16

suozhang 发表于 2018-11-12 14:53
我发现 实现 有点问题,就是 ,RTC 没办法精准的实现 1mS 定时 ,预分频 设置 32.768 才是 1ms 定时,如果 ...

RTC没弄好,在stm8L实现ms级 唤醒,使用亚秒,stm32应该也是可以,

suozhang 发表于 2018-11-13 09:20:27

qq57379550 发表于 2018-11-12 17:52
RTC没弄好,在stm8L实现ms级 唤醒,使用亚秒,stm32应该也是可以,

嗯 多谢 可以配置 FreeRTOS 的 tick 为亚秒,即

#define configTICK_RATE_HZ1024

:lol

qq57379550 发表于 2018-11-13 11:09:46

suozhang 发表于 2018-11-13 09:20
嗯 多谢 可以配置 FreeRTOS 的 tick 为亚秒,即

#define configTICK_RATE_HZ1024

。。。。。。

在水一方 发表于 2018-11-13 11:51:04

使用低功耗产品还需要每毫秒钟吗?很多都是使用的10ms一次唤醒

suozhang 发表于 2018-11-14 13:38:31

在水一方 发表于 2018-11-13 11:51
使用低功耗产品还需要每毫秒钟吗?很多都是使用的10ms一次唤醒

这个1024 不是1mS 唤醒一次!!!

suozhang 发表于 2018-11-16 15:04:07

本帖最后由 suozhang 于 2018-11-16 15:10 编辑

我 的 代码是 这样的void vLedTask( void *pvParameters )
{
      
   for(;;)
    {
               
         //PC13 LED1
         bsp_LedToggle(1);
               
         vTaskDelay( 1024 ); //1024 才是 1S 钟
               
      }
}
应该 是 1S高电流 ,1S 低 电流 ,发现 RTC AWU 唤醒 还是有问题 我得 查下 ,结果 是 高电流 2S ,低电流 1S ,这…………

suozhang 发表于 2018-11-16 15:31:05

估计外部32.768K 晶振有问题, 现在 换成 内部晶振 OK……


shampoo 发表于 2018-11-19 14:32:32

这个模式下。。实测功耗是多少?

suozhang 发表于 2018-11-20 10:30:11

shampoo 发表于 2018-11-19 14:32
这个模式下。。实测功耗是多少?

大哥,看13楼的截图啊,没有线程跑的话 ,14uA

xyang.z_OGGU4 发表于 2018-12-5 15:38:32

楼主厉害,这个应用有时还真会有。

One_Zero 发表于 2019-6-5 17:08:41

suozhang 发表于 2018-11-16 15:31
估计外部32.768K 晶振有问题, 现在 换成 内部晶振 OK……

这是啥东西测试的

One_Zero 发表于 2019-6-5 17:10:13

睡眠模式降低系统主频跟停机模式也差不了多少的,

suozhang 发表于 2019-6-5 19:11:39

One_Zero 发表于 2019-6-5 17:08
这是啥东西测试的

小壁虎

qindaotang 发表于 2021-3-21 23:37:22

suozhang 发表于 2018-11-12 14:53
我发现 实现 有点问题,就是 ,RTC 没办法精准的实现 1mS 定时 ,预分频 设置 32.768 才是 1ms 定时,如果 ...

很好资料

lsc 发表于 2022-1-4 11:30:18

谢谢分享。。。
页: [1]
查看完整版本: FreeRTOS tickless STM32 STOP模式实现可能性