9869|22

9798

帖子

24

TA的资源

版主

楼主
 

BlueNRG-1又要低功耗又要计时器怎么办? [复制链接]

 
 
挑战赛里需要使用BlueNRG-1发送时间到手机,单位是毫秒
计时的我们一搬是通过定时器来实现,BlueNRG-1有2个multifunctions timers (MFT)和一个RTC定时器可供选择
低功耗方面BlueNRG-1有4种工作模式RUNNING、CPU_HALT、WAKETIMER和NOTIMER
RUNNING为运行模式功耗最高,CPU_HALT模式下只有CPU停止工作,WAKETIMERT和NOTIMER模式下CPU和所有外设均停止工作(蓝牙除外)
不同的是WAKETIMERT在蓝牙处于广播或连接的时候可以使用一个叫VTimer的定时器唤醒
更多低功耗信息可以参考官方应用笔记AN4820: BlueNRG-1 and BlueNRG-2 low power modes
http://www.st.com/content/ccc/resource/technical/document/application_note/group0/17/f2/d8/23/03/01/47/a9/DM00263007/files/DM00263007.pdf/jcr:content/translations/en.DM00263007.pdf
通常情况为了降低整体工作电流我们会在空闲时进入WAKETIMERT或NOTIMER模式,遗憾的是这两种模式下所有外设都被关闭,不仅仅关闭MFT,RTC定时器也无法正常工作
这时候定时工作只能考虑那个用于唤醒的VTimer定时器,还好这个定时器提供了很多我们想要的功能,在bluenrg1_stack.h头文件里有控制VTimer的函数
可以选择4个(0~3)用于唤醒BlueNRG-1的VTimer计数器,和传统定时器类似,超时唤醒在定时器设置的指定时间到达后被触发
例如我们可以设置VTimer分别间隔5s和7s被重复唤醒,同时还可以执行唤醒后的回调函数void HAL_VTimerTimeoutCallback(uint8_t timerNum); timerNum对应4个超时计数器的其中一个
intHAL_VTimerStart_ms(uint8_t timerNum, int32_t msRelTimeout);用于让VTimer定时器的timerNum计数器在msRelTimeout毫秒后唤醒BlueNRG-1
voidHAL_VTimer_Stop(uint8_t timerNum);用于关闭VTimer定时器的timerNum计数器的超时唤醒功能
有了超时唤醒我们可以在VTimerTimeoutCallback中断里对一个变量进行计数,例如1秒钟唤醒一次时计数单位为1秒
不过这会存在一个问题,超时时间设长了时间精度不够,设短了频繁唤醒会增加电流消耗
好在VTimer很够意思,除了超时唤醒它还提供更多我们想要的功能
函数uint32_t HAL_VTimerGetCurrentTime_sysT32(void);用来于返回VTimer计数器的当前计数数值
int32_tHAL_VTimerDiff_ms_sysT32(uint32_t sysTime1, uint32_t sysTime2);用于返回2个数值对应的时间差,单位为毫秒
我们可以在需要计时的时候通过HAL_VTimerGetCurrentTime_sysT32获得当前计数,保存然后在需要获得时间时再获得一次当前计数
然后通过HAL_VTimerDiff_ms_sysT32计数当前与第一次计数之间的时间差
HAL_VTimerDiff_ms_sysT32反回一个int32的数值
int32对应的值为-2147483648~2147483647
测试发现409.6个sysTime会对应1个毫秒,所以HAL_VTimerDiff_ms_sysT32最大可以返回不超过87.3分钟的时间差

最新回复

官网上3.2.0发布了基于Free RT-os的Demo,可以直接使用RTOS   详情 回复 发表于 2020-6-3 16:15
点赞 关注(1)
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 

回复
举报

1382

帖子

2

TA的资源

五彩晶圆(初级)

沙发
 
本帖最后由 cruelfox 于 2018-1-28 00:16 编辑

这个背后就是 Watchdog Timer 吧.  确实,RTC在低功耗模式下都不能用,比较惨。
----------------------------------------------------------------------------------
研究下,可能不是用WDG。手册提到有两个BLE Timer,没有说细节。

搞清楚实现要去分析 HAL VTimer 函数的代码了。
 
 
 

回复

664

帖子

104

TA的资源

纯净的硅(中级)

板凳
 
外设功能都整合完毕了,也正在纠结这个定时怎么搞。看了版主littleshrimp虾扯蛋的这篇,省了我不少时间,哈哈,谢谢littleshrimp分享。低功耗这块,没有工具,指标没法给出。
 
 
 

回复

46

帖子

0

TA的资源

一粒金砂(中级)

4
 
谢谢楼主,整合到现在的代码中
 
 
 

回复

46

帖子

0

TA的资源

一粒金砂(中级)

5
 
楼主您好,想问一下您,我是在主函数初始化您所说的HAL_VTimerStart_ms,但是初始化之后,就会死在此处。您能指点一下吗?

点评

是执行HAL_VTimerStart_ms函数后卡在HAL_VTimerStart_ms里不能正常返回吗? timerNum和msRelTimeout分别设的多少?  详情 回复 发表于 2018-1-29 11:33
 
 
 

回复

9798

帖子

24

TA的资源

版主

6
 
tang187 发表于 2018-1-29 09:46
楼主您好,想问一下您,我是在主函数初始化您所说的HAL_VTimerStart_ms,但是初始化之后,就会死在此处。您 ...

是执行HAL_VTimerStart_ms函数后卡在HAL_VTimerStart_ms里不能正常返回吗?
timerNum和msRelTimeout分别设的多少?

点评

if(HAL_VTimerStart_ms(1, 10000) == 1) { printf("HAL_VTimerStart_ms Fail \r\n"); } printf("HAL_VTimerStart_ms OK\r\n"); 这样的  详情 回复 发表于 2018-1-29 11:49
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

46

帖子

0

TA的资源

一粒金砂(中级)

7
 
littleshrimp 发表于 2018-1-29 11:33
是执行HAL_VTimerStart_ms函数后卡在HAL_VTimerStart_ms里不能正常返回吗?
timerNum和msRelTimeout分别 ...

                 if(HAL_VTimerStart_ms(1, 10000) == 1)
    {
        printf("HAL_VTimerStart_ms  Fail \r\n");
    }
    printf("HAL_VTimerStart_ms  OK\r\n");
这样的

点评

调试时代码卡在哪个位置? 这个例程里有HAL_VTimerStart_ms的使用 在main.c的sleep_timer函数中 你可以试试 STMicroelectronics\BlueNRG-1_2 DK 2.5.0\Project\BlueNRG1_Periph_Examples\Micro\Sleep_Test  详情 回复 发表于 2018-1-29 11:56
 
 
 

回复

9798

帖子

24

TA的资源

版主

8
 
tang187 发表于 2018-1-29 11:49
if(HAL_VTimerStart_ms(1, 10000) == 1)
    {
        printf("HAL_VTimerStart_ms  Fail \r\n");
...

调试时代码卡在哪个位置?
这个例程里有HAL_VTimerStart_ms的使用
在main.c的sleep_timer函数中
你可以试试
STMicroelectronics\BlueNRG-1_2 DK 2.5.0\Project\BlueNRG1_Periph_Examples\Micro\Sleep_Test

点评

感觉这个函数和Beacon历程哪里不协调,楼主有没有发现,我打开Beacon之后,就会不正常工作  详情 回复 发表于 2018-1-29 21:37
三克油,我试一下  详情 回复 发表于 2018-1-29 15:50
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

46

帖子

0

TA的资源

一粒金砂(中级)

9
 
littleshrimp 发表于 2018-1-29 11:56
调试时代码卡在哪个位置?
这个例程里有HAL_VTimerStart_ms的使用
在main.c的sleep_timer函数中
你可 ...

三克油,我试一下
 
 
 

回复

46

帖子

0

TA的资源

一粒金砂(中级)

10
 
本帖最后由 tang187 于 2018-1-29 21:47 编辑
littleshrimp 发表于 2018-1-29 11:56
调试时代码卡在哪个位置?
这个例程里有HAL_VTimerStart_ms的使用
在main.c的sleep_timer函数中
你可 ...

使用这种模式开启Beacon广播之后,就会唤醒呀。

点评

蓝牙发送数据时会唤醒处理器 可以通过关闭广播解决这个问题  详情 回复 发表于 2018-1-29 22:44
 
 
 

回复

9798

帖子

24

TA的资源

版主

11
 
tang187 发表于 2018-1-29 21:37
使用这种模式开启Beacon广播之后,就会唤醒呀。

蓝牙发送数据时会唤醒处理器 可以通过关闭广播解决这个问题
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

12
 
为什么我在睡眠模式下开启这个定时器 但是回调函数没有响应

点评

可以参考一下这个文件HAL_VTimerTimeoutCallback在626行 VTimer配置可以搜索APPL_TIMER可看对应代码  详情 回复 发表于 2018-9-14 18:14
 
 
 

回复

9798

帖子

24

TA的资源

版主

13
 
sfd123654 发表于 2018-9-13 15:14
为什么我在睡眠模式下开启这个定时器 但是回调函数没有响应

可以参考一下这个文件HAL_VTimerTimeoutCallback在626行
VTimer配置可以搜索APPL_TIMER可看对应代码

demo_application.c (24.82 KB, 下载次数: 17)

个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

1

帖子

0

TA的资源

宇宙尘埃

14
 
大虾,能帮忙看下我的这个关于VTimer的定时问题吗。https://bbs.eeworld.com.cn/thread-1060688-1-1.html。感谢了····
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

15
 

请问 虾神,请问BlueNRG 的系统时间是哪个接口?

点评

系统时间哪个接口?你是说RTC吗?  详情 回复 发表于 2020-5-27 12:46
 
 
 

回复

9798

帖子

24

TA的资源

版主

16
 
IrisArtz- 发表于 2020-5-27 10:49
请问 虾神,请问BlueNRG 的系统时间是哪个接口?

系统时间哪个接口?你是说RTC吗?
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

17
 
littleshrimp 发表于 2020-5-27 12:46 系统时间哪个接口?你是说RTC吗?

是的,RTC计时的接口在那里,长时间会有溢出吗。。?求教

点评

文档和例程里都有介绍 你先看看  详情 回复 发表于 2020-5-27 13:21
 
 
 

回复

9798

帖子

24

TA的资源

版主

18
 
IrisArtz- 发表于 2020-5-27 13:18
是的,RTC计时的接口在那里,长时间会有溢出吗。。?求教

文档和例程里都有介绍 你先看看
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

19
 
请问虾神,"可以选择4个(0~3)用于唤醒BlueNRG-1的VTimer计数器"  那么如果我的代码中需要超过4个计时器,该如何处理呢?

点评

怎么会用到这么多?什么需求?能用现有的扩展吗?  详情 回复 发表于 2020-5-28 12:30
 
 
 

回复

9798

帖子

24

TA的资源

版主

20
 
IrisArtz- 发表于 2020-5-28 09:11
请问虾神,"可以选择4个(0~3)用于唤醒BlueNRG-1的VTimer计数器"  那么如果我的代码中需要超过4个计时器, ...

怎么会用到这么多?什么需求?能用现有的扩展吗?
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表