NB-IoT 终端设备低功耗--软件设计
【摘要】 上一篇:NB-IoT 终端设备低功耗--硬件设计,我们给大家介绍了低功耗硬件设计相关内容,这一篇来聊聊低功耗软件设计方面的内容。在低功耗设备中,软件设计至关重要,由软件驱动硬件进入低功耗模式可以节省更多能耗。一、开关电源软性开关单独配备开关电源IC,LDO具备一个“EN”口,可以通过单片机输出高低电平进行驱动,一般情况下通过GPIO控制高电平开启,低电平关闭,如果是外部传感器或耗电大户,可以...
上一篇:NB-IoT 终端设备低功耗--硬件设计,我们给大家介绍了低功耗硬件设计相关内容,这一篇来聊聊低功耗软件设计方面的内容。在低功耗设备中,软件设计至关重要,由软件驱动硬件进入低功耗模式可以节省更多能耗。
一、开关电源软性开关
单独配备开关电源IC,LDO具备一个“EN”口,可以通过单片机输出高低电平进行驱动,一般情况下通过GPIO控制高电平开启,低电平关闭,如果是外部传感器或耗电大户,可以通过IO控制方式节省电源;
如果是频繁发送数据的NB设备,不建议将NB模组作为单独IC控制,因为海思芯片模组本身在PSM模式下也就3-5uA的耗电量,如果整个模组下电,再次开启时联网更加耗电,所以要根据需求来设计软硬件;
二、双芯模式:MCU+NB模组
1、单片机MCU伪代码,以STM32L系列单片机HAL库为例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | //开启低功耗模式 HAL_PWREx_EnableUltraLowPower(); HAL_PWREx_EnableFastWakeUp(); //联网 connect_network(); while (1) { //发送数据 send_data(); //AT+NSOSTF,快速关闭连接,使得模组立即进入PSM模式,否则需要等待运营商配置的idle时间 send_over(); //重置RTC服务 HAL_RTCEx_DeactivateWakeUpTimer(&hrtc); //重要!!!!关闭与NB通讯的串口 SystemPower_Pre_STOP(); //开启RTC唤醒中断 HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0xffff, RTC_WAKEUPCLOCK_RTCCLK_DIV16); //进入低功耗模式STOP HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); //重要!!!!打开与NB通讯的串口 SystemPower_Post_STOP(); //退出STOP模式后重新初始化时钟 SystemClockConfig_STOP(); //延时几秒 HAL_Delay(5000); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | /** * 进入低功耗模式前处理 */ void SystemPower_Pre_STOP( void ){ GPIO_InitTypeDef GPIO_InitStruct; /*Configure GPIO pin : USART1=> PA9, PA10 */ GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /** * 退出低功耗模式后处理 */ void SystemPower_Post_STOP( void ){ GPIO_InitTypeDef GPIO_InitStruct; /*Configure GPIO pin : USART1=> PA9, PA10 */ GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF7_USART1; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } |
2、这里,NB模组特性需要注意的就是发送完数据需要立即关闭UDP连接,使得模组立即进入PSM模式,使用AT命令:
1 2 3 4 5 | void send_over( void ) { // 发送逻辑 // AT+NSOSTF=0,117.78.47.187,5683,0x200,1,AA\r\n } |
!效果立竿见影!
三、单芯模式:OPENCPU
未完,待续!
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)