linux串口

串口

一.系统查看串口
1.查看串口个数
dmesg | grep ttyS*

2.查看串口驱动的信息
cat /proc/tty/driver/serial

3.查看串口的波特率
stty -a -F /dev/ttySAC2

4.查看串口数据
cat /dev/tty*

二.串口操作函数
1.打开串口
bool CPosition::OpenComPort()
{
    m_comm = open("/dev/ttymxc4", O_RDWR | O_NOCTTY);

    if (m_comm < 0)
    {       
        DebugMsg("$Boot Info:Open /dev/ttymxc4 Error!\n");
        return false;
    }

    int ret;

    struct termios nowTermios;
    memset(&nowTermios, 0, sizeof(nowTermios));

    nowTermios.c_cflag = B115200 | CS8 | CLOCAL | CREAD;
    nowTermios.c_oflag = ICANON;
    nowTermios.c_iflag = 0;
    nowTermios.c_lflag = 0;

    nowTermios.c_cc[VMIN] = 1;
    nowTermios.c_cc[VTIME] = 0;

 //处理未接收字符
    tcflush(m_comm, TCIFLUSH);

 //激活新配置
 ret = tcsetattr(m_comm, TCSANOW, &nowTermios);
 if (ret != 0)
 {
        DebugMsg("$Boot Info:Tcsetattr Set Comm 8N1 Error!\n");
  return false;
 }

 return true;
}
串口设置结构体
Struct{
       tcflag_t    c_iflag;     /*输入模式标记*/
       tcflag_t    c_oflag;     /*输出模式标记*/
       tcflag_t    c_cflag;     /*控制模式标记*/
       tcflag_t    c_lflag;     /*本地模式标记*/
       cc_t        c_line;      /*线路规程*/
       cc_t        c_cc[NCCS];  /*控制符号*/
};
其中c_line只有在一些特殊的系统程序(通过tty设备来通讯的网络协议)中才会用.
在数组c_cc中有两个下标(VTIME和VMIN)对应的元素不是控制符,并且只是在原始模式下有效.
只有在原始模式下,它们决定了read函数在什么时候返回.在标准模式下,除非设置了非阻塞方式,
否则只有当遇到文件结束符或各行的字符都已经编辑完毕后才返回.
控制符VTIME和VMIN之间有着复杂的关系。VTIME定义要求等待的零到几百毫秒的时间量
(通常是一个8位的unsigned char变量,取值不能大于cc_t)。VMIN定义了要求等待的最小字节数
(不是要求读的字节数——read()的第三个参数才是指定要求读的最大字节数),这个字节数可能是0。

(1)如果VTIME取0,VMIN定义了要求等待读取的最小字节数。函数read()只有在读取了VMIN个字节的数据或者收到一个信号的时候才返回。
(2)如果VMIN取0,VTIME定义了即使没有数据可以读取,read()函数返回前也要等待几百毫秒的时间量。
这时,read()函数不需要像其通常情况那样要遇到一个文件结束标志才返回0。
(3)如果VTIME和VMIN都不取0,VTIME定义的是当接收到第一个字节的数据后开始计算等待的时间量。
如果当调用read函数时可以得到数据,计时器马上开始计时。如果当调用read函数时还没有任何数据可读,
则等接收到第一个字节的数据后,计时器开始计时。函数read可能会在读取到VMIN个字节的数据后返回,
也可能在计时完毕后返回,这主要取决于哪个条件首先实现。不过函数至少会读取到一个字节的数据,
因为计时器是在读取到第一个数据时开始计时的。
(4)如果VTIME和VMIN都取0,即使读取不到任何数据,函数read也会立即返回。同时,返回值0表示read函数
不需要等待文件结束标志就返回了。

2.关闭串口
void CPosition::CloseComPort()
{
 if (m_comm> 0)
 {
  close(m_comm);
  m_comm = -1;
 }

 return;
}

3.读写函数
read(fd,buff,8);
write(fd,buff,8);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值