硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5475|回复: 20
收起左侧

[FreeRTOS] FreeRTOS tickless STM32 STOP模式实现可能性

  [复制链接]

28

主题

274

回帖

358

积分

高级会员

积分
358
发表于 2018-11-9 11:09:52 | 显示全部楼层 |阅读模式
本帖最后由 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 不稳定,  楼下有个内部晶振的 !!

STM32中用 stop 模式 配合低功耗模式下的自动唤醒(AWU) 能否实现FreeRTOS tickless 模式.pdf

804.97 KB, 下载次数: 193

STM32F103C8T6_FreeRTOS_V10.0_RTC作为FreeRTOS时钟源.7z

1.33 MB, 下载次数: 108

STM32F103C8T6_FreeRTOS_V10.0_RTC作为FreeRTOS时钟源_STOP模式实现tickless模式_14uA.7z

1.33 MB, 下载次数: 176

评分

参与人数 1金币 +10 收起 理由
byccc + 10 赞一个!

查看全部评分

回复

使用道具 举报

2

主题

180

回帖

186

积分

初级会员

积分
186
发表于 2018-11-9 15:33:43 | 显示全部楼层
这种情况还不如直接创建个电源管理,tickless模式下用sleep,想stop再进入stop,没必要tickless中实现stop吧,
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
发表于 2018-11-10 01:37:00 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2018-11-10 11:48:35 | 显示全部楼层
不错,支持下。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

28

主题

274

回帖

358

积分

高级会员

积分
358
 楼主| 发表于 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了!
回复

使用道具 举报

28

主题

274

回帖

358

积分

高级会员

积分
358
 楼主| 发表于 2018-11-12 14:53:29 | 显示全部楼层
我发现 实现 有点问题,就是 ,RTC 没办法精准的实现 1mS 定时 ,预分频 设置 32.768 才是 1ms 定时,如果设置 31 的 话 ,误差………………
回复

使用道具 举报

2

主题

180

回帖

186

积分

初级会员

积分
186
发表于 2018-11-12 17:52:16 | 显示全部楼层
suozhang 发表于 2018-11-12 14:53
我发现 实现 有点问题,就是 ,RTC 没办法精准的实现 1mS 定时 ,预分频 设置 32.768 才是 1ms 定时,如果 ...

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

使用道具 举报

28

主题

274

回帖

358

积分

高级会员

积分
358
 楼主| 发表于 2018-11-13 09:20:27 | 显示全部楼层
qq57379550 发表于 2018-11-12 17:52
RTC没弄好,在stm8L实现ms级 唤醒,使用亚秒,stm32应该也是可以,

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

#define configTICK_RATE_HZ  1024

回复

使用道具 举报

2

主题

180

回帖

186

积分

初级会员

积分
186
发表于 2018-11-13 11:09:46 | 显示全部楼层
suozhang 发表于 2018-11-13 09:20
嗯 多谢 可以配置 FreeRTOS 的 tick 为  亚秒,即

#define configTICK_RATE_HZ  1024

。。。。。。
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-11-13 11:51:04 | 显示全部楼层
使用低功耗产品还需要每毫秒钟吗?  很多都是使用的10ms一次唤醒
回复

使用道具 举报

28

主题

274

回帖

358

积分

高级会员

积分
358
 楼主| 发表于 2018-11-14 13:38:31 | 显示全部楼层
在水一方 发表于 2018-11-13 11:51
使用低功耗产品还需要每毫秒钟吗?  很多都是使用的10ms一次唤醒

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

使用道具 举报

28

主题

274

回帖

358

积分

高级会员

积分
358
 楼主| 发表于 2018-11-16 15:04:07 | 显示全部楼层
本帖最后由 suozhang 于 2018-11-16 15:10 编辑

我 的 代码是 这样的
  1. void vLedTask( void *pvParameters )
  2. {
  3.         
  4.      for(;;)
  5.     {
  6.                
  7.            //PC13 LED1
  8.            bsp_LedToggle(1);
  9.                
  10.            vTaskDelay( 1024 ); //1024 才是 1S 钟
  11.                
  12.       }
  13. }
复制代码
应该 是 1S  高电流 ,1S 低 电流 ,发现 RTC AWU 唤醒 还是有问题 我得 查下 ,结果 是 高电流 2S ,低电流 1S ,这…………
QQ图片20181116150145.png
回复

使用道具 举报

28

主题

274

回帖

358

积分

高级会员

积分
358
 楼主| 发表于 2018-11-16 15:31:05 | 显示全部楼层
估计外部  32.768K 晶振有问题, 现在 换成 内部晶振 OK……


QQ图片20181116152859.png

STM32F103C8T6_FreeRTOS_V10.0_RTC作为FreeRTOS时钟源_STOP模式实现tickless模式_14uA.7z

1.33 MB, 下载次数: 175

回复

使用道具 举报

3

主题

54

回帖

63

积分

初级会员

积分
63
发表于 2018-11-19 14:32:32 | 显示全部楼层
这个模式下。。实测功耗是多少?
回复

使用道具 举报

28

主题

274

回帖

358

积分

高级会员

积分
358
 楼主| 发表于 2018-11-20 10:30:11 | 显示全部楼层
shampoo 发表于 2018-11-19 14:32
这个模式下。。实测功耗是多少?

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

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2018-12-5 15:38:32 | 显示全部楼层
楼主厉害,这个应用有时还真会有。
回复

使用道具 举报

2

主题

10

回帖

16

积分

新手上路

积分
16
发表于 2019-6-5 17:08:41 | 显示全部楼层
suozhang 发表于 2018-11-16 15:31
估计外部  32.768K 晶振有问题, 现在 换成 内部晶振 OK……

这是啥东西测试的
回复

使用道具 举报

2

主题

10

回帖

16

积分

新手上路

积分
16
发表于 2019-6-5 17:10:13 | 显示全部楼层
睡眠模式降低系统主频跟停机模式也差不了多少的,
回复

使用道具 举报

28

主题

274

回帖

358

积分

高级会员

积分
358
 楼主| 发表于 2019-6-5 19:11:39 | 显示全部楼层
One_Zero 发表于 2019-6-5 17:08
这是啥东西测试的

小壁虎
回复

使用道具 举报

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2021-3-21 23:37:22 | 显示全部楼层
suozhang 发表于 2018-11-12 14:53
我发现 实现 有点问题,就是 ,RTC 没办法精准的实现 1mS 定时 ,预分频 设置 32.768 才是 1ms 定时,如果 ...

很好资料
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2022-1-4 11:30:18 | 显示全部楼层
谢谢分享。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-3 06:14 , Processed in 0.393369 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表