完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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作为唤醒io wakeup.pb15_rising_edge = 1; //选择上升沿唤醒 wakeup.rtc = 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 = 0; wakeup.rtc = 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< 注:获取唤醒源接口:uint8_t get_wakeup_source(void); |
|
|
|
只有小组成员才能发言,加入小组>>
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
2333 浏览 0 评论
3340 浏览 9 评论
3019 浏览 16 评论
3513 浏览 1 评论
9115 浏览 16 评论
1233浏览 3评论
633浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
624浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2367浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1934浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-20 11:02 , Processed in 1.245660 second(s), Total 77, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号