OV-Watch中低功耗和数据存储学习总结

     以下都是我个人的思考若有什么地方理解有误欢迎大家在评论区指正和提问。

     手表的低功耗需要配合RTC的wakeup中断以及EXTI外部中断完成;主要的思路是:当stopenter任务收到stop队列中的数据后开始执行:将空闲时间计数清零、关闭耗电的外设、挂起所有的任务、看门狗失能(防止程序复位)、禁用systick 的中断、最后通过PWR_ENTERSTOP函数使芯片进入低功耗(STOP)模式,其中参数选择PWR_MAINREGULATOR_ON和PWR_STOPENTRY_WFI 保持主稳压器开启和中断唤醒,原因是我们需要RTC定时唤醒;低功耗(STOP)模式期间外设时钟和内部高速时钟关闭以降低功耗(systick中断前面已经由我们手动禁用)、而LSE外部低速时钟保持开启(为RTC提供时钟,可触发中断)、EXTI中断依旧、电路图中电池的bat通过二极管和电阻接入芯片的VBAT,备份域(Backup SRAM)启用。

    按照RTCWakeup的配置,2000的重装载值和16分频可计算得差不多1秒钟产生一次唤醒中断;进入低功耗模式后每秒执行中断唤醒一次,芯片唤醒后从PWR_EnterSTOPMode后开始执行:重新启用systic的中断、时钟,并喂一次狗防止看门狗复位、随后把所有的任务恢复,通过(按键是否按下和是否处于抬腕状态)判断是否需要将所有外设唤醒,若判断到按键按下或抬腕则重新打开关闭的外设并往HomeUpdata_MessageQueue中放入数据,这样在传感器更新任务当中接收到数据后开始读取传感器的值并进行数据更新,反之则程序重新回到sleep继续执行进入STOP模式的操作。

【当然在芯片进入低功耗模式期间,用户按下按键出发了外部中断也能够将芯片唤醒,唤醒后判断到了按键按下,程序不会重新回到睡眠模式,并打开外设....】

在芯片的数据手册当中有明确写到:可以通过任意的EXTI线对芯片进行唤醒。

    当按键2按下且处于主界面时、空闲时间计数(软件计时器)超过UI_TTtime后都会发送stop的消息;

if(HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 2000,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值