【全志H616】-2 写一个自己的串口
1、基本命令
sudo reboot
Linux系统下一个文件夹的文件复制到另一个文件夹下
cp flags. c / home/ user05/ lab09/ flags_revised. c
cp oled_demo. c / home/ orangepi/ hardwareSoft/ oled_demo. c
gpio readall
2、来写一个自己的串口
2.1 串口收发实验1
# include <stdio.h>
# include <string.h>
# include <errno.h>
# include <pthread.h>
# include <wiringPi.h>
# include <wiringSerial.h>
# include <stdlib.h>
int fd;
void * Sendhandler ( )
{
char * sendBuf;
sendBuf = ( char * ) malloc ( 32 * sizeof ( 32 ) ) ;
while ( 1 )
{
memset ( sendBuf, '\0' , 32 ) ;
scanf ( "%s" , sendBuf) ;
while ( 1 )
{
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 ) ;
printf ( "\n" ) ;
return 0 ;
}
2.5 写一个自己的串口通信
这一块有3个文件,分别是uartTool.h
、uartTool.c
、uarttest.c
;
# ifndef __UARTTOOL_H
# define __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) ;
# endif
在uartTool.h
中,除了函数声明,其余都是固定的,#ifndef __UARTTOOL_H 和 #define __UARTTOOL_H
后面跟的就是文件名
# include <stdio.h>
# include <stdlib.h>
# include <stdint.h>
# include <stdarg.h>
# include <string.h>
# include <termios.h>
# include <unistd.h>
# include <fcntl.h>
# include <sys/ioctl.h>
# include <sys/types.h>
# include <sys/stat.h>
# include "uartTool.h"
# 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 :
}
if ( ( fd = open ( device, O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK) ) == - 1 )
return - 1 ;
fcntl ( fd, F_SETFL, O_RDWR) ;
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 ;
tcsetattr ( fd, TCSANOW, & options) ;
ioctl ( fd, TIOCMGET, & status) ;
status |= TIOCM_DTR ;
status |= TIOCM_RTS ;
ioctl ( fd, TIOCMSET, & status) ;
usleep ( 10000 ) ;
return fd ;
}
void serialSendstring ( const int fd, const char * s)
{
int ret;
ret = write ( fd, s, strlen ( s) ) ;
if ( ret < 0 )
printf ( "Serial Putchar Error\n" ) ;
}
int serialGetstring ( const int fd, char * buffer)
{
int n_read;
n_read = read ( fd, buffer, 32 ) ;
return n_read;
}
# include <stdio.h>
# include <stdlib.h>
# include <stdint.h>
# include <stdarg.h>
# include <string.h>
# include <termios.h>
# include <unistd.h>
# include <fcntl.h>
# include <sys/ioctl.h>
# include <sys/types.h>
# include <sys/stat.h>
# include <unistd.h>
# include <pthread.h>
# 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 argc, char * * argv)
{
char deviceName[ 32 ] = { '\0' } ;
pthread_t readt;
pthread_t sendt;
if ( argc < 2 )
{
printf ( "usag:%s /dev/ttyS?\n" , argv[ 0 ] ) ;
return - 1 ;
}
strcpy ( deviceName, argv[ 1 ] ) ;
if ( ( fd = myserialOpen ( deviceName, 115200 ) ) == - 1 )
{
printf ( "open %s error\n" , deviceName) ;
return - 1 ;
}
pthread_create ( & readt, NULL , readSerial, NULL ) ;
pthread_create ( & sendt, NULL , sendSerial, NULL ) ;
while ( 1 ) {
sleep ( 10 ) ;
}
}
实验结果