嵌入式开发中我们要时刻保持代码的高效与整洁
一、前言
嵌入式开发中我们要时刻保持代码的高效与整洁。NBIOT的出现带动了物联网行业的火爆,物联网行业似乎总是离不开NBIOT。但是,我将NBIOT归为AT指令模组一类,这一类模组没有什么高深之处,也没有深度可言。但是想要很好的使用AT指令模组却是一件不简单的事情。想要很灵活的使用AT指令的模组需要用到状态机。
AT指令类模组包括:nb-iot模组,gprs模组,wifi模组,LoRa串口透传模组等等,设计很多,应用广泛。
二、AT指令类模组总结
AT指令类模组的使用步骤可以分为:模组初始化和模组收发数据。我们翻开模组的手册可以发现,模组的初始化就是一个状态到两一个状态之间的切换,每一时刻该对象必须处于且只能处于其中一种状态中。
三、状态机原理
状态机的定义网上有很多,我主要说一下状态机的工作原理。
状态机组成:状态(state),事件(event)和动作(action);
四、AT指令模组状态机工作原理
前面说了状态机组成:状态(state),事件(event)和动作(action);
AT指令模组状态机原理:
状态:1.发送AT确认模组是否正常;2.配置模组参数;3.发送数据;(暂定三个状态)
动作:1.发送AT确认模组是否正常->通过串口发送AT\r\n,模组正常会返回OK,模组不正常返回非OK数据或者不返回。
2.配置模组参数->通过串口发送AT+PARAM=10\r\n,模组正常会返回OK,模组不正常返回非OK数据或者不返回。
3.发送数据->通过串口发送AT+SEND=2030559498473738292929394\r\n,模组正常会返回OK,模组不正常返回非OK数据或者不返回。
事件:状态机进行状态切换需要事件驱动。
事件1:状态强制切换事件(event_change_state),用于将状态机强制切换到某个指定状态或者下一状态。
事件2:串口接收到完整数据包事件(event_uart_data),模组返回数据。
事件3:超时事件(event_timeout),例如发送AT后模组在1s或者指定时间内没有返回任何数据。
五、STM32实现AT指令模组状态机条件
STM32或者其他MCU实现该状态机需要用到
1.串口可以接受不定长度的数据
2.软件定时器。
下面章节会详细介绍串口接收不定长度数据和AT指令类状态机实现。
NB-IOT开发|nbiot开发教程《二》AT指令类模组驱动-STM32串口实现接收不定长度数据
NB-IOT开发|nbiot开发教程《三》AT指令类模组驱动-STM32实现AT指令状态机
sunny.Bit 发布了19 篇原创文章 · 获赞 15 · 访问量 1万+ 私信 关注