linux 串口接收
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> //文件控制定义
#include <termios.h>//终端控制定义
#include <errno.h> char *comport;
int bRate = ; int serial_fd = ; //打开串口并初始化设置
int init_serial(void)
{
serial_fd = open(comport, O_RDWR | O_NOCTTY | O_NDELAY);
if (serial_fd < ) {
perror("open");
return -;
}
else
printf("open %s success! \n", comport); //串口主要设置结构体termios <termios.h>
struct termios options; /**1. tcgetattr函数用于获取与终端相关的参数。
*参数fd为终端的文件描述符,返回的结果保存在termios结构体中
*/
tcgetattr(serial_fd, &options);
/**2. 修改所获得的参数*/
options.c_cflag |= (CLOCAL | CREAD);//设置控制模式状态,本地连接,接收使能
options.c_cflag &= ~CSIZE;//字符长度,设置数据位之前一定要屏掉这个位
options.c_cflag &= ~CRTSCTS;//无硬件流控
options.c_cflag |= CS8;//8位数据长度
options.c_cflag &= ~CSTOPB;//1位停止位
options.c_iflag |= IGNPAR;//无奇偶检验位
options.c_oflag = ; //输出模式
options.c_lflag = ; //不激活终端模式 switch(bRate)
{
case :cfsetospeed(&options, B9600);break;//设置波特率
case :cfsetospeed(&options, B115200);break;//设置波特率
} /**3. 设置新属性,TCSANOW:所有改变立即生效*/
tcflush(serial_fd, TCIFLUSH);//溢出数据可以接收,但不读
tcsetattr(serial_fd, TCSANOW, &options); return ;
} void uart_recv(int fd)
{
char data[];
int len=, ret = ;
fd_set fs_read;
struct timeval tv_timeout; FD_ZERO(&fs_read);
FD_SET(fd, &fs_read);
tv_timeout.tv_sec = ;//(10*20/115200+2);
tv_timeout.tv_usec = ; while ()
{
ret = select(fd+, &fs_read, NULL, NULL, &tv_timeout);
//printf("ret = %d\n", ret);
if (FD_ISSET(fd, &fs_read)) {
len = read(fd, data, sizeof(data));
printf("len: %d(bytes) recv: %s\n", len, data);
} else {
perror("select");
}
}
} int main(int argc, char **argv)
{
comport = (char *)malloc();
memset(comport, '\0', sizeof(comport));
if (argc == )
{
comport = "/dev/ttyS6";
bRate = ;
}
else if (argc == )
{
switch(atoi(argv[]))
{
case :comport = "/dev/ttyS0";break;
case :comport = "/dev/ttyS1";break;
case :comport = "/dev/ttyS2";break;
case :comport = "/dev/ttyS3";break;
case :comport = "/dev/ttyS4";break;
case :comport = "/dev/ttyS5";break;
case :comport = "/dev/ttyS6";break;
default: printf("argv[0](com port id) should be 0 to 6 !\n");exit();
}
switch(atoi(argv[]))
{
case : bRate = ; break;
case : bRate = ; break;
default: printf("argv[1](bRate) should be 9600 or 115200 !\n");exit();
}
}
else{
printf("parameter count error!\n");
return ;
} init_serial();
printf("current BaudRate is %d\n", bRate);
//uart_send(serial_fd, buf, sizeof(buf));
uart_recv(serial_fd);
free(comport);
close(serial_fd);
return ;
}
linux 串口接收的更多相关文章
- storysnail的Linux串口编程笔记
storysnail的Linux串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据Ge ...
- Smart210学习记录------linux串口驱动
转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=27025492&id=327609 一.核心数据结构 串口驱动有 ...
- Linux串口c_cc[VTIME]和c_cc[VMIN]属性设置的作用
Linux串口c_cc[VTIME]和c_cc[VMIN]属性设置的作用 在串口编程模式下,open未设置O_NONBLOCK或O_NDELAY的情况下. c_cc[VTIME]和c_cc[VMIN] ...
- linux串口驱动分析——发送数据
一.应用程序中write函数到底层驱动历程 和前文提到的一样,首先先注册串口,使用uart_register_driver函数,依次分别为tty_register_driver,cdev_init函数 ...
- linux串口驱动分析——打开设备
串口驱动是由tty_driver架构实现的.一个应用程序中的函数要操作硬件,首先会经过tty,级级调用之后才会到达驱动之中.本文先介绍应用程序中打开设备的open函数的整个历程. 首先在串口初始化中会 ...
- linux串口驱动分析
linux串口驱动分析 硬件资源及描写叙述 s3c2440A 通用异步接收器和发送器(UART)提供了三个独立的异步串行 I/O(SIO)port,每一个port都能够在中断模式或 DMA 模式下操作 ...
- Linux串口编程详解(转)
串口本身,标准和硬件 † 串口是计算机上的串行通讯的物理接口.计算机历史上,串口曾经被广泛用于连接计算机和终端设备和各种外部设备.虽然以太网接口和USB接口也是以一个串行流进行数据传送的,但是串口连接 ...
- linux串口编程总结
串口本身.标准和硬件 † 串口是计算机上的串行通讯的物理接口.计算机历史上,串口以前被广泛用于连接计算机和终端设备和各种外部设备.尽管以太网接口和USB接口也是以一个串行流进行数据传送的.可是串口连接 ...
- linux 串口0x03,0x13的问题【转】
linux 串口0x03,0x13的问题 本人最近在调linux串口的时候,发现其他数据接收正常,但是0x13怎么也接收不到,后面发现了这篇文章,两天的bug终于解决了,原来是linux底层uart配 ...
随机推荐
- SQL语句里合并两个select查询结果
SQL UNION 操作符UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 ...
- vue+php接口
php: <?php header('Access-Control-Allow-Origin:*'); $date = $_POST['data'];$cars=array("Volv ...
- osgOcean编译
E:\Visual Studio 2015\install\VC>e: E:\Visual Studio 2015\install\VC>E:\Visual Studio 2015\ins ...
- 采购订单审批与撤销审批BAPI
*"---------------------------------------------------------------------- *"*"本地接口: *& ...
- C++ - 第一个程序
代码: #include <iostream> using namespace std; int main() { cout << "hello!" < ...
- zabbix3.4配置windowsAD登录
转载自:[https://zabbix.com/documentation/3.4/zh/manual/web_interface/frontend_sections/administration/a ...
- Spring Aop(十五)——Aop原理之Advised接口
转发地址:https://www.iteye.com/blog/elim-2398726 Spring Aop原理之Advised接口 通过之前我们介绍的ProxyFactory我们知道,Spring ...
- Word 查找替换高级玩法系列之 -- 将换行符替换成回车符
我们从网上Copy过来的很多Word文档,里面使用的都是换行符,也就是我们常说的软回车,它显示为一个向下的箭头.这些符号不仅碍眼,而且会影响我们后期的排版,尤其是对段落的排版,因为Word里面的段落只 ...
- Echarts API说明文档
theme = { // 全图默认背景 // backgroundColor: 'rgba(0,0,0,0)', // 默认色板 ...
- 前端通过js获取手机型号
###前段通过js获取手机型号 需求: 用户登录后记录当前的手机型号并记录 插件: mobile-detect.js插件地址 mobile-device-js插件地址 使用步骤: 获取UA信息-> ...