#include "nbiot.h"
#include "string.h"
#include "stdlib.h"
#include "led.h"
#include "beep.h" /*********************************************************************************
*********************启明欣欣 STM32F407应用开发板(高配版)*************************
**********************************************************************************
*资源源于网络 代码由阿正修改
*QQ群:476840321
* *
**********************************************************************************
*********************************************************************************/ u8 receive_str6[USART6_REC_NUM]; //接收缓存数组,最大USART_REC_LEN个字节
u8 uart_byte_count6=;
//定义结构体用来存储接收数据
typedef struct {
char USART_BUFF[];
int USART_Length;
int flag;
}Usart_Struct; Usart_Struct struct_usart6;
/****************************************************************************
* 名 称: void uart1_init(u32 bound)
* 功 能:USART6初始化
* 入口参数:bound:波特率
* 返回参数:无
* 说 明:
****************************************************************************/
void uart6_init(u32 bound)
{ //GPIO端口设置
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE); //使能GPIOA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6,ENABLE);//使能USART1时钟
//串口1对应引脚复用映射
GPIO_PinAFConfig(GPIOC,GPIO_PinSource6,GPIO_AF_USART6); //GPIOA9复用为USART1
GPIO_PinAFConfig(GPIOC,GPIO_PinSource7,GPIO_AF_USART6); //GPIOA10复用为USART1
//USART1端口配置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; //GPIOA9与GPIOA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOC,&GPIO_InitStructure); //初始化PA9,PA10
//USART1 初始化设置
USART_InitStructure.USART_BaudRate = bound;//波特率设置
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
USART_InitStructure.USART_StopBits = USART_StopBits_1; //一个停止位
USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式
USART_Init(USART6, &USART_InitStructure); //初始化串口1
USART_Cmd(USART6, ENABLE); //使能串口1 USART_ClearFlag(USART6, USART_FLAG_TC); USART_ITConfig(USART6, USART_IT_RXNE, ENABLE); //开启相关中断
//Usart1 NVIC 配置
NVIC_InitStructure.NVIC_IRQChannel = USART6_IRQn; //串口1中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=;//抢占优先级3
NVIC_InitStructure.NVIC_IRQChannelSubPriority =; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器、
} /*******************************************************************************
* 发送字节
*******************************************************************************/
void uart6_send_char(u8 temp)
{
USART_SendData(USART6,(u8)temp);
while(USART_GetFlagStatus(USART6,USART_FLAG_TXE)==RESET);
} /*******************************************************************************
* 发送字符串
*******************************************************************************/
void uart6_send_buff(u8 buf[],u32 len)
{
u32 i;
for(i=;i<len;i++)
uart6_send_char(buf[i]);
// 可设置换行符 NB串口AT指令不需要换行
// uart2_send_char('\r');
// uart2_send_char('\n'); }
void USART6_IRQHandler(void)
{
uint8_t ch;
#ifdef SYSTEM_SUPPORT_OS
OSIntEnter();
#endif
if(USART_GetITStatus(USART6,USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART6,USART_IT_RXNE);
ch = USART_ReceiveData(USART6);
struct_usart6.USART_BUFF[struct_usart6.USART_Length++] = ch;
struct_usart6.flag = ;
}
if( USART_GetITStatus( USART6, USART_IT_IDLE ) == SET )
{
USART_ClearITPendingBit(USART6,USART_IT_IDLE);
struct_usart6.flag = ;
ch = USART_ReceiveData(USART6);
}
#ifdef SYSTEM_SUPPORT_OS
OSIntExit();
#endif } /*******************************************************************************
* 发送字符串 并解析返回值是否正确
* cmd为传入值 reply 为校验返回值 wait 为延时
*******************************************************************************/
int NBiot_SendCmd(char* cmd, char* reply, int wait)
{
struct_usart6.USART_Length = ;
printf("[NBiot_SendCmd] %s\r\n", cmd); uart6_send_buff((u8*)cmd, strlen(cmd)); delay_ms(wait); if (strcmp(reply, "") == ) //返回值为空
{
return ;
} if (struct_usart6.USART_Length != ) //返回值不为空
{
struct_usart6.USART_BUFF[struct_usart6.USART_Length] = '\0'; if (strstr((char*)struct_usart6.USART_BUFF, reply))
{
printf("\r\n%s+++YES\r\n", struct_usart6.USART_BUFF); return ;
}
else if (strstr((char*)struct_usart6.USART_BUFF, "ERROR"))
{
printf("ERROR...\r\n"); delay_ms(); return ;
}
else
{
printf("\r\n%s+++NO\r\n", struct_usart6.USART_BUFF); return ;
}
}
}
int NBiot_Init()
{
int ret = ;
ret = NBiot_SendCmd("admin#AT+VER","OK", ); //询问版本号作为初始化
if (!ret)
{
printf("Cannot initialize NBIOT module");
return ;
}
return ret;
}

STM32&AT指令NBIOT模组的更多相关文章

  1. 利尔达NB-IOT模组Coap数据AT+NMGS发送时返回-513的原因

    1. 利尔达NB-IOT模组使用AT+NMGS发送数据,返回-513的问题,大致有3种可能性,在硬件上,模组的射频电路分为A型和B型模组,所以烧写固件的时候,也要分为A和B型固件,如果烧写反了,那么R ...

  2. NB-IOT模组指令AT+NMSTATUS和AT+CGPADDR对比

    1. AT+NMSTATUS,这个指令是用来查询模块在IOT平台的注册情况.注册指的是lwm2m协议里面的注册机制,详细可以参考lwm2m协议. 2. AT+MREGSWT,设置重启之后,自动启动注册 ...

  3. 海思NB-IOT模组在平台上注册

    1. 添加设备,网页测试平台 https://develop.ct10649.com:8093/#/applications/1_lq7clNExjnGvPvGMG8w7_oYn4a/products ...

  4. 最全的NB-IoT芯片厂商、模组厂商信息

    NB-IoT作为LPWAN(低功耗广域网)的新兴技术,因为具有低功耗.低成本.广覆盖.海量节点等优势,并且在授权频段可以与2G.3G无缝连接而被运营商所青睐且接受.特别是到了2017年,据统计全球有5 ...

  5. [原创]移远RM500U-CN模组驱动移植

    1. 简介 中国广电正式放号了,为了支持广电700MHz的5G基站,需要换用新的5G模组.移远通信的RM500U模组正好可以满足我们的使用要求; 我们选用该模组的原因:双卡单待 支持SIM卡热插拔 支 ...

  6. NFC模组,开发NFC功能 仅仅要几条指令的事情

    特点:实现NFC透明传输.内置NFC协议栈,支持UART串口直接读写,用于门禁能够同一时候兼容手机和卡片开门,还能实现动态密钥,读到的NFC数据自己主动串口输出,会串口就能开发NFC,不须要研究LLC ...

  7. 中国移动推出NB-IoT/eMTC/GSM多模通信模组Qualcomm调制解调器支持

    亚洲电子消费展(CES Asia)在上海举行.期间,中国移动正式推出NB-IoT/eMTC/GSM三模通信模组A9500.该通信模组采用Qualcomm MDM9206 LTE IoT调制解调器,具有 ...

  8. 摄像头模组 PDAF对焦(Phase Detection Auto Focus)

    本文主要是最近看的两个文档的总结,相对零散的笔记,包括<imx298 software reference PDAF>与<PDAF Truly>. 1.PDAF功能的实现需要使 ...

  9. 第五部分 linux系统管理员 开机流程 模组管理 与loader

    第五部分   linux系统管理员  开机流程  模组管理  与loader   开机流程分析 cmos保存电脑硬件的参数 bios 基本的输入输出系统  读取硬件的软件 MBR  master bo ...

随机推荐

  1. Linux时间子系统之(一):时间的基本概念【转】

    本文转载自:http://www.wowotech.net/timer_subsystem/time_concept.html 本文使用Q & A的方式来和大家以前探讨一下时间的基本概念 一. ...

  2. dedecms文章内页获取缩略图的调用标签

    点评:文章内容页缩略图的调用,图片集内容页缩略图的调用很容易混淆,内页想调用缩略图用[filed:picname/]来实现是错误的 文章内容页缩略图的调用,图片集内容页缩略图的调用,相信大家都想找这个 ...

  3. Java 字符串比较小知识

    使用 String.compareTo 方法: compareTo() 的返回值是int, 它是先比较对应字符的大小(ASCII码顺序). 1.如果字符串相等,返回值0. 2.如果第一个字符和参数的第 ...

  4. ss连接不上

    突然ss就连接不上了,而vps的ip能ping通,ssh也能登录. 折腾了半天都没解决. 后来解决了,关键点有两个 (1)更改ss的服务端口,原本是9000,随便改为其他的: (2)在switch里设 ...

  5. maven实战(6)-- pom.xml的编写

    pom.xml中可以编写的东西确实挺多的,经常看到别人写的pom文件中出现了一些没见过plugin或properties等等,不知有何作用,其实很简单,只要参看maven的官方文档即可:http:// ...

  6. bzoj 1894 游戏

    题目大意: $n$个装备,每个装备有两个值,可以攻击该值对应的怪兽.每个装备最多用一次 每个怪兽被打一次之后就会死,每个怪兽可以被打当且仅当前面的都死了,求最多打多少个 思路: 很明显的二分图匹配,如 ...

  7. NSArray是强引用容器

    经常比较疑惑NSArray.NSDictionary.NSSet这几个对象容器管理对象所采用的方式是“强引用”还是“弱引用”. 通过简单的命令行程序得到的结论是“NSArray.NSDictionar ...

  8. macbook pro 配置jdk,maven环境变量

    https://blog.csdn.net/vvv_110/article/details/72897142(1)下载jdk安装包,进行安装,maven安装包,进行解压 (2)改写环境变量的配置文件/ ...

  9. [POI 2007] 办公楼

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1098 [算法] 显然 , 答案为补图的连通分量个数 用链表优化BFS , 时间复杂度 ...

  10. 【前端】CentOS 7 系列教程之二: 安装 git 最新版

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/linux_2.html 这一篇我们来安装git高版本. 卸载yum安装的旧版本 yum remove git 安装 ...