全志实现串口通信
创始人
2024-03-31 17:10:23
0

串口基本认知

串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方 式的扩展接口。串行接口(Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简 单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成 本,特别适用于远距离通信,但传送速度较慢
  • 是设备间接线通信的一种方式
  • 数据一位一位地顺序传送
  • 双向通信,全双工
  • 传送速度相对较慢
关于电器标准和协议 串行接口按电气标准及协议来分包括RS-232-C、RS-422、RS485等。RS-232-C、RS-422与RS-485 标准只对接口的电气特性做出规定,不涉及接插件、电缆或协议 RS-232 也称标准串口,最常用的一种[串行通讯接口,比如我们的电脑主机的9针串口 ,最高速率为20kb/s RS-232是为点对点(即只用一对收、发设备)通讯而设计的,其传送距离最大为约15米。所以RS-232适 合本地设备之间的通信 RS-422 由于接收器采用高输入阻抗和发送驱动器比RS232更强的驱动能力,故允许在相同传输线上连接多个接 收节点,最多可接10个节点。即一个主设备(Master),其余为从设备(Slave),从设备之间不能通 信,所以RS-422支持点对多的双向通信。 RS-422的最大传输距离为1219米,最大传输速率为10Mb/s。平衡双绞线的长度与传输速率成反比 RS-485 是从RS-422基础上发展而来的,无论四线还是二线连接方式总线上可多接到32个设备。

关于串口的电平  

经常听说的UART

 异步串行是指UART(Universal Asynchronous Receiver/Transmitter),通用异步接收/发送。

UART包含TTL电平的串口和RS232电平的串口 RS232电平 逻辑1为-3~-15V的电压, 逻辑0为3~15V的电压 笔记本通过RS232电平和单片机通信

TTL电平 TTL是Transistor-Transistor Logic,即晶体管-晶体管逻辑的简称,它是计算机处理器控制的设备 内部各部分之间通信的标准技术。TTL电平信号应用广泛,是因为其数据表示采用二进制规定, +5V等价于逻辑”1”,0V等价于逻辑”0”。 数字电路中,由TTL电子元器件组成电路的电平是个电压范围,规定: 输出高电平>=2.4V,输出低电平<=0.4V; 输入高电平>=2.0V,输入低电平<=0.8V 笔记本电脑通过TTL电平与单片机通信 TX发送线(端口)3.1 RX接收线 (端口)3.0 USB转TTL,使用ch340通信

 

串口通信 

 串口接线方式

RXD:数据输入引脚,数据接受;对应全志TXD.5口 TXD:数据发送引脚,数据发送;对应全志RXD.5口 将系统自带的串口文件拷贝到自己创建的文件夹
 cp ../wiringOP/examples/serialTest.c  .

修改系统自带的串口文件,使用线程进行读和发

/** serialTest.c:*/#include 
#include 
#include 
#include 
#include 
#include 
#include int fd;void *Sendhandler()
{char *sendBuf;sendBuf = (char *)malloc(32 * sizeof(32));while(1){memset(sendBuf,'\0',32);scanf("%s",sendBuf);while(*sendBuf){serialPutchar (fd, *sendBuf++);}}
}void *Revhandler()
{while(1){while (serialDataAvail (fd)){printf ("%c", serialGetchar (fd)) ;fflush (stdout) ;}}}int main ()
{int count ;unsigned int nextTime ;pthread_t idSend;pthread_t idRev;if ((fd = serialOpen ("/dev/ttyS5", 115200)) < 0){fprintf (stderr, "Unable to open serial device: %s\n", strerror (errno)) ;return 1 ;}pthread_create(&idSend,NULL,Sendhandler,NULL);pthread_create(&idRev,NULL,Revhandler,NULL);if (wiringPiSetup () == -1){fprintf (stdout, "Unable to start wiringPi: %s\n", strerror (errno)) ;return 1 ;}while(1){sleep(10);}printf ("\n") ;return 0 ;
}

用source insight软件进行阅读系统自带的串口文件

 

阅读后发现原生的C库系统串口开发主要是struct termios,包括波特率、停止位、输出位、是否有奇偶校验

Linux原生串口开发

uartTool.h

int myserialOpen (const char *device, const int baud);void serialSendstring (const int fd, const char *s);int serialGetstring (const int fd,char *buffer);

uartTool.c

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include #include "wiringSerial.h"int myserialOpen (const char *device, const int baud)
{struct termios options ;speed_t myBaud ;int     status, fd ;switch (baud){case    9600:	myBaud =    B9600 ; break ;case  115200:	myBaud =  B115200 ; break ;default:return -2 ;}if ((fd = open (device, O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK)) == -1)return -1 ;fcntl (fd, F_SETFL, O_RDWR) ;// Get and modify current options:tcgetattr (fd, &options) ;cfmakeraw   (&options) ;cfsetispeed (&options, myBaud) ;cfsetospeed (&options, myBaud) ;options.c_cflag |= (CLOCAL | CREAD) ;options.c_cflag &= ~PARENB ;options.c_cflag &= ~CSTOPB ;options.c_cflag &= ~CSIZE ;options.c_cflag |= CS8 ; /* 控制模式标志*/options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG) ; /* 本地模式 */options.c_oflag &= ~OPOST ; /* 输出模式 */options.c_cc [VMIN]  =   0 ;options.c_cc [VTIME] = 100 ;	// Ten seconds (100 deciseconds)tcsetattr (fd, TCSANOW, &options) ;ioctl (fd, TIOCMGET, &status);status |= TIOCM_DTR ;status |= TIOCM_RTS ;ioctl (fd, TIOCMSET, &status);usleep (10000) ;	// 10mSreturn fd ;
}void serialSendstring (const int fd, const char *s)
{int ret;ret = write (fd, s, strlen (s));if (ret < 0)printf("Serial Puts Error\n");
}int serialGetstring (const int fd,char *buffer)
{int n_read;n_read=read(fd,buffer,32);return n_read;
}

uartTest.c

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "uartTool.h"int fd;void *readSerial()
{char buffer[32];while(1){memset(buffer,'\0',sizeof(buffer));serialGetstring(fd,buffer);printf("GET->%s\n",buffer);}
}void *sendSerial()
{char buffer[32];while(1){memset(buffer,'\0',sizeof(buffer));scanf("%s",buffer);serialSendstring(fd,buffer);}
}int main(int agrc,char **argv)
{pthread_t readt;pthread_t sendt;char deviceName[32]={'\0'};if(agrc < 2){printf("uage:%s /dev/ttyS?\n",argv[0]);return -1;}strcpy(deviceName,argv[1]);if((fd=myserialOpen(deviceName,115200))== 1){printf("open %s error!",deviceName);return -1;}pthread_create(&readt,NULL,readSerial,NULL);pthread_create(&sendt,NULL,sendSerial,NULL);while(1){sleep(10);}}

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...