日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NB模块初始化流程

發(fā)布時(shí)間:2025/4/5 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NB模块初始化流程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 1 NB模塊初始化流程分析
    • 1.1 NB模塊初始化流程分析
    • 1.2 常見AT指令
  • 2 NB模塊初始化流程代碼實(shí)現(xiàn)

1 NB模塊初始化流程分析

1.1 NB模塊初始化流程分析

流程如下:

1.2 常見AT指令

測(cè)試日志如下:

//上電后自動(dòng)輸出 [11-08 17:35:22:824]*MATREADY: 1 [11-08 17:35:22:824]+CFUN: 1 [11-08 17:35:23:554]+CPIN: READY //at [11-08 17:35:39:015]AT [11-08 17:35:39:015]OK [11-08 17:35:41:676]ATE1 [11-08 17:35:41:676]OK //讀取imei號(hào) [11-08 17:35:44:993]AT+GSN [11-08 17:35:45:015]868334033341946 [11-08 17:35:45:015]OK //讀取imsi號(hào) [11-08 17:35:48:105]AT+CIMI [11-08 17:35:48:117]460041677239460 [11-08 17:35:48:117]OK //檢查sim卡 [11-08 17:35:49:393]AT+CPIN? [11-08 17:35:49:406]+CPIN: READY [11-08 17:35:49:406]OK //設(shè)置apn [11-08 17:35:51:101]AT+CFUN=0 [11-08 17:35:51:771]+CPIN: NOT READY [11-08 17:35:51:870]OK [11-08 17:35:52:730]AT*MCGDEFCONT="IP","" [11-08 17:35:52:730]OK [11-08 17:35:54:440]AT+CFUN=1 [11-08 17:35:54:762]OK [11-08 17:35:55:157]+CPIN: READY //檢查網(wǎng)絡(luò)注冊(cè) [11-08 17:35:55:915]AT+CSQ [11-08 17:35:55:915]+CSQ: 0,0 [11-08 17:35:55:915]OK [11-08 17:35:56:892]AT+CSQ [11-08 17:35:56:892]+CSQ: 0,0 [11-08 17:35:56:892]OK [11-08 17:35:57:491]AT+CSQ [11-08 17:35:57:491]+CSQ: 17,0 [11-08 17:35:57:491]OK [11-08 17:35:59:819]AT+CEREG? [11-08 17:35:59:832]+CEREG: 0,2 [11-08 17:35:59:832]OK [11-08 17:36:00:852]AT+CEREG? [11-08 17:36:00:852]+CEREG: 0,1 [11-08 17:36:00:852]OK [11-08 17:36:03:266]AT+CGACT? [11-08 17:36:03:277]+CGACT: 1,1 [11-08 17:36:03:277]OK [11-08 17:36:06:251]AT+CGCONTRDP [11-08 17:36:06:265]+CGCONTRDP: 1,5,"CMNBIOT","100.69.240.217.255.255.255.0" [11-08 17:36:06:265]OK

2 NB模塊初始化流程代碼實(shí)現(xiàn)

dev_sim7020.c:

#include <string.h> #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 AT_CMD_GET_IMEI "AT+GSN" //get imei #define AT_CMD_GET_IMSI "AT+CIMI" //get imsi #define AT_CMD_SET_APN "AT*MCGDEFCONT=\"IP\",\"\"" //cmnbiot "AT*MCGDEFCONT=\"IP\",\"cmnbiot\"" #define AT_CMD_CFUN0 "AT+CFUN=0" #define AT_CMD_CFUN1 "AT+CFUN=1" #define AT_CMD_CPIN "AT+CPIN?" #define AT_CMD_CSQ "AT+CSQ" #define AT_CMD_CEREG "AT+CEREG?" #define AT_CMD_CGACT "AT+CGACT?" #define AT_CMD_CGCONTRDP "AT+CGCONTRDP" #define AT_CMD_PSM_REPORT "AT+CPSMSTATUS=1" #define AT_CMD_PSM_ON "AT+CPSMS=1,,,\"01001010\",\"00000000\"" #define AT_CMD_PSM_OFF "AT+CPSMS=0" #define AT_REPORT_PSM "+CPSMSTATUS:"#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)#define SIM_RECV_BUF_SIZE 150struct sim7020_control_t {char recv_buf[SIM_RECV_BUF_SIZE];uint16_t recv_len; }sim_ctl;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(); }static bool sim7020_send_atcmd(char *cmd,char *prefix,uint32_t timeout) {memset(sim_ctl.recv_buf,0,SIM_RECV_BUF_SIZE);sim_ctl.recv_len=SIM_RECV_BUF_SIZE;return at_send_wait_reply (cmd,true,prefix,"ERROR",sim_ctl.recv_buf,&sim_ctl.recv_len,timeout); }static bool sim7020_get_imei() {uint16_t err=0;while(err<3){err++;vTaskDelay(100);if(sim7020_send_atcmd(AT_CMD_GET_IMEI,"86",1000)!=true)continue;return true;}return false; }static bool sim7020_check_sim() {uint16_t err=0;while(err<3){err++;vTaskDelay(500);if(sim7020_send_atcmd(AT_CMD_CPIN,"+CPIN: READY",1000)!=true)continue;return true;}return false; }static bool sim7020_set_apn() {uint16_t err=0;while(err<3){err++;vTaskDelay(100);if(sim7020_send_atcmd(AT_CMD_CFUN0,"OK",1000)!=true)continue;vTaskDelay(100);if(sim7020_send_atcmd(AT_CMD_SET_APN,"OK",1000)!=true)continue;vTaskDelay(100);if(sim7020_send_atcmd(AT_CMD_CFUN1,"+CPIN: READY",1000)!=true)continue;return true;}return false; }static bool sim7020_check_net() {uint16_t err=0;while(err<300){err++;vTaskDelay(100);if(sim7020_send_atcmd(AT_CMD_CSQ,"+CSQ:",1000)!=true)continue;vTaskDelay(100);if(sim7020_send_atcmd(AT_CMD_CEREG,"+CEREG: 0,1",1000)!=true)continue;vTaskDelay(100);if(sim7020_send_atcmd(AT_CMD_CGACT,"+CGACT: 1,1",1000)!=true)continue;vTaskDelay(100);if(sim7020_send_atcmd(AT_CMD_CGCONTRDP,"+CGCONTRDP:",1000)!=true)continue;return true;}return false;}bool sim7020_deinit() {DEBUG("sim7020 deinit");sim7020_pwr_off();at_parse_deinit();memset(&sim_ctl,0,sizeof(sim_ctl));return true; }bool sim7020_init() {uint16_t err=0;DEBUG("sim7020 init");while(err<3){err++;if(at_parse_init()!=true)continue;memset(&sim_ctl,0,sizeof(sim_ctl));if(sim7020_reboot()!=true)continue;if(sim7020_get_imei()!=true)continue;if(sim7020_check_sim()!=true)continue;if(sim7020_set_apn()!=true)continue;if(sim7020_check_net()!=true)continue;vTaskDelay(100);DEBUG("sim7020 init ok");return true;}sim7020_deinit();return false;}

總結(jié)

以上是生活随笔為你收集整理的NB模块初始化流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。