深圳市中科世为科技有限公司论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 1638|回复: 0

应用教程一:串口初识

[复制链接]

8

主题

8

帖子

66

积分

超级版主

Rank: 8Rank: 8

积分
66
发表于 2018-11-6 16:42:24 | 显示全部楼层 |阅读模式
本帖最后由 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
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|深圳市中科世为科技有限公司 ( 粤ICP备17144184号 )

GMT+8, 2023-6-10 18:41 , Processed in 0.014809 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表