树莓派7:树莓派外设开发综述(树莓派wiringPi库详解)

树莓派外设开发综述

1.树莓派的接口
IO口:
intput output -------是针对主控来说
intput(采集数据):人体红外传感器,烟雾传感器,火焰传感器,振动传感器等等;
output(实现控制):继电器开关,蜂鸣器,LED等
IO口的复用:一口多用
PWM:电机调速,灯光亮度调节
串口:USART
IIC,SPI,IIS
其它特定硬件的接口:flash
等等
补充:
C51,STM32,WemosD1;都有这些接口,但是是纯逻辑的操作,没有操作系统(STM32含有RTOS实时操作系统)
树莓派,Nanopi,S3c2410,Tiny210,海思方案,瑞芯微方案,移远方案,都使用操作系统

2.树莓派外设开发接口文档参考

wiringPi 库(提供API):i是一个很棒的树莓派IO控制库-----(Linux动态库 .so ,静态库.a)

安装:
在终端下输入:

gpio -v

查看树莓派操作是否含有wiringPi ,
如果没有,参考链接文档第一步进行安装。

编译和运行:
假如你写了一个LEDtest.c 的项目,则如下:

//编译
gcc -Wall -o LEDtest LEDtest.c   -lwiringPi     //使用C语言编程
//运行
sudo ./LEDtest

查看引脚编号表格:
使用如下控制台下命令:

gpio readall

可以查看到下图:
注意:查看时,将树莓派的USB接口面对自己,这样看才是正确的。
在这里插入图片描述
wiringPi库API大全:
在使用wiringPi库时,你需要包含头文件:

 #include<wiringPi.h>

凡是写wiringPi的程序,都包含这个头文件。

3.树莓派的接口函数

硬件初始化函数:
使用wiringPi时,你必须在执行任何操作前初始化树莓派,否则程序不能正常工作。
可以调用下表函数之一进行初始化,它们都会返回一个int , 返回 -1 表示初始化失败。

在这里插入图片描述
通用GPIO控制函数:

在这里插入图片描述
在这里插入图片描述
时间控制函数:

在这里插入图片描述
中断:

wiringPi提供了一个中断处理注册函数,它只是一个注册函数,并不处理中断。他无需root权限。

在这里插入图片描述
多线程:

wiringPi提供了简单的Linux系统下的通用的 Posix threads线程库接口来支持并发。
在这里插入图片描述
在这里插入图片描述
凡是涉及到多线程编程,就会涉及到线程安全的问题,多线程访问同一个数据,需要使用同步锁来保障数据操作正确性和符合预期。
当A线程锁上 锁S 后,其他共用这个锁的竞争线程,只能等到锁被释放,才能继续执行。
成功执行了piLock 函数的线程将拥有这把锁。其他线程想要拥有这把锁必须等到这个线程释放锁,也就是这个线程执行piUnlock后。
同时要扩展的知识是:volatile 这个C/C++中的关键字,它请求编译器不缓存这个变量的数据,而是每次都从内存中读取。特别是在多线程下共享放变量,必须使用volatile关键字声明才是保险的。

softPwm,软件实现的PWM:

树莓派硬件上支持的PWM输出的引脚有限,为了突破这个限制,wiringPi提供了软件实现的PWM输出API。
需要包含头文件:#include <softPwm.h>
编译时需要添pthread库链接 -lpthread

在这里插入图片描述
串口通信:

使用时需要包含头文件:#include <wiringSerial.h>
在这里插入图片描述
在这里插入图片描述
注意:初次使用树莓派串口编程,需要配置。

以下:
shift移位寄存器芯片API
树莓派硬件平台特有的API

用到的时候再研究,

学习参考:
树莓派wiringPi库详解

猜你喜欢

转载自blog.csdn.net/weixin_40734514/article/details/108614975