打印
[其他ST产品]

Alarm闹钟周期唤醒(10s/10min/10h)

[复制链接]
196|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
哈根达斯uz|  楼主 | 2022-10-18 23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在搞stm32L151C8T6的低功耗模式。

项目场景:
提示:这里简述项目相关背景:
LoRa低功耗,用到stm32L151C8T6+sx1278,SPI通信。本文主要讲述stm32L151低功耗问题——待机模式。
以下代码理论10s唤醒一次,时间可自由设置,详细配置之代码注释有

使用特权

评论回复
沙发
哈根达斯uz|  楼主 | 2022-10-18 23:57 | 只看该作者
问题描述:
不废话直接上代码:
LowPower.c文件:[code]#include "LowPower.h"
#include "stm32l1xx_rtc.h"
#include "stm32l1xx.h"
#include "stm32l1xx_exti.h"
#include "misc.h"
#include "stm32l1xx_rcc.h"
#include "stm32l1xx_pwr.h"

//RTC 时钟配置
void rtc_init(void) {
    RTC_InitTypeDef RTC_InitStructure;

使用特权

评论回复
板凳
哈根达斯uz|  楼主 | 2022-10-18 23:58 | 只看该作者
main.c函数:
int main()
{
        //系统初始化
        //串口初始化
        //。。。初始化
        rtc_init();   //RTC初始化
        platform_rtc_set_alarmA();   //RTC闹钟唤醒配置
        while(1)
        {
                //要执行的程序
                ......
                ......
                Sys_Standby1(); //进入待机模式
        }
}

使用特权

评论回复
地板
哈根达斯uz|  楼主 | 2022-10-18 23:59 | 只看该作者
注意事项:
时钟问题
在第二部分为什么说是理论10s呢?因为我在测试的时候发现真正唤醒的时间是8s/9s的样子,基本上设置10s会快上1s左右,2min快上12s左右,10min快上一分钟。这就有点离谱了,后来有看到网有在网上说这是因为晶振或者电容不匹配导致的,内部时钟好像确实不准确。可以换为外部晶振更加精准,电容的话就需要在焊板子的时候选用了,这暂时超纲了,不谈。
是否进入中断
standy待机模式不进入中断,stop模式进入,详细见网有博客:停机和待机唤醒程序入口
中断标志清除
对于Alarm唤醒来说,主要是Alarm初始化是要注意中断标志位。
对于停机唤醒要格外注意在中断服务函数种清除用到的中断标志位。

使用特权

评论回复
5
哈根达斯uz|  楼主 | 2022-10-18 23:59 | 只看该作者
心得:
wakeup唤醒,最多可实现33s左右时间的唤醒,想要达到更高时间就无法使用。Alarm使用这样的计算方法一样可以达到周期性唤醒单片机:
RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds = (RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds+10);        //秒唤醒时间,必须为5的倍数

Alarm唤醒,Alarm唤醒不进入闹钟中断函数,到时间就自动唤醒后,自动重新设置Alram。stop模式更复杂,会进入中断函数,必须进行中断标志位的清除,否则会影响下一次唤醒。

使用特权

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

本版积分规则

19

主题

249

帖子

0

粉丝