凌思微

阅读: 评论:0

凌思微

凌思微

LE5010-凌思微电子蓝牙芯片的开发记录(六)

LE5010睡眠模式的应用说明

1)3种睡眠模式的介绍

​ 注意:所有睡眠模式下,当使用串口打印时,需要将RX上拉(避免RX漏电导致功耗偏高。原因:UART RX 口为浮空输入时,会有漏电,所以要加个上拉,配置内部上拉就可以)

2)BLE应用

要进入睡眠状态需要将外设以及映射到的IO进行反初始化、软件定时器关掉。

LP0模式

​ LP0的睡眠和广播间隔,发送功率还有外设的工作状态有关。BLE的例程在ble_loop()里调用了睡眠函数,只需在app_config.h调用如下宏:

#define SDK_DEEP_SLEEP_ENABLE 1
#define DEBUG_MODE 0

LP2模式

进入睡眠状态需要将外设以及映射到的IO进行反初始化、软件定时器关掉LP2模式有RTC和GPIO唤醒,可同时使用;有四个外部中断唤醒io口:PA00,PA07,PB11,PB15;添加头文件:#include “lsrtc.h” #include “field_manipulate.h”,#include “sleep.h”,同样要配置两个宏:

#define SDK_DEEP_SLEEP_ENABLE 1
#define DEBUG_MODE 0

配置参数:PB15上升沿和RTC唤醒

static void  ls_sleep_enter_lp2(void)
{struct deep_sleep_wakeup wakeup;memset(&wakeup,0,sizeof(wakeup));wakeup.pb15 = 1 ;                          //选择PB15作为唤醒iowakeup.pb15_rising_edge = 1;               //选择上升沿唤醒 = 1 ;                           //选择LP2模式enter_deep_sleep_mode_lvl2_lvl3(&wakeup);  //调用睡眠函数
}

io上升沿唤醒和RTC唤醒函数的配置:

void exit_iowkup_init(void)
{	io_cfg_input(PB15);                       io_pull_write(PB15, IO_PULL_DOWN);         io_exti_config(PB15,INT_EDGE_RISING);   io_exti_enable(PB15,true);                
}void RTC_WKUP_INIT(void )
{HAL_RTC_Init(2);	 RTC_wkuptime_set(5);
}

配置唤醒参数:PB15下降沿唤醒

static void  ls_sleep_enter_lp2(void)
{struct deep_sleep_wakeup wakeup;memset(&wakeup,0,sizeof(wakeup));wakeup.pb15 = 1 ;wakeup.pb15_rising_edge =   = 1 ;enter_deep_sleep_mode_lvl2_lvl3(&wakeup);//调用唤醒函数
}

io下降沿唤醒函数

void exitpb15_iowkup_init(void)
{	io_cfg_input(PB15);                       io_pull_write(PB15, IO_PULL_UP);         io_exti_config(PB15,INT_EDGE_FALLING);   io_exti_enable(PB15,true);                
}

LP3模式

LP3睡眠模式可以用外部中断唤醒,在app_config.h配置两个宏:

#define SDK_DEEP_SLEEP_ENABLE 1
#define DEBUG_MODE 0

配置参数:外部中断上升沿唤醒

static void ls_sleep_enter_LP3(void)
{struct deep_sleep_wakeup  wakeup;memset (&wakeup,0,sizeof(wakeup));wakeup.pa07 = 1;wakeup.pa07_rising_edge = 1;enter_deep_sleep_mode_lvl2_lvl3(&wakeup);//调用睡眠函数
}

唤醒函数配置如下:

void exitpa07_iowkup_init(void)
{	io_cfg_input(PA07);                       io_pull_write(PA07, IO_PULL_DOWN);         io_exti_config(PA07,INT_EDGE_RISING);   io_exti_enable(PA07,true);                
}

配置参数:外部中断下降沿唤醒

static void ls_sleep_enter_LP3(void)
{struct deep_sleep_wakeup  wakeup;memset (&wakeup,0,sizeof(wakeup));wakeup.pa07 = 1;wakeup.pa07_rising_edge = 0;enter_deep_sleep_mode_lvl2_lvl3(&wakeup);//调用睡眠函数
}

唤醒函数配置如下:

void exitpa07_iowkup_init(void)
{	io_cfg_input(PA07);                       io_pull_write(PA07, IO_PULL_UP);         io_exti_config(PA07,INT_EDGE_FALLING);   io_exti_enable(PA07,true);                
}

3)MCU应用

外设在工作的时候是不能睡下去的,用完要 反初始化掉,注意外设的引脚也要反初始化处理,可通过RTC,外部IO唤醒;添加头文件#include “sleep.h”,在app_config.h配置如下两个宏:

#define SDK_DEEP_SLEEP_ENABLE 1
#define DEBUG_MODE 0

MCU应用LP0模式需调用睡眠函数:deep_sleep_no_ble(),LP2模式和LP3模式参照BLE应用下的配置,还要进行如下图设置:将sleep.c下的:

XIP_BANNED void before_wfi()
{sleep_mode_set();
//    while(REG_FIELD_RD(SYSCFG->PMU_PWR, SYSCFG_BLE_PWR3_ST)); //MCU应用注释这行代码ble_hclk_clr();switch_to_xo16m();SYSCFG->ANACFG0 &= ~(SYSCFG_EN_DPLL_MASK | SYSCFG_EN_DPLL_16M_RF_MASK |         SYSCFG_EN_DPLL_128M_RF_MASK | SYSCFG_EN_DPLL_128M_EXT_MASK |            SYSCFG_EN_QCLK_MASK);MODIFY_REG(SYSCFG->ANACFG1,SYSCFG_XO16M_ADJ_MASK | SYSCFG_XO16M_LP_MASK,(uint32_t)3<<SYSCFG_XO16M_ADJ_POS | (uint32_t)0<<SYSCFG_XO16M_LP_POS);
}

注:获取唤醒源接口:uint8_t get_wakeup_source(void);

本文发布于:2024-01-29 17:28:38,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170652052217067.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:凌思微
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23