资讯专栏INFORMATION COLUMN

串口通信系统设计及实现

kviccn / 2575人阅读

摘要:背景在工业上,当设备之间不能通过网络联通时,通常设备上有串口可以用于传输数据,该系统是利用设备的串口来达到传输文件的目的协议交互设计传输协议帧设计实现只贴头文件,想看实现的可以留言没有返回值,省去判断,只要函数没有抛异常表示

背景
在工业上,当设备之间不能通过网络联通时,通常设备上有串口可以用于传输数据,该系统是利用设备的串口来达到传输文件的目的.

协议交互设计:

传输协议帧设计:

实现只贴头文件,想看实现的可以留言

#ifndef FILE_H_
#define FILE_H_

#include 

enum {
   OPEN_FILE_FOR_READ,
   OPEN_FILE_FOR_WRITE,
};

void file_open(const char *file_name, int mode);
void file_close();
int file_nread(void *buf, int size);
int file_nwrite(void *buf, int size);

size_t file_get_file_size(const char *file);
void file_get_file_MD5(const char *file, char *md5);
int check_file_md5(const char *file, const char *expected_md5);

#endif//FILE_H_



#ifndef FRAME_H_
#define FRAME_H_

typedef struct _frame frame_t;
enum {REQ = 1, DATA, ACK, FINISH, ERR};
enum {
   NO_ERR,
   CHECKSUM_ERR,
   SEQ_NUMBER_ERR,
   RETRY_TOO_MUCH_ERR,
   MD5_ERR,
   CTRL_C_SIG_ERR,
   UNKNOWN_PKT_TYPE,
   OUT_OF_MAX_RETRY_TIMES,
   TIME_OUT
};

int frame_init(const char *dev);
void frame_fini();
int frame_check();
void frame_set_header();
void frame_set_seq_number(int seq_number);
void frame_set_checksum();
void frame_set_len(int len);
void frame_set_op(int op);
void frame_set_status(int status);
int frame_req();//only sender --> receiver
int frame_data(unsigned char *data, int len);
int frame_ack_ok();//only receiver --> sender
int frame_ack_not_ok();//only receiver --> sender
int frame_finish(char *md5);//only sender --> receiver
int frame_err(int err);
int frame_get_op_from_raw_data();
int frame_get_err_from_raw_data();
int frame_get_status_from_raw_data();
int frame_seq_number_check();
int frame_get_seq_number_from_raw_data();
int frame_checksum_check();
void frame_calculate_receive_frame_checksum();
void frame_calculate_send_frame_checksum();
int frame_get_frame();
int frame_get_remainder_frame();
int frame_get_frame_len();
void frame_get_frame_header();
void frame_decode_frame();
int frame_get_data_len();
void* frame_get_data_pos();
int u_frame_get_op();
const char* u_frame_get_md5_from_finish_pkt(char *md5);

#endif//FRAME_H_



#ifndef GLOBAL_H_
#define GLOBAL_H_

#define MTU 512
#define MAX_DATA_LEN 501

#endif//GLOBAL_H_


#ifndef SERIAL_DEV_H_
#define SERIAL_DEV_H_

int serial_dev_init(const char *dev);//没有返回值,省去判断,只要函数没有抛异常表示一定成功
void serial_dev_fini();
int serial_dev_nread(void *buf, int size);//返回值表示实际读取的个数
int serial_dev_nwrite(void *buf, int size);
int get_fd();

#endif//SERIAL_DEV_H_

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/10602.html

相关文章

  • HC-05/06蓝牙模块的原理使用方法

    摘要:二模块原理蓝牙模块的通信示意图如下两个设备主控芯片或单片机分别连接各自的蓝牙模块,即将主控芯片与蓝牙模块的串口控制引脚交叉连接。如图注蓝牙模块自带转电路。注博主演示的蓝牙模块虽然不是,但是功能和一样。 ...

    young.li 评论0 收藏0
  • AS608指纹+STM32串口通信录入或删除指纹

    摘要:芯片内置运算单元,集成了指纹识别算法,能高效快速采集图像并识别指纹特征。模块配备了串口通讯接口,用户无需研究复杂的图像处理及指纹识别算法,只需通过简单的串口按照通讯协议便可控制模块。我们的指纹已经被成功录入。 目录 一、硬件使用分类 1.整体图展示  2.STM32F103RCT6单片机 ...

    kel 评论0 收藏0
  • 基于单片机的音乐播放器设计

    摘要:完整版可点击如下下载基于单片机的音乐播放器设计硬件开发文档类资源下载基于单片机的音乐播放器设计硬件开发文档类资源下载内容包括详细设计文档版,附带开题报告和相关等文档,供大家参考学习。   word完整版可点击如下下载>>>>>>>> 基于单片机的音乐播放器设计-硬件开发文档类资源-CSDN下...

    miqt 评论0 收藏0
  • 基于ShineBlink物联网开发板和机智云平台开发的“针对短期内宠物无人照顾的智能宠物屋”系统

    摘要:为了解决人们因工作出差旅游等短期时间内家中宠物无人照顾的问题,我们基于物联网开发板机智云平台和各类传感器模块研究设计了一套针对短期内宠物无人照顾的智能宠物屋系统。 正式介绍作品前先说明一下,我是湖南文理学院计算机与电气工程学院的一名大三学生,我叫陈海涛。作品全部内容均为个人创意、个人设计并手...

    jerryloveemily 评论0 收藏0
  • 48小时开发实践:如何开发一款可实时视频的智能小车

    摘要:本文的三位作者正阳海洋阿力,是来自不同公司的工程师,将与智能小车结合,开发了一款可实时视频远程看房的创新性项目。用户可以通过上位机或网页前端控制小车前后左右移动或控制云台调整摄像头方向。 本文的三位作者正阳、海洋、阿力,是来自不同公司的工程师,将 Agora SDK 与智能小车结合,开发了一款可实时视频远程看房的创新性项目。本文将从方案设计到具体实现,详实分享他们的开发经验。三人也凭借...

    sean 评论0 收藏0

发表评论

0条评论

kviccn

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<