UART TEST

UART 串口通信与数据解析
该博客详细介绍了如何使用C语言进行UART串口通信的设置,包括波特率、数据位、校验位和停止位的配置。还展示了如何读取串口数据并解析特定指令,涉及数据校验和任务调度。内容涵盖了串口设备初始化、数据帧格式以及读写函数的实现。

#include<stdio.h>

#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<termios.h>
#include<string.h>
#include<ctype.h>


#include <unistd.h>


#define FRAMEHEADER_FLAG  0XA5
#define FRAMEND_FLAG   0X5A

#define READ_RET_FLAG   0XAF
#define READ_FLAG    0X0A
#define READ_LOCALSYSTEM_PARM_FLAG  0X00
#define READ_LINUX_VER  0X01
#define READ_LINUX_TIME  0X02
#define READ_LINUX_IP  0X03
#define READ_LINUX_MAC  0X04
#define READ_LINUX_DNS  0X05


unsigned int TaskList;  //任务列表
#define TASK_START   0X01//BIT0
#define R_LINUX_VER_TASK 0X02//BIT1
#define R_LINUX_TIME_TASK 0X04//BIT2
#define R_LINUX_IP_TASK  0X08//BIT3
#define R_LINUX_MAC_TASK 0X10//BIT4
#define R_LINUX_DNS_TASK 0X20//BIT5

unsigned int TaskErrorDeal;//出错任务处理


#define DNS_FILE "/etc/resolv.conf"
char ReadBuf[80] = {0};
char  WriteBuf[50] = {0};
int uart_fd;
char DatNum;

static char* getDNSInfo(char *maches);
void DecodeTask(void);
int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop);
char CheckOutDat(char *checkDat,unsigned int n);
char comp_dat(char *SourDat,char Num);
void ReadUart(void);

#define Debug

/*=================================================================
函数功能描述;实现对串口设备的设置
参数描述:  fd:需要设置的串口的文件描述符
     nSpeed:设置波特率
     nBits:设置数据位
     nEvent:设置校验位
     nStop:停止位
===================================================================*/
int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)
{
 struct termios newtio,oldtio;
 if (tcgetattr(fd,&oldtio) != 0) //保存原先串口的配置
 {
  perror("SetupSerial 1");
  return -1;
 }
 bzero(&newtio, sizeof(newtio));
 newtio.c_cflag  |=  CLOCAL | CREAD;//本地连接,接收使能
 newtio.c_cflag &= ~CSIZE;//

//设置数据位
 switch (nBits)
 {
  case 7:
   newtio.c_cflag |= CS7;
   break;
  case 8:
   newtio.c_cflag |= CS8;
   break;
  default:
   break;
 }

//设置校验位
 switch (nEvent )
 {
  case 'O':
   newtio.c_cflag |= PARENB;
   newtio.c_cflag |= PARODD;
   newtio.c_iflag |= (INPCK | ISTRIP);
   break;
  case 'E':
   newtio.c_iflag |= (INPCK | ISTRIP);
   newtio.c_cflag |= PARENB;
   newtio.c_cflag &= ~PARODD;
   break;
  case 'N': 
   newtio.c_cflag &= ~PARENB;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值