前言
因为最后我们要将得到的数据传给电控,传输的方式就是串口通信,然而以前我使用的都是python写的,这次开始使用c/c++去写,开始是让学弟写,但是加入工程的时候发现有很多地方都封装不了,于是我打算自己来实现一波,然后封装一下,那现在开始吧。
借鉴:https://blog.csdn.net/AAA375/article/details/100096490
串口引脚
首先我们来看一下串口的引脚,因为我们后期写的代码就是对这些引脚进行操作的,我在第一次看代码的时候也是很蒙的,因为我并不知道那些我不知道的是引脚。。。。
具体怎么用后期直接结合代码查看!
代码书写
导入库
这个吧,直接复制就好
#include <stdio.h> /*标准输入输出定义*/
#include <stdlib.h> /*标准函数库定义*/
#include <unistd.h> /*Unix 标准函数定义*/
#include <sys/types.h> /*数据类型,比如一些XXX_t的那种*/
#include <sys/stat.h> /*定义了一些返回值的结构,没看明白*/
#include <fcntl.h> /*文件控制定义*/
#include <termios.h> /*PPSIX 终端控制定义*/
#include <errno.h> /*错误号定义*/
打开串口
首先得明白个事,端口不固定,对于不同的设备是不同,对于linux下的话是位于 /dev 下的,串口一 为 /dev/ttyS0,串口二 为 /dev/ttyS1,我们这里用的串口一:
#include <stdio.h> /*标准输入输出定义*/
#include <stdlib.h> /*标准函数库定义*/
#include <unistd.h> /*Unix 标准函数定义*/
#include <sys/types.h> /*数据类型,比如一些XXX_t的那种*/
#include <sys/stat.h> /*定义了一些返回值的结构,没看明白*/
#include <fcntl.h> /*文件控制定义*/
#include <termios.h> /*PPSIX 终端控制定义*/
#include <errno.h> /*错误号定义*/
#include <iostream>
using namespace std;
int main(){
int fd = -1;
/*以读写方式打开串口*/
fd = open( "/dev/ttyS0", O_RDWR);
cout<<fd<<endl;
if (-1 == fd){
/* 不能打开串口一*/
perror(" 提示错误!");
}
else{
cout<<"打开成功!"<<endl;
}
}
可以看到我们已经成功打开串口了
设置串口(修改比特率)
在打开串口后我们要进行一些设置,如比特率,效验位等,这些设置是通过一个结构体来设置。
struct termio
{
unsigned short c_iflag; /* 输入模式标志 */
unsigned short c_oflag; /* 输出模式标志 */
unsigned short c_cflag; /* 控制模式标志*/
unsigned short c_lflag; /* local mode flags */
unsigned char c_line; /* line discipline */
unsigned char c_cc[NCC]; /* control characters */
};
如果要去看源码的话,是很难理解的,我也是没看懂,但是并不影响我们使用,下面是一个设置波特率的例子:
//比特率配置
int speed_arr[] =