serialcode.c
/*******************************************************************************
* @file serialcode.c
* @copyright 2022
* @author
* @date 2022-6-14
* caption:
*******************************************************************************/
#include <termios.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <linux/kernel.h>
#include <stdio.h>
#include <pthread.h>
#include <string.h>
#include <sys/select.h>
#include <sys/time.h>
#include "serialcode.h"
unsigned char Write_RingBuff(unsigned char data);
unsigned char Read_RingBuff(unsigned char *rData);
pthread_mutex_t mutex ;
int uart_fd;
Uart_RingBuff_t RingBuff;
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) /*该函数得到fd指向的终端配置参数,并将它们保存到old_cfg变量中,成功返回0,否则-1*/
{
perror("tcgetttr");
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 5:
new_cfg.c_cflag &=