树莓派4B通过wiringP库实现串口通信的实验

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;
}

运行结果:

如果想要一边接收和发送的话,可以多开多线程,让不同的线程分别处理发送和接收,或者就是接收到某些消息判断满足预先设定的条件后,再进行发送

相关推荐
冰封之寂8 小时前
Docker 资源管理终极指南:CPU、内存与 IO 的精细化控制
linux·运维·服务器·docker·云计算
xiaoye-duck8 小时前
《Linux系统编程》Linux 系统多线程(五):<线程同步与互斥>线程互斥(上):从条件变量到生产者消费者模型详解
linux·线程
一叶龙洲10 小时前
向日葵远程Ubuntu,支持隐私屏
linux·运维·ubuntu
酷可达拉斯10 小时前
Linux操作系统-shell编程之Grep与正则表达式
linux·运维·服务器·正则表达式·centos
寒水馨11 小时前
Linux下载、安装llama.cpp-b10068(附安装包llama-b10068-bin-ubuntu-vulkan-x64.tar.gz)
linux·ubuntu·llm·llama·本地部署·llama.cpp·推理引擎
我星期八休息13 小时前
网络编程—UDP与TCP
linux·运维·网络·数据库·网络协议·tcp/ip·udp
ziguo112214 小时前
C/C++ 错误处理全解:从 errno 到 C++ 异常
linux·c语言·c++·windows·visual studio
三84415 小时前
使用Samba/NFS实现文件共享/自动挂载共享目录/autofs自动挂载服务
linux·服务器·网络
高铭杰16 小时前
万物皆可KV(2)SurrealDB 存储布局分析
linux·服务器
无小道16 小时前
深入解析操作系统文件缓冲区:页缓存、基数树与f_pos的协同设计
linux·缓存·文件缓冲区