1.实现串口通信前的准备
树莓派4b实现与其它设备之间的串口通信需要做一些配置,可以点进这篇文章进行查看参考文章
wiringPi库串口相关的API参考文章链接wiringPI库串口API
2.实现单个字符的发送
c
#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdlib.h>
int main()
{
//初始化外设库
if(wiringPiSetup() == -1){
printf("init wiringPi error\n");
return -1;
}
int fd;//串口文件描述符
//打开串口
if((fd =serialOpen("/dev/ttyAMA0",9600)) == -1){
printf("open serial fail!\n");
exit(-1);
}
//发送数据
while(1){
serialPutchar(fd,'x');
delayMicroseconds(1000000);//延时1s
}
serialClose(fd);//关闭串口
return 0;
}
运行结果:
3.实现字符串的发送
c
#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdlib.h>
int main()
{
//初始化外设库
if(wiringPiSetup() == -1){
printf("init wiringPi error\n");
return -1;
}
int fd;//串口文件描述符
char *ch="xfj hansome\r\n";
//打开串口
if((fd =serialOpen("/dev/ttyAMA0",9600)) == -1){
printf("open serial fail!\n");
exit(-1);
}
//发送数据
while(1){
serialPuts(fd,ch);
delayMicroseconds(1000000);//延时1s
}
serialClose(fd);//关闭串口
return 0;
}
运行结果:
4.实现单个字符的接收
c
#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdlib.h>
int main()
{
//初始化外设库
if(wiringPiSetup() == -1){
printf("init wiringPi error\n");
return -1;
}
int fd;//串口文件描述符
int data;//用于接收
//打开串口
if((fd =serialOpen("/dev/ttyAMA0",9600)) == -1){
printf("open serial fail!\n");
exit(-1);
}
//发送数据
while(1){
if(serialDataAvail(fd) != -1){
data = serialGetchar(fd);
printf("rev:%c\n",data);
}
}
serialClose(fd);//关闭串口
return 0;
}
运行结果:
5.实现字符串的接收
c
#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main()
{
//初始化外设库
if(wiringPiSetup() == -1){
printf("init wiringPi error\n");
return -1;
}
int fd;//串口文件描述符
char *ch= "xfj hansome\r\n";
char buffer[128]={0};
//打开串口
if((fd =serialOpen("/dev/ttyAMA0",9600)) == -1){
printf("open serial fail!\n");
exit(-1);
}
while(1){
if(serialDataAvail(fd) != -1){
read(fd,buffer,sizeof(buffer));
printf("rec:%s\n",buffer);
memset(buffer,0,sizeof(buffer));
}
}
serialClose(fd);//关闭串口
return 0;
}
运行结果:
如果想要一边接收和发送的话,可以多开多线程,让不同的线程分别处理发送和接收,或者就是接收到某些消息判断满足预先设定的条件后,再进行发送