NB模块开机、关机、重启的实现

本文详细解析了NB模块的开机、关机及重启流程,并提供了相应的代码实现。通过硬件连接图与时序图,展示了各步骤的具体操作过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 NB模块开机、关机、重启的流程分析

首先看一下硬件连接图:
在这里插入图片描述
下面我们需要看一下硬件原理图中需要注意的点:
在这里插入图片描述

1.1 开机

NB模块开机时序图如下:
在这里插入图片描述
开机的流程图如下:
在这里插入图片描述

1.2 关机

NB模块关机时序图如下:
在这里插入图片描述
NB模块关机流程图如下:
在这里插入图片描述

1.3 重启

NB模块重启实现可以通过开机和关机两种操作就可以组合成重启。

流程图如下:
在这里插入图片描述


2 NB模块开机、关机、重启的代码实现

dev_sim7020.c:

#include "main.h"
#include "at_parse.h"
#include "app_debug.h"

#include "FreeRTOS.h"
#include "task.h"

#define AT_CMD_AT      "AT"
#define AT_CMD_ATE0    "ATE0"

#define STATUS_IS_ON()  (!HAL_GPIO_ReadPin(M_STA_GPIO_Port,M_STA_Pin))
#define STATUS_IS_OFF() (HAL_GPIO_ReadPin(M_STA_GPIO_Port,M_STA_Pin))
#define PWRKEY_HIGH()   HAL_GPIO_WritePin(M_PWR_GPIO_Port,M_PWR_Pin,GPIO_PIN_RESET)
#define PWRKEY_LOW()    HAL_GPIO_WritePin(M_PWR_GPIO_Port,M_PWR_Pin,GPIO_PIN_SET)


static bool sim7020_at_ok()
{
    uint16_t err=0;
    while (err<3)
    {
        err++;
        if(at_send_wait_reply(AT_CMD_AT,true,"OK","ERROR",NULL,NULL,1000)==false)continue;
        if(at_send_wait_reply(AT_CMD_ATE0,true,"OK","ERROR",NULL,NULL,1000)==false)continue;
        return true;
    }
    return false;

}

bool sim7020_pwr_on()
{
    uint16_t err=0;

    DEBUG("sim7020 pwr on");
    if(STATUS_IS_ON())return true;

    while(err<3)
    {
        err++;
        PWRKEY_HIGH();
        vTaskDelay(200);
        PWRKEY_LOW();
        vTaskDelay(1000);
        PWRKEY_HIGH();

        vTaskDelay(500);
        if(!STATUS_IS_ON())continue;
        if(sim7020_at_ok()==false)continue;

        return true;
    }
    return false;
}

bool sim7020_pwr_off()
{
    uint16_t err=0;
    DEBUG("sim7020 pwr off");
    if(STATUS_IS_OFF())return true;

    while(err<3)
    {
        err++;
        PWRKEY_HIGH();
        vTaskDelay(200);
        PWRKEY_LOW();
        vTaskDelay(1500);
        PWRKEY_HIGH();  

        vTaskDelay(500);
        if(!STATUS_IS_OFF())continue;

        return true;
    }
    return false;
}

bool sim7020_reboot()
{
    if(STATUS_IS_ON())
    {
        if(sim7020_pwr_off()==false)return false;
    }
    return sim7020_pwr_on();
}


bool sim7020_init()
{
    DEBUG("sim7020 init");
    if(at_parse_init()!=true)return false;

    if(sim7020_reboot())
    {
        DEBUG("-------sim7020 reboot success------");
    }
	return true;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值