我是靠谱客的博主 小巧毛巾,最近开发中收集的这篇文章主要介绍linux下读取串口数据,处理,保存一、下载串口工具命令行查看使用的串口三、编程读取串口数据并打印,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 一、下载串口工具
  • 命令行查看使用的串口
  • 三、编程读取串口数据并打印

一、下载串口工具

$ sudo apt-get install cutecom
$ sudo
cutecom

在这里插入图片描述
可以很方便的看到用的哪个串口,以及看到传输的数据

命令行查看使用的串口

如果遇到插入USB设备,虚拟机没有识别到,有可能是虚拟机串口服务程序没有启动
按照下面的操作打开:
1.右键单击我的电脑,选择管理,打开计算机管理
在这里插入图片描述2.进入服务和应用程序
在这里插入图片描述3.启动虚拟机USB服务
4.插入USB,虚拟就就能检测到了
在这里插入图片描述5.命令行查看当前使用的那个串口
在这里插入图片描述可以看到 使用的 /dev/ttyUSB0

接下来就可以编程了

三、编程读取串口数据并打印

#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <time.h>
#include <termios.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
#define RCV_NUM (14)
#define uint8_t unsigned char
#define uint16_t unsigned int
//---定义一个和发送端一样的数据结构,用于存放接受的数据
typedef struct __rcv_data{
uint8_t data0;//--包头
uint8_t data1;//--字节数
uint16_t data2;//-
uint16_t data3;//--
uint16_t data4;//--
uint8_t data5;//--
uint16_t data6;//--
uint8_t data7;//--
uint8_t data8;//--校验和
uint16_t data9;//--//--报尾
}ST_RCV;
ST_RCV st_rcv_data = {0};
unsigned char buff[20];
unsigned char data[2];
int main()
{
int fd;
FILE *fp = NULL;
struct termios st;
int ch =0;
/*打开指定的串口*/
if((fd=open("/dev/ttyUSB0", O_RDWR))<0){
printf("open failedn");
exit(1);
}
/*配置串口*/
st.c_iflag = 0;
st.c_oflag = 0;
st.c_cflag = 0;CS8|CREAD|CLOCAL;
cfsetospeed(&st, B9600);
cfsetispeed(&st, B9600);
tcsetattr(fd, TCSANOW, &st);
uint8_t nread =0;
/*打开一个CSV文件,用于保存接收到的数据*/
fp = fopen("./1.csv", "a");
if(NULL == fp)
{
printf("文件打开失败n");
return -1; //返回错误代码
}
/*进入主循环*/
for(;;){
ch =0;
/*寻找包头*/
if(read(fd,&ch,1)>0){//--找包头
if(ch == 0xAA)
{
memset(buff,0,20);
/*读取包长数据,因为此处已经知道固定包长,就直接用常量*/
for(int i=0;i<13;i++)
{
do{
nread = read(fd,&ch,1);//--读一个字节
}while(nread<=0);//--却到读到数据
buff[i] = ch;//--将读到的数据存入buff
}
st_rcv_data.data8 =0;
/*计算校验和*/
for(int i=1;i<=10;i++)
st_rcv_data.data8 += buff[i];
/*解析数据,存入对应的结构体数据,此处注意大小端的问题*/
if(st_rcv_data.data8 ==buff[11])
{
st_rcv_data.data0 =0xaa;
memcpy(&st_rcv_data.data1,buff,1);
data[0] = buff[2];data[1] = buff[1];
memcpy(&st_rcv_data.data2,data,2);
data[0] = buff[4];data[1] = buff[3];
memcpy(&st_rcv_data.data3,data,2);
data[0] = buff[6];data[1] = buff[5];
memcpy(&st_rcv_data.data4,data,2);
memcpy(&st_rcv_data.data5,buff+7,1);
data[0] = buff[9];data[1] = buff[8];
memcpy(&st_rcv_data.data6,data,2);
memcpy(&st_rcv_data.data7,buff+10,1);
st_rcv_data.data9 =0xbb;
/*终端显示数据*/
printf("%d,%d,%d,%d,%d,%dn",st_rcv_data.data2,st_rcv_data.data3,st_rcv_data.data4,st_rcv_data.data5,st_rcv_data.data6,st_rcv_data.data7);
//--将数据写入csv文件
fprintf(fp, "%d,%d,%d,%d,%d,%dn",st_rcv_data.data2,st_rcv_data.data3,st_rcv_data.data4,st_rcv_data.data5,st_rcv_data.data6,st_rcv_data.data7);
//写入a,b,c到文件中
}
} //--ebd 0xaa

}//--endread
}//--end for(;;)
close(fd);
fclose(fp);
fp = NULL; //需要指向空,否则会指向原打开文件地址

}//--end main

展示效果
在这里插入图片描述

最后

以上就是小巧毛巾为你收集整理的linux下读取串口数据,处理,保存一、下载串口工具命令行查看使用的串口三、编程读取串口数据并打印的全部内容,希望文章能够帮你解决linux下读取串口数据,处理,保存一、下载串口工具命令行查看使用的串口三、编程读取串口数据并打印所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部