4-学习GPRS_Air202(串口)
时间:2022-06-02
本文章向大家介绍4-学习GPRS_Air202(串口),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
实现的功能
有人会想,不就是个串口接收到什么就会什么的程序嘛!!!!!!!!!!!!!!有什么好说的!!
实现此功能的程序是很多,但是,但是,但是.....我写的程序更注重于开发和实用,不信往下看
先贴出来程序,,,
module(...,package.seeall)
local function print(...)
_G.print(...)
end
print("dofile usart.lua................................................");
local UART_ID = 1 --uart1
local uartReadData = "";
local uartReadDataCopy = "";
local uartReadDataCnt = 0;
local uartReadDataCntCopy = 0;
--定时器空闲中断检测10ms
local function TimerFunc4()
if uartReadDataCnt ~= 0 then
uartReadDataCnt = 0;
uartReadDataCntCopy = 0;
uartReadDataCopy = uartReadData;
uartReadData = "";
uart.write(UART_ID,uartReadDataCopy)
else
uartReadDataCntCopy = uartReadDataCnt;
end
end
sys.timer_loop_start(TimerFunc4,10)
--读取串口接收到的数据
local function read()
local data = ""
while true do
data = uart.read(UART_ID,"*l",0)
if not data or string.len(data) == 0 then break end
uartReadData = uartReadData..data;
uartReadDataCnt = uartReadDataCnt +1
end
end
pm.wake("wake")
--注册串口的数据接收函数,串口收到数据后,会以中断方式,调用read接口读取数据
sys.reguart(UART_ID,read)
--配置并且打开串口
uart.setup(UART_ID,115200,8,uart.PAR_NONE,uart.STOP_1)
凡是看懂我这篇文章的才能瞬间看懂我的这个程序
http://www.cnblogs.com/yangfengwu/p/8912072.html 是否看懂了,我没有骗人吧!!凡是串口接收的程序,无论单片机还是上位机这个接收
程序的模式是通吃的......
所以下各个部分的功能
如果一开始调用的
pm.wake("aaaa")
假如想让系统休眠----pm.sleep("aaaa")
不过程序上让我产生了疑惑
后面的0是干什么的.....................
然后就看源码
算啦说一下整体的思路
串口中断里面有一个负责接收数据的字符串变量,还有一个数据个数累加的变量
假设串口一次发100个数据,,然后间隔1S发一次
定时器是每间隔10Ms检测一次
如果数据没有接收完 uartReadDataCnt 会一直累加,因为每间隔10Ms去检测一次,uartReadDataCnt在这期间会向上累加...
所以数据没有接收完成的时候进入定时器的时候 uartReadDataCntCopy 总是 < uartReadDataCnt
假设接收完了,因为是1S发一次,而定时器是每隔10Ms检测一次,所以会检测到uartReadDataCntCopy == uartReadDataCnt
所以....处理数据就可以了,,,接收到一条完整的数据了....
- ASP.NET MVC的Razor引擎:RazorViewEngine
- 算法:求解AOE网的关键路径
- 编程小技巧:多态原理
- ASP.NET Core的配置(4):多样性的配置来源[下篇]
- 数据结构 图
- ASP.NET Core的配置(5):配置的同步[ 实例篇]
- TensorFlow 深度学习笔记 卷积神经网络
- 利用EntLib授权机制实现对ASP.NET页面的自动授权
- ASP.NET Core的配置(5):配置的同步[设计篇]
- 详解Redis内部运作机制
- TensorFlow深度学习笔记 循环神经网络实践
- 从客户端Web应用程序访问Bluemix服务
- 云改变传统银行业面貌的5种方式
- ASP.NET MVC中的ActionFilter是如何执行的?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【python-leetcode295-双堆】数据流的中位数
- join的使用
- C语言之不能在scanf中使用换行
- 聊聊java中的哪些Map:(五)HashTable与HashMap的区别
- paddlepaddle之飞机识别
- c语言之条件编译
- python之使用魔术方法__getitem__和__len__
- B+Tree index structures in InnoDB(7.InnoDB中B+树的索引结构)
- Java基础
- 广度优先遍历--选课的智慧
- paddlepaddle目标检测之水果检测(yolov3_mobilenet_v1)
- 【每日一题】41. First Missing Positive
- springmvc之第一个springmvc程序
- python小例子(一)
- springmvc之RequestMapping注解既可以修饰类也可以修饰方法