Linux下串口操作-嵌入式-C语言实现
2018-02-28 15:15
260 查看
嵌入式开发板到手后一般都会开放串口,对串口的操作可以说是最基本的操作,那么拿到开发板后怎样操作串口呢?怎样利用串口向外发送数据呢?
我做的是一个通过串口来发送一串字符,实现NBIot的传输,系统是linux系统下的,发送的数据需要是16进制的数据。以下是c语言开发串口的相关代码记录。
1.找到串口的设备号
在linux系统下,所有的设备都是文件,所以要先找到串口这个设备文件,之后就可以对这个串口进行操作。#define UART_DEV "/dev/ttyAMA2"2.打开串口并初始化串口
串口的打开只需要一个open函数就可以打开,下面有一个初始化的函数,先将串口打开,如果打开成功,会返回一个设备描述符。int uart_init(void )
{
int fd=0;
fd = open(UART_DEV , O_RDWR|O_NOCTTY|O_NDELAY, 0);
if (fd < 0)
{
printf("open error!\n");
return -1;
}
set_opt(fd);
return fd;
}set_opt函数用于设置串口的相关基本参数,一般串口都会设置波特率什么的,其余的参数可以用到的时候再查询是什么意思,set_opt函数的定义如下:int set_opt(int fd)
{
struct termios old_cfg, new_cfg;
tcgetattr(fd, &new_cfg);
new_cfg.c_cflag |= (CLOCAL | CREAD);
cfsetispeed(&new_cfg, B9600);//设置波特率
cfsetospeed(&new_cfg, B9600);
new_cfg.c_cflag &= ~CSIZE;
new_cfg.c_cflag |= CS8;
new_cfg.c_cflag &= ~PARENB;
new_cfg.c_cflag &= ~CSTOPB;
new_cfg.c_cc[VTIME] = 0;
new_cfg.c_cc[VMIN] = 0;
tcflush(fd,TCIFLUSH);
tcsetattr(fd, TCSANOW, &new_cfg);
return 0;
}这样设置好了以后,串口的初始化基本就完成了。
3.用串口发送一串数据
利用串口发送一串数据,writeint uart_send( int fd, char * str)
{
int wr_num;
char buf[1024];
sprintf(buf, "%s", str);
wr_num = write(fd,buf,strlen(buf));
close(fd);
return wr_num;
}4.读出串口接收到的数据,readint uart_recv(int fd)
{
int nread;
char buf[1024];
nread = read(fd, buf, LEN);
if(nread > 0)
{
printf("%s\n",buf);
}
close(fd);
return nread ;
}
串口的基本操作就是读入读出了,关闭直接close即可。
我做的是一个通过串口来发送一串字符,实现NBIot的传输,系统是linux系统下的,发送的数据需要是16进制的数据。以下是c语言开发串口的相关代码记录。
1.找到串口的设备号
在linux系统下,所有的设备都是文件,所以要先找到串口这个设备文件,之后就可以对这个串口进行操作。#define UART_DEV "/dev/ttyAMA2"2.打开串口并初始化串口
串口的打开只需要一个open函数就可以打开,下面有一个初始化的函数,先将串口打开,如果打开成功,会返回一个设备描述符。int uart_init(void )
{
int fd=0;
fd = open(UART_DEV , O_RDWR|O_NOCTTY|O_NDELAY, 0);
if (fd < 0)
{
printf("open error!\n");
return -1;
}
set_opt(fd);
return fd;
}set_opt函数用于设置串口的相关基本参数,一般串口都会设置波特率什么的,其余的参数可以用到的时候再查询是什么意思,set_opt函数的定义如下:int set_opt(int fd)
{
struct termios old_cfg, new_cfg;
tcgetattr(fd, &new_cfg);
new_cfg.c_cflag |= (CLOCAL | CREAD);
cfsetispeed(&new_cfg, B9600);//设置波特率
cfsetospeed(&new_cfg, B9600);
new_cfg.c_cflag &= ~CSIZE;
new_cfg.c_cflag |= CS8;
new_cfg.c_cflag &= ~PARENB;
new_cfg.c_cflag &= ~CSTOPB;
new_cfg.c_cc[VTIME] = 0;
new_cfg.c_cc[VMIN] = 0;
tcflush(fd,TCIFLUSH);
tcsetattr(fd, TCSANOW, &new_cfg);
return 0;
}这样设置好了以后,串口的初始化基本就完成了。
3.用串口发送一串数据
利用串口发送一串数据,writeint uart_send( int fd, char * str)
{
int wr_num;
char buf[1024];
sprintf(buf, "%s", str);
wr_num = write(fd,buf,strlen(buf));
close(fd);
return wr_num;
}4.读出串口接收到的数据,readint uart_recv(int fd)
{
int nread;
char buf[1024];
nread = read(fd, buf, LEN);
if(nread > 0)
{
printf("%s\n",buf);
}
close(fd);
return nread ;
}
串口的基本操作就是读入读出了,关闭直接close即可。
相关文章推荐
- C语言模拟C++方式读取串口操作实现
- 实践操作整理:嵌入式linux上通过boa服务器实现cgi的web上网
- (一个代码学会c语言操作数据库)linux上通过c语言操作数据库实现基本的学生信息管理系统(增、删、查、改‘显示)
- linux环境下C语言实现非阻塞方式读取字符串数据的串口测试程序,即串口工具的编写
- linux文件操作指令的c语言代码实现
- 【Linux】嵌入式开发,在Linux中使用C语言对Fork函数执行子函数及父函数,命令ps 及 ls 操作
- C语言直接驱动硬件实现PC机的串口操作
- Linux下的C语言编程——用链表实现栈操作
- 嵌入式LINUX下I/O资源的实现、管理和操作
- Android通过JNI实现与C语言的串口通讯操作蓝牙硬件模块
- 嵌入式Linux串口操作接口
- Linux下的C语言编程——链表实现队列操作
- Linux系统遍历文件夹 获取文件大小的操作(C语言实现)
- 数据结构单链表的相关操作(linux下实现)C语言
- 如何使用c语言实现双向链表的插入删除操作
- Linux串口上网的简单实现
- Linux 下的C语言实现播放WAV文件
- 在Java中操作串口实现短信收发
- 教你一种实现嵌入式Linux系统新方法
- Linux下获得系统时间的C语言的实现方法