linux下c语言串口读写数据

news/2024/10/18 12:30:01/
#include     <stdio.h>      /*标准输入输出定义*/
#include     <stdlib.h>     /*标准函数库定义*/
#include     <unistd.h>     /*Unix 标准函数定义*/
#include     <stdint.h>
#include     <sys/types.h> 
#include     <sys/stat.h>  
#include     <fcntl.h>      /*文件控制定义*/
#include     <termios.h>    /*POSIX 终端控制定义*/
#include     <errno.h>      /*错误号定义*/
#include	 <string.h>     /*字符串功能函数*/
#include	 <sys/time.h>  
#include	 <sys/types.h>  
int     tty_fd = -1;
char    r_buf[128];
struct  termios options;
fd_set  rset;
_Bool   isOpne = 0;void close_serial() {printf("close_seria ===============\n\n");isOpne = 1;close(tty_fd);
}void open_serial_init() {int  rv = -1;tty_fd = open("/dev/ttyS7", O_RDWR | O_NOCTTY); //打开串口设备if (tty_fd < 0){printf("open tty failed:%s\n", strerror(errno));close_serial();return;}printf("open devices sucessful!\n");memset(&options, 0, sizeof(options));rv = tcgetattr(tty_fd, &options); //获取原有的串口属性的配置if (rv != 0){printf("tcgetattr() failed:%s\n", strerror(errno));close_serial();return;}options.c_cflag |= (CLOCAL | CREAD); // CREAD 开启串行数据接收,CLOCAL并打开本地连接模式options.c_cflag &= ~CSIZE;// 先使用CSIZE做位屏蔽  options.c_cflag |= CS8; //设置8位数据位options.c_cflag &= ~PARENB; //无校验位/* 设置波特率  */cfsetispeed(&options, B115200);cfsetospeed(&options, B115200);options.c_cflag &= ~CSTOPB;/* 设置一位停止位; */options.c_cc[VTIME] = 10;/* 非规范模式读取时的超时时间;*/options.c_cc[VMIN] = 0; /* 非规范模式读取时的最小字符数*/tcflush(tty_fd, TCIFLUSH);/* tcflush清空终端未完成的输入/输出请求及数据;TCIFLUSH表示清空正收到的数据,且不读取出来 */if ((tcsetattr(tty_fd, TCSANOW, &options)) != 0){printf("tcsetattr failed:%s\n", strerror(errno));close_serial();return;}
}
void write_serial(char* buff, int size) {int rv = -1;rv = write(tty_fd, buff, size);printf("write_serial rv=============== size=%d\n", rv);if (rv < 0){printf("Write() error:%s\n", strerror(errno));close_serial();return;}}
void read_serial() {int rv = -1;while (1) {if (isOpne == 0) {memset(r_buf, 0, sizeof(r_buf));rv = read(tty_fd, r_buf, sizeof(r_buf));if (rv < 0){printf("Read() error:%s\n", strerror(errno));close_serial();return;}else {//打印数据int i = 0;while (i < rv) {printf("tty=: %x\n", r_buf[i]);i++;}if (0x15 == r_buf[0]) {printf("ttyS7 is live!\n");break;}}usleep(5000);}else {printf("Read tty null=: %s\n", r_buf);}}
}//往串口发数据(byte)的例子
void test() {int num = 0;char buff[3];buff[num++] = 0x02;buff[num++] = 0x41;buff[num++] = 0x03;write_serial(buff, num);
}
int main(int argc, char* argv[])
{printf("hello world, Harmony is coming!\n");open_serial_init();test();read_serial();close_serial();return 0;
}

注意串口初始化里串口名字,这里是 /dev/ttyS7,实际调试可能是/dev/ttyUSB0 或 其他什么,注意修改

linux下查看启用串口的命令

dmesg | grep tty

 如果是windows下则是 com1 com2这样


http://www.ppmy.cn/news/629595.html

相关文章

GO 多线程工具使用和分析

GO 多线程工具使用和分析 Go 语言中的 sync 包提供了一些用于同步和互斥访问共享资源的原语&#xff0c;使用这些可以避免多个goroutine同时访问共享资源时出现的问题&#xff0c;他们有&#xff1a; 互斥锁读写锁condWaitGroupmaponcepoolatomic 本文介绍它们的使用方式 互…

红米note11pro参数配置

红米note11pro采用6.67英寸 120Hz AMOLED屏&#xff0c;2400x1080像素&#xff0c;2.96mm针孔屏&#xff0c;1.75mm超窄边 红米note11pro颜色神秘黑境&#xff0c;浅梦星河&#xff0c;时光静紫&#xff0c;迷雾森林 红米note11pro更多使用感受和评价&#xff1a;http://xiaomi…

红米Redmi Note 11 4G参数配置

红米Note 11 4G采用了一块6.5英寸的LCD中置打孔屏。屏幕分辨率达到了2400 x 1080的1080P分辨率&#xff0c;同时支持90Hz高刷新率。作为一款百元机&#xff0c;这是一块优秀的屏幕&#xff0c;可以提供同价位优秀的显示效果。同价位百元机基本多是720P分辨率&#xff0c;60Hz刷…

红米9a参数配置

外观上&#xff0c;Redmi 9A采用水滴屏设计&#xff0c;正面6.53寸LCD屏&#xff0c;通过莱茵低蓝光认证&#xff0c;分辨率1600*720&#xff0c;支持阳光屏模式。机器背面采用聚碳酸酯&#xff0c;增加CD质感设计。砂岩黑、清蓝、湖绿三种颜色可供选择。采用3D曲身设计&#x…

红米note10pro和红米note11pro参数对比

红米note10 Pro是LCD屏幕&#xff0c;红米note11 Pro是OLED屏幕&#xff0c;均支持120Hz刷新率以及侧边指纹识别等&#xff01; 抛开LCD真爱粉不谈&#xff0c;红米note11 Pro的屏幕素质更高一些&#xff01;不仅有更高360Hz的触控采样率&#xff0c;2.96mm的极小开孔以及1.75m…

红米k30至尊版配置参数

Redmi K30 至尊纪念版采用了弹出全面屏&#xff0c;屏幕尺寸为6.67英寸&#xff0c;分辨率为24001080&#xff0c;材质为AMOLED。 Redmi K30 至尊纪念版还支持360超光感技术&#xff0c;在手机正面和背部均配备光线传感器&#xff0c;有效解决自动亮度不准的问题&#xff0c;屏…

红米Note9Pro和红米Note9ProMax哪个好-区别是什么

红米Note9和红米Note9Pro这两款手机是红米最新发布的note系列新机&#xff0c;那么这两款手机在参数上有什么区别&#xff1f;哪款手机的性价比更高&#xff1f;小编为大家带来最新的手机测评&#xff0c;感兴趣的小伙伴&#xff0c;快来看看吧。 一、参数对比 二、性能分析…

红米10x和红米note8pro参数对比

红米10X采用6.57英寸三星AMOLED水滴全面屏&#xff0c;分辨率 24001080&#xff0c;屏幕占比98%&#xff0c;屏幕刷新率为60Hz&#xff0c;手机尺寸为164.16x75.75x8.99mm&#xff0c;手机重量为205g&#xff0c;有深海蓝、凝夜紫、胧月金、星露白四种配色。 华为nova8 se更多使…