串口通信
串口是一种简单的通信接口,也是单片机中最常用最简单的通信方式
通常传感器都是采用串口作为与上位机的通信接口
ARM板有三个可外接传感器的串口接口,位于开发板右上角
从上到下,分别是
串口号 串口驱动设备文件
CON2 "/dev/ttySAC1"
CON3 "/dev/ttySAC2"
CON4 "/dev/ttySAC3"
将传感器链接到对应的串口端口后,在Linux中通过串口通信去获取该传感器的数据很简单
只需要打开 串口设备文件,并且对串口进行初始化配置,即可调用write函数来发送数据或命令给传感器,或调用read函数从传感器中接收数据
串口的初始化函数:
c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h> //串口配置需要的头文件
/*
* init_serial:自定义的用来打开串口文件并对串口进行初始化的函数
* arg:
* @fild:串口设备文件名,指定您要使用的串口
* @baudrate:整数,指定您要配置的串口的通信波特率
* 9600/115200/19200
* 配置的串口协议:数据位8,停止位1,不要校验,不要硬件控制流
* return:
* 成功,返回打开 并初始化好的 串口的文件描述符,后期根据该返回值来与链接在该串口上的传感器进行通信
* 失败返回-1
**/
int init_serial(const char *file, int baudrate)
{
int fd;
fd = open(file, O_RDWR);
if (fd == -1)
{
perror("open device error:");
return -1;
}
struct termios myserial;
//清空结构体
memset(&myserial, 0, sizeof (myserial));
//O_RDWR
myserial.c_cflag |= (CLOCAL | CREAD);
//设置控制模式状态,本地连接,接受使能
//设置 数据位
myserial.c_cflag &= ~CSIZE; //清空数据位
myserial.c_cflag &= ~CRTSCTS; //无硬件流控制
myserial.c_cflag |= CS8; //数据位:8
myserial.c_cflag &= ~CSTOPB;// //1位停止位
myserial.c_cflag &= ~PARENB; //不要校验
//myserial.c_iflag |= IGNPAR; //不要校验
//myserial.c_oflag = 0; //输入模式
//myserial.c_lflag = 0; //不激活终端模式
switch (baudrate)
{
case 9600:
cfsetospeed(&myserial, B9600); //设置波特率
cfsetispeed(&myserial, B9600);
break;
case 115200:
cfsetospeed(&myserial, B115200); //设置波特率
cfsetispeed(&myserial, B115200);
break;
case 19200:
cfsetospeed(&myserial, B19200); //设置波特率
cfsetispeed(&myserial, B19200);
break;
}
/* 刷新输出队列,清除正接受的数据 */
tcflush(fd, TCIFLUSH);
/* 改变配置 */
tcsetattr(fd, TCSANOW, &myserial);
return fd;
}
eg:调用串口
c
init_serial(ttySAC1,9600);
这模块资料内容有点多,我打包放到我的资源处了,可自行下载。
压缩包里面包括lanya.c实现手机蓝牙app与开发板聊天通信,手机蓝牙连接app,以及蓝牙使用方法和配置方法软件等