4月「掘金·日新计划」第17天
一、外设使用WiringPi
有人提供的树莓派库,我怀疑是基于gpiolib,驱动会说什么是gpiolib
-
查看是否安装,gpio -v
-
头文件及使用编译
#include <wiringPi.h> -lwiringPi
-
硬件初始化
int wiringPiSetup(void);
-
引脚配置
void pinMode(int pin,int mode); //pin引脚,gpio readall出来的表,wPi列的序号 //模式,可取INPUT,OUTPUT,PWM_OUTPUT,GPIO_CLOCK
-
控制引脚输出
void digitalWrite(int pin, int value); //pin引脚 //LOW低电平,HIGH高电平
-
读取输入电平
int digitalRead(int pin);
-
输出模拟量(树莓派不支持AD转换,要加模块)
void analogWrite(int pin,int value) //pin //模拟量
-
输入模拟量(树莓派不支持AD转换,要加模块)
int analogRead(int pin)
-
pwm
-
硬件输出pwm,只能1脚
void pwmWrite(int pin,int value) //pin //写入到PWM寄存器的值,0-1024
-
软件实现pwm函数
#include<softPwm.h> -lpthread int softPwmCreate(int pin,int initialValue,int pwmRange) //使用一个指定pin引脚,创建一个模拟的PWM输出引脚 //pin,引脚输出的初始值,PWM值范围上限建议100 void softPwmWrite(int pin,int value) //更新引脚PWM值 //pin,PWM引脚输出值
-
-
拉电阻模式
void pullUpDnControl(int pin,int pud) //pin //PUD_OFF关闭拉电阻,PUD_DOWN下拉,PUD_UP上拉
-
时间控制函数
-
硬件初始化开始,程序执行到现在的毫秒级数
unsigned int millis(void)//毫秒最大可记录49天 unsigned int micros(void)//微妙最大记录71分钟
-
延时函数
void delay(unsigned int howLong)//毫秒 void delayMicroseconds(unsigned int howLong)//微妙
-
-
串口通信
-
使用前准备
包含头文件#include <wiringSerial.h> 用之前要改树莓派的启动文件cmdline.txt,把默认串口用作打印启动终端删掉 打开文件sudo vi /boot/cmdline.txt 删掉console=seria10,115200
-
打开并初始化串口
int serialOpen(char *device, int baud) //成功文件描述符,-1失败 //串口地址,设备目录,/dev/ttyAMA0 //参数2:波特率
-
关闭串口
void serialClose(int fd) //文件描述符,关闭的串口
-
发送一个字节数据,一个字符
void serialPutchar(int fd, unsigned char c) //fd,发送的字符
-
发送字符串
void serialPuts(int fd,char*s)
-
发送格式化数据,printf
void serialPrintf(int fd,char *message,...)
-
获取串口缓冲区字节数
int serialDataAvail(int fd) //缓冲区字节数,可读取的字节数,-1错误
-
读取一个字节数据
int serialGetchar(int fd)
-
清空缓冲区所有数据
void serialFlush(int fd)
-
Linux标准IO库函数,头文件#include<unistd.h>
*size_t write(int fd,const void*buf,size_t count) *size_t read(int fd,void *buf,size_t count)
-
3.1、超声波
-
引脚
- VCC(5v、15mA)
- Trig(触发)
- Echo(接收)
- GND
-
工作原理
- T发送,R接收
- Trig发送10us方波,Echo接收,计算时间
二、交叉编译工具链安装
-
下载树莓派工具链
-
解压文件(解压完成就代表完成安装)
命令:unzip tools-master.zip(压缩包文件名)
-
-
查看版本号
输入命令:./arm-linux-gnueabihf-gcc -v
-
配置环境变量
-
临时
- 显示echo PATH
- 添加 export PATH=环境变量到games: 或者 $PATH 加上pwd出来的路径
-
永久
-
修改工作目录下的.bashrc 隐藏文件,配置命令终端的
-
添加 export PATH=
-
source .bashrc 生效配置
- source 立即加载执行脚本文件里面的指令
- 终端程序启动脚本文件:~/.bashrc,在执行终端的时候都会执行该脚本,完成环境变量的配置工作
-
-
6.1、带WiringPi库的交叉笔译
-
把树莓派的库拿到虚拟机
/usr/lib/libwiringPi.so.2.50 //动态库,不用拿软连接 /usr/include/位置wiringPi.h //头文件
-
编译
arm-linux-guneabihf-gcc 文件名 -I 头文件位置 -L 动态库位置 -lwiringPi -o 生成的文件
-
制作了脚本a.sh
- gcc 文件名 -o 文件名
- 位置在/home/xw/pi/smp
三、软硬软件制作
-
软链接
ln -s libwiringPi.so.2.50 libwiringPi.so 命令 参数 被链接的文件 软连接的文件名
-
硬链接
ln libwiringPi.so.2.50 libwiringPi.so 没有参数-s