|
本帖最后由 xierz 于 2018-11-7 12:01 编辑
一、串口使用
默认已经基本熟悉工具操作
了解了文档串口通讯协议章节
串口部分主要操作的文件
1.ProtocolSender.cpp:用于数据发送
2.ProtocolParser.cpp: 用于串口数据的协议解析
3.ProtocolData.h:定义通讯的协议数据结构体,用于保存协议解析后的数据
(用户根据自己的需要自由修改协议数据结构体内部的成员变量)
4.Commdef.h:定义协议的同步帧头信息、帧尾信息等帧结构,及最小数据包大小
串口部分主要操作的函数
1.ProtocolSender.cpp
SendProtocol()函数
用户根据自己的协议修改串口数据封装,通过调用UARTCONTEXT->send(dataBuf, frameLen)发送帧数据
2.ProtocolData.h
用于定义保存数据的结构体,以及相关的协议命令字
3.Commdef.h
定义了通信协议的帧头信息、最小数据包大小及通信相关的宏定义
用户也可以在这里定义自己的通信协议帧头、帧尾、帧校验等相关信息
4.ProtocolParser.cpp
parseProtocol()函数
用户根据自己的协议修改串口数据解析函数,
procParse()函数
用户根据自己的协议在parseProtocol()函数中调用该函数获取解析后的数据,通过notifyProtocolDataUpdate()更新数据
数据更新后
我们可以在相应的xxxLogic.cc中的
onProtocolDataUpdate()函数处理串口回调数据
5.UartContext.cpp
一般情况下我们不需要修改这个文件!!!
如果用户的协议解析函数不返回实际解析协议的长度
那么我们可以在UartContext::threadLoop()函数中修改串口接收的逻辑
UartContext::threadLoop()函数
通过调用read()函数获取串口接收的数据,读取的数据保存在mDataBufPtr所指向的内存块中(mDataBufPointer)
解析完数据后将内存块的数据长度减去解析的数据长度。
二、去掉协议后了解串口的代码架构
发送数据
我们可以在逻辑文件xxxlogic.cc中通过sendProtocol()函数调用UARTCONTEXT->send(dataBuf, frameLen)函数发送数据
例如在按键控件的关联函数中调用sendProtocol()函数,从而在按下按键后发送数据。
接收数据
串口通过UartContext::threadLoop()函数接收,在ProtocolParser函数解析,然后调用procParse()函数更新数据
在页面逻辑文件xxxlogic.cc中的onProtocolDataUpdate()函数处理回调数据。
实例操作
一个简单的例子:
1.去掉协议
发送数据部分
ProtocolSender.cpp
ProtocolSender.h
接收数据部分
ProtocolParser.cpp
ProtocolData.h
2.生成文本和按键控件
文本控件文本对齐属性选择“水平偏左 垂直偏上”。
3.在回调函数通过文本显示数据
4.按下按键发送接受到的数据
串口助手显示结果
注:由于屏幕的中文编码是UTF-8编码无bom格式,所以直接用串口助手发送的字符会乱码。
可以在串口助手中发送utf-8编码的txt文件来测试屏幕显示中文。
串口助手显示结果:
串口屏显示结果:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|