linux 应用编程之串口 资料整理

Linux应用编程之串口操作20170901

https://www.cnblogs.com/yuweifeng/p/7464836.html

可用的代码?

嵌入式Linux串口应用编程之串口配置  

Linux下可以查看 Linux Programmer's Manual 的英文介绍

man tcgetattr

串口配置函数 rawmode 模式。

int set_com_config(int fd,int baud_rate, 
    int data_bits, char parity, int stop_bits)
    {
        struct termios new_cfg,old_cfg;
        int speed;

        /* 保存并测试现有串口参数设置,在这里如果串口号等出错,会有相关的出错信息 */
        if (tcgetattr(fd, &old_cfg) != 0) 
        {
            perror("tcgetattr");
            return -1;
        }
        new_cfg = old_cfg;
        cfmakeraw(&new_cfg); /* 配置为原始模式 */
        new_cfg.c_cflag &= ~CSIZE;
        /* 设置波特率 */
        switch (baud_rate)
        {
            case 2400:
            {
                speed = B2400;
            }
            break;
            case 4800:
            {
                speed = B4800;
            }
            break;
            case 9600:
            {
                speed = B9600;
            }
            break;
            case 19200:
            {
                speed = B19200;
            }
            break;
            case 38400:
            {
                speed = B38400;
            }
            break;

            default:
            case 115200:
            {
                speed = B115200;
            }
            break;
        }
        cfsetispeed(&new_cfg, speed);
        cfsetospeed(&new_cfg, speed);

        switch (data_bits) /* 设置数据位 */
        {
            case 7:
            {
                new_cfg.c_cflag |= CS7;
            }
            break;

            default:
            case 8:
            {
                new_cfg.c_cflag |= CS8
;             }
            break;
        }

        switch (parity) /* 设置奇偶校验位 */
        {
            default:
            case 'n':
            case 'N':
            {
                new_cfg.c_cflag &= ~PARENB; 
                new_cfg.c_iflag &= ~INPCK; 
            }
            break;

            case 'o':
            case 'O':
            {
                new_cfg.c_cflag |= (PARODD | PARENB); 
                new_cfg.c_iflag |= INPCK; 
            }
            break;

            case 'e':
            case 'E':
            {
                new_cfg.c_cflag |= PARENB; 
                new_cfg.c_cflag &= ~PARODD; 
                new_cfg.c_iflag |= INPCK; 
            }
            break;

            case 's': /* as no parity */
            case 'S':
            {
                new_cfg.c_cflag &= ~PARENB;
                new_cfg.c_cflag &= ~CSTOPB;
            }
            break;
        }

        switch (stop_bits) /* 设置停止位 */
        {
            default:
            case 1:
            {
                new_cfg.c_cflag &= ~CSTOPB;
            }
            break;

            case 2:
            {
                new_cfg.c_cflag |= CSTOPB;
            }
        }

        /* 设置等待时间和小接收字符 */
        new_cfg.c_cc[VTIME] = 0;
        new_cfg.c_cc[VMIN] = 1;
        tcflush(fd, TCIFLUSH); /* 处理未接收字符 */
        if ((tcsetattr(fd, TCSANOW, &new_cfg)) != 0) /* 激活新配置 */
        {
            perror("tcsetattr");
            return -1;
        }	
        return 0;
    }

 

Linux下C语言串口应用编程  介绍应用方法

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

 
#define DEV_NAME  "/dev/ttyUSB0"
 
 
int main (int argc, char *argv[])
{
	int fd;
	int len, i,ret;
    char buf[] = "hello world \n";
 
 
	fd = open(DEV_NAME, O_RDWR | O_NOCTTY);
        if(fd < 0) {
                perror(DEV_NAME);
                return -1;
        }
 
 
	len = write(fd, buf, sizeof(buf));
	if (len < 0) {
		printf("write data error \n");
	}
	
	len = read(fd, buf, sizeof(buf));
        if (len < 0) {
                printf("read error \n");
                return -1;
        }
 
	printf("%s", buf);
 
	return(0);
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值