建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
2020年华为云IoT云享专家 华为云IoT高校超能班

ttking

发帖: 72粉丝: 8

级别 : 外部版主

发消息 + 关注

发表于2020-5-23 10:50:07 57 2
直达本楼层的链接
楼主
显示全部楼层
[干货分享] Stm32+NBIoT——使用状态机进行数据收发【3.发送状态】

>通过串口连接stm32、NBIoT模组,通过发送AT指令,接入物联网平台。 **在发送状态,需要处理的是:** - 取出重发次数 - 发送指令 - 普通指令发送 - 特殊指令处理 - 设置为等待处理状态(wait) 发送状态总体任务如下: ```c case NB_SEND: //发送状态 if(ATCurrentCmdNum != ATNextCmdNum) //非重发状态 { CurrentRty = ATCmds[ATCurrentCmdNum].RtyNum; //重发次数赋值 } ATSend(ATCurrentCmdNum); //发送数据 NB_TaskStatus = NB_WAIT; break; ``` ### 1.首先,需要创建一共枚举类型,来对应相应的指令(一定要和指令一一对应),如下: ```c //AT指令结构体 tsATCmds ATCmds[]= { {"AT\r\n","OK",1,NO_REC,3}, {"AT+CIMI\r\n","460",1,NO_REC,3}//, //移动NB卡 /*......*/ } //则枚举定义为 typedef enum { AT =0, AT_CIMI /*......*/ }teATCmdNum; //同时,定义两个变量存放当前指令和下一条指令 teATCmdNum ATNextCmdNum; //下条指令 teATCmdNum ATCurrentCmdNum; //当前指令 ``` **在Send状态,判断是否是指令重发(如果是重发,当前指令==下一条指令),如果不是重发,取出指令重发次数(方便后续wait态使用);** ### 进入指令发送函数 因为各模块AT指令有差异,只介绍普通指令的发送,特殊指令不过就是多了字符串的处理 ```c void ATSend(teATCmdNum ATCmdNum) { memset(Usart2type.Usart2RecBuffer,0,USART2_REC_SIE);//清空接收缓存区,即usart2 数据缓存 ATCmds[ATCmdNum].ATStatus = NO_REC; //AT命令状态设置为没有返回接收 ATRecCmdNum = ATCmdNum; #if 0 if(ATCmdNum == 特殊指令1) { /*字符串处理*/ Usart_SendString(USART2,(u8 *)字符串,strlen(字符串)); UsartPrintf(USART1,"@@ NB_SendDataBuff:%s\r\n",字符串); } else if(ATCmdNum == 特殊指令2) { /*字符串处理*/ Usart_SendString(USART2,(u8 *)字符串,strlen(字符串)); UsartPrintf(USART1,"@@ NB_SendDataBuff:%s\r\n",字符串); } #endif else { Usart_SendString(USART2,(u8 *)ATCmds[ATCmdNum].ATSendStr,strlen(ATCmds[ATCmdNum].ATSendStr)); UsartPrintf(USART1,"@@Send:%s\r\n",ATCmds[ATCmdNum].ATSendStr); } //超时函数 SetTime(&TimeNB,ATCmds[ATCmdNum].TimeOut); } ``` 注意,指令发送后,就**立即打开超时函数**,获取当前系统时间。 **完成发送后,下一步就是等待数据处理,故将任务状态改变为wait;**
举报
分享

分享文章到朋友圈

分享文章到微博

柠檬PH=2

发帖: 41粉丝: 29

级别 : 实习版主

发消息 + 关注

发表于2020-5-23 21:20:18
直达本楼层的链接
沙发
显示全部楼层

感谢分享

点赞 评论 引用 举报

樊心昊

发帖: 55粉丝: 15

级别 : 外部版主

发消息 + 关注

发表于7 天前
直达本楼层的链接
板凳
显示全部楼层

感谢分享!

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册