- 转载请注明:http://blog.csdn.net/herghost
- 如何找到串口设备号
- 串口之打开操作
- 串口之初始化
- 串口之发送
- 串口之接收
如何找到串口设备号
如果你使用的是开发板搭载linux系统进行的串口编程,你可以通过原理图进行查看
如果你电脑安装的linux系统,那么插上串口,通过dmesg命令进行查看
本文例子使用/dev/ttyS0
串口之打开操作
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(){
int fd;
char *com = "/dev/ttyS0";
if((fd = open(com,O_RDWR|O_CREAT,0777))<0){
//fd返回-1打开失败
}else{
//打开成功
}
return 0;
}
串口之初始化
- 了解termio结构体
- 常用初始化函数
- tcgetattr函数
- cfgetispeed函数
- cfgetospeed函数
- cfsetispeed函数
- cfsetospeed函数
- tcflush函数
- tcsetattr函数
- 初始化步骤
- 读取当前参数
- 修改参数
- 配置参数
了解termio结构体
struct termios
{
tcflag_t c_iflag;//输入模式
tcflag_t c_oflag;//输出模式
tcflag_t c_cflag;//控制模式
tcflag_t c_lflag;//本地模式
cc_t c_cc[NCCS];//控制字符
};
c_iflag参数如下:
键值 | 说明 |
---|---|
IGNBRK | 忽略BREAK键输入 |
BRKINT | 如果设置了IGNBRK,BREAK键输入将被忽略 |
IGNPAR | 忽略奇偶校验错误 |
PARMRK | 标识奇偶校验错误 |
INPCK | 允许输入奇偶校验 |
ISTRIP | 去除字符的第8个比特 |
INLCR | 将输入的NL(换行)转换成CR(回车) |
IGNCR | 忽略输入的回车 |
ICRNL | 将输入的回车转化成换行(如果IGNCR未设置的情况下) |
IUCLC | 将输入的大写字符转换成小写字符(非POSIX) |
IXON | 允许输出时对XON/XOFF流进行控制 |
IXANY | 输入任何字符将重启停止的输出 |
IXOFF | 允许输入时对XON/XOFF流进行控制 |
IMAXBEL | 当输入队列满的时候开始响铃 |
c_oflag参数如下:
键值 | 说明 |
---|---|
OPOST | 处理后输出 |
OLCUC | 将输入的小写字符转换成大写字符(非POSIX) |
ONLCR | 将输入的NL(换行)转换成CR(回车)及NL(换行) |
OCRNL | 将输入的CR(回车)转换成NL(换行) |
ONOCR | 第一行不输出回车符 |
ONLRET | 不输出回车符 |
OFILL | 发送填充字符以延迟终端输出 |
OFDEL | 以ASCII码的DEL作为填充字符,如果未设置该参数,填充字符为NUL |
NLDLY | 换行输出延时,可以取NL0(不延迟)或NL1(延迟0.1s) |
CRDLY | 回车延迟,取值范围为:CR0、CR1、CR2和 CR3 |
TABDLY | 水平制表符输出延迟,取值范围为:TAB0、TAB1、TAB2和TAB3 |
BSDLY | 空格输出延迟,可以取BS0或BS1 |
VTDLY | 垂直制表符输出延迟,可以取VT0或VT1 |
FFDLY | 换页延迟,可以取FF0或FF1 |
c_cflag参数如下:
参数 | 说明 |
---|---|
CBAUD | 波特率(4+1 |