历史上的今天
返回首页

历史上的今天

今天是:2025年02月01日(星期六)

2020年02月01日 | 基于STM32的NB-IoT模块驱动

2020-02-01 来源:eefocus

一、概述

目前这个NB-IoT在国内还是比较火的,最近刚好使用了一款NB-IoT模块。将驱动程序贡献给大家。希望能对用到的朋友有点帮助。


二、NB-IoT模块介绍

本次采用的是有人物联网公司的WHNB75模块。(支持电信网络)WH-NB75 是基于 WH-NB73 模块开发出来的 DIP 封装的模块产品,该产品能够更方便的嵌入到客户产品中。WH-NB75 是我们 NB75 模块系列的一个总称,针对不同运营商网络有不同的模块型号对应。请在选购模块时注意选择支持当地运营商的模块。稳恒正在基于海思 Hi2115 芯片打造支持全频段的 NB 模组 WH-NB71,到时候可以一款模块支持多家运营商的网络。下表为不同型号产品对应的运营商。


详细NB-IoT介绍可以看一下我写的这边介绍:初识NB-IoT(NB-IoT背景,简介,标准化过程,技术优势,与其他无线技术对比)


三、基于STM32的驱动程序

相对来说通过AT命令控制还是比较简单的。


#include"nbiot.h"

/***************************************************************************************

函数名:send_NB_IoT

功  能:发送数据到NB模块

参  数:cmd 要发送的数据或者命令

返回值:

例  子:

说  明: 

作  者:贺远

日  期:2019.05.04

****************************************************************************************/

void send_NB_IoT(u8 *cmd)

{

while(*cmd!='')

{

  USART_SendData(USART2,*cmd++);

  while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==Bit_RESET); //发送数据结束

}

}


/***************************************************************************************

函数名:NB_IoT_ack_chack

功  能://检查NB模块应答是否符合预期   

参  数:

返回值:

例  子:

说  明:  memset(a, 0, sizeof a);  //清空数组  

作  者:贺远

日  期:2019.05.04

****************************************************************************************/

u8 NB_IoT_ack_chack(u8 *str)

{

  delay_ms(10);

if(USART2_RX_STA!=0)

{

USART2_RX_STA=0;

   

if(strstr((const char*)USART2_RX_BUF,(const char*)str))//符合预期

       { 

     memset(USART2_RX_BUF,0, sizeof USART2_RX_BUF);    

  return 0;

}

else //不符合预期  

       { 

     memset(USART2_RX_BUF,0, sizeof USART2_RX_BUF);    

     return 1;

}                             

else 

  memset(USART2_RX_BUF,0, sizeof USART2_RX_BUF);  //清空数组   

    return  1;

}

}

u8 NB_IotConect()

{

u8 x=1;

cmd1:send_NB_IoT("ATrn");//  指令测试

    if(!NB_IoT_ack_chack("OK"))  x=0;

    else   goto cmd1;

return x;

}

/***************************************************************************************

函数名:NB_IoT_ZDFW

功  能:自动附着网络

参  数:

返回值:

例  子:

说  明:

作  者:贺远

日  期:2019.05.04

****************************************************************************************/

u8 NB_IoT_ZDFW()

{

    u8  x=0;

cmd1: send_NB_IoT("AT+NCONFIG=AUTOCONNECT,TRUErn") ;  

if(!NB_IoT_ack_chack("OK"))  x++ ;

    else   goto cmd1;

cmd2: send_NB_IoT("AT+CFUN=1rn") ;     

if(!NB_IoT_ack_chack("OK"))  x++ ;

    else   goto cmd2;

cmd3: send_NB_IoT("AT+NRBrn") ; 

    if(!NB_IoT_ack_chack("REBOOTING"))  x++ ;

    else   goto cmd3;

//确认自动附网

cmd4: send_NB_IoT("AT+NBAND?rn");  

if(!NB_IoT_ack_chack("+NBAND:5"))  x++ ;

else   goto cmd4;

cmd5: send_NB_IoT("AT+CFUN?rn"); 

if(!NB_IoT_ack_chack("+CFUN:1"))   x++ ;

else   goto cmd5;

cmd6: send_NB_IoT("AT+CIMIrn");

if(!NB_IoT_ack_chack("460113007651563")) x++ ;

else   goto cmd6;

cmd7:send_NB_IoT("AT+CSQrn");  //确认信号质量第一个参数应该 1-30 之间

delay_ms(10);

if(USART2_RX_BUF[7]>'0'&&USART2_RX_BUF[7]<'3')

{

memset(USART2_RX_BUF,0, sizeof USART2_RX_BUF); 

USART2_RX_STA=0;

  x++ ;

  }

else 

{

memset(USART2_RX_BUF,0, sizeof USART2_RX_BUF); 

USART2_RX_STA=0;

goto cmd7;

  }

cmd8: send_NB_IoT("AT+CGATT?rn");

if(!NB_IoT_ack_chack("+CGATT:1")) x++ ;

else   goto cmd8;

cmd9:send_NB_IoT("AT+CEREG?rn");

if(!NB_IoT_ack_chack("+CEREG:0,1")) x++ ;

else   goto cmd9;

cmd10:send_NB_IoT("AT+CSCON?rn");

  if(!NB_IoT_ack_chack("+CSCON:0")) x++ ;

  else   goto cmd10;   

cmd11:send_NB_IoT("AT+CGPADDRrn"); 

      if(!NB_IoT_ack_chack("+CGPADDR:0,10.")) x++ ;

  else   goto cmd11; 

    if(x==11)  return 0;//自动附着网络成功

    else       return 1;//自动附网失败

}

/***************************************************************************************

函数名:NB_IoT_conect_COAP

功  能:COAP连接

参  数:

返回值:

例  子:

说  明:

作  者:贺远

日  期:2019.05.04

****************************************************************************************/

u8 NB_IoT_conect_COAP()

{

    u8  x=0;

cmd1: send_NB_IoT("AT+CGSN=1rn") ;  

if(!NB_IoT_ack_chack("+CGSN:356566078248721"))  x++ ;

    else   goto cmd1;

cmd2: send_NB_IoT("AT+NCDP=180.101.147.115,5683rn") ;     

if(!NB_IoT_ack_chack("OK"))  x++ ;

    else   goto cmd2;

cmd3: send_NB_IoT("AT+NRBrn") ; 

    if(!NB_IoT_ack_chack("REBOOTING"))  x++ ;

    else   goto cmd3;

cmd4: send_NB_IoT("AT+NCDP?rn");  

if(!NB_IoT_ack_chack("+NCDP:180.101.147.115,5683"))  x++ ;

else   goto cmd4;

cmd5: send_NB_IoT("AT+NSMI=1rn"); 

if(!NB_IoT_ack_chack("OK"))   x++ ;

else   goto cmd5;

cmd6: send_NB_IoT("AT+NNMI=2rn");

if(!NB_IoT_ack_chack("OK")) x++ ;

else   goto cmd6;

cmd7: send_NB_IoT("AT+NMGS=3,000102rn");  

      if(!NB_IoT_ack_chack("OK")) x++ ;

else   goto cmd7;

    if(x==7)  return 0;//COAP连接成功

    else      return 1; //COAP连接失败

}

/***************************************************************************************

函数名:NBIoTInit

功  能:NBIoT初始化

参  数:

返回值:

例  子:

说  明:

作  者:贺远

日  期:2019.05.04

****************************************************************************************/

void NBIoTInit()

{

      NB_IotConect();

      NB_IoT_ZDFW();

      NB_IoT_conect_COAP();

//       send_NB_IoT("AT+NMGS=10,53544d33325f4e423735rn"); //发送设备名字:STM32_NB75

//     POINT_COLOR=BLUE; //设置字体为蓝色 

// LCD_ShowString(50,80 ,250,16,16,"NBIoT conecting...");

// if (!NB_IotConect())           LCD_ShowString(50,80 ,250,16,16,"NB_IotConect success!");

// else                          LCD_ShowString(50,80 ,250,16,16,"NB_IotConect error!!");

// LCD_ShowString(50,100 ,250,16,16,"NBIoT Net conecting...");

// if(!NB_IoT_ZDFW())          LCD_ShowString(50,100,250,16,16,"NBIoT ZDFW success!                  "); //自动附着网络

// else                          LCD_ShowString(50,100,250,16,16,"NBIoT ZDFW error!                     "); 

// LCD_ShowString(50,120 ,250,16,16,"NBIoT COAP conecting...");

// if(!NB_IoT_conect_COAP()) LCD_ShowString(50,120,250,16,16,"NBIoT COAP success!        ");//COAP连接

// else                          LCD_ShowString(50,120,250,16,16,"NBIoT COAP error!         ");

//      send_NB_IoT("AT+NMGS=2,0005rn");  

}

推荐阅读

史海拾趣

爱普特微(aptchip)公司的发展小趣事

爱普特微电子(APTCHIP)的创立,可追溯到XXXX年。由一群半导体行业集成电路设计领域的资深人士联合发起,他们看到了中国微处理器市场的巨大潜力和发展空间。这些专家怀揣着技术创新和自主可控的梦想,在深圳这片创新热土上,共同创立了爱普特微电子。从创立之初,公司就明确了自己的目标——成为中国最好的MCU(微控制器)公司。

Fairchild (ON Semiconductor)公司的发展小趣事

2016年,Fairchild Semiconductor被ON Semiconductor收购。这一收购标志着Fairchild Semiconductor的发展进入了一个新的阶段。ON Semiconductor是一家全球领先的半导体公司,拥有广泛的产品线和强大的技术实力。通过整合Fairchild Semiconductor的技术和资源,ON Semiconductor进一步巩固了其在半导体行业中的领导地位,并继续为全球客户提供优质的半导体产品和服务。

DMS Electronic Components, Inc公司的发展小趣事

DMS深知品质对于企业的重要性,因此从一开始就建立了严格的质量管理体系。公司采用先进的生产设备和工艺,对每一个环节都进行严格把关,确保产品质量符合国际标准。DMS还积极参与国际认证,通过ISO9001、CE、UL等认证,进一步提升了品牌的国际竞争力。

BURGESS公司的发展小趣事

2001年对BURGESS来说是具有重要意义的一年。在这一年,BURGESS荣获了女皇赏,这是对其卓越业绩和贡献的极高认可。同时,BURGESS还售出了由Lurssen船厂制造的当时世界上最大的私人超级游艇,这一成就再次证明了其在游艇经纪行业的卓越地位。

磁联达(CND-tek)公司的发展小趣事

磁联达(CND-tek)公司成立于2002年,正值中国电子行业的蓬勃发展期。创始人王雪霞凭借对市场敏锐的洞察力和对技术的深厚理解,决定专注于网络通讯类变压器和滤波器的研发与生产。初创时期,公司面临着资金短缺、技术积累不足和市场竞争激烈等多重挑战。然而,王雪霞带领团队坚持不懈地研发新产品,不断优化生产工艺,逐渐在市场上赢得了客户的认可。

永丰盈(CST)公司的发展小趣事

深圳市永丰盈电子有限公司(CST)成立于2003年,初始阶段,公司只有几名员工和几台设备,专注于电子接插件产品的生产与销售。在创始人坚定的信念和团队不懈的努力下,CST逐步在市场上崭露头角。公司秉持“诚信、踏实、齐心、努力”的经营理念,通过严格的质量控制和持续的技术创新,赢得了客户的信任。

问答坊 | AI 解惑

【电子书】万用表测试电工电子元器件300例【PDG格式】

【电子书】万用表测试电工电子元器件300例【PDG格式】 【电子书】万用表测试电工电子元器件300例【PDG格式】_ 【电子书】万用表测试电工电子元器件300例【PDG格式】_ 【电子书】万用表测试电工电子元器件300例【PDG格式】_ [ 本帖最后由 emily ...…

查看全部问答>

5款ALTERA FPGA开发板原理图合集

5款ALTERA FPGA开发板原理图合集…

查看全部问答>

CCD摄像机质量对网络摄像机的影响

  1. 问题的提出         网络摄象机技术的发展,特别是宽带网络的普及,使得基于网络的网络监控应用正在普及。灵活的监视和控制配置、与信息网络紧密融合、长距离远程监控等优势都是传统监控所不可比拟的。如何 ...…

查看全部问答>

新领导新风格

我们团队的老总,新来的新风格,开会坚决不让人在下面与别人讨论,一定与他讨论他发起的话题,奶奶的,这有点不习惯。以前我们老大,喜欢百家争鸣,大家开大会,我们开小会。…

查看全部问答>

关于DXP 2004中元件封装问题……

各位大侠,在dxp 2004中有没有三排 15针串口(VGA)这个元件?如果有,那是在哪个库呢?而且还要有封装!我找了很久都没找到!如果有谁有这个元件库,可以给我吗?不胜感激!…

查看全部问答>

新手来问问题,请老鸟们指导

我手头有一块2410的板子,可是和电脑不能连接。能不能帮我分析分析 系统里除了驱动只装了360安全卫士,其他软件安装顺序是:1、CE5.0 2、EVC 3、USB驱动(用USB线连接) 4、activesync 连接之后打开板子的电源,托盘里activesync的小标一直没有反 ...…

查看全部问答>

loadcepc在哪?

請問啟動loadcepc的source code在哪 我創建了一個cepc,編譯好後沒有發現Loadcepc.exe …

查看全部问答>

文本框不能输入中文

为什么运行时文本框中不能输入中文???只能输入英文?…

查看全部问答>

那位兄弟有三星的NAND FLASH的驱动,我不要通用的啊,现代的我有,就是要改成三星的,

那位兄弟有三星的NAND FLASH的驱动,我不要通用的啊,现代的我有,就是要改成三星的, 有就发到我邮箱里啊?ricky5200@163.com 谢谢啊,…

查看全部问答>

STM32Primer2隆重登场

看来像手机... 在香港的Farnell网站可以下订单. 价钱港币718.9, 免运费. 比Primer1, 改良了不少. STM32F103E (512 Kbytes Flash) Li-Ion battery with smart loading& ...…

查看全部问答>