树莓派学习:基于wiringPi库的常用函数介绍

目录

wiringPi库的函数

初始化函数

通用gpio控制函数

时间控制函数(时钟)

中断函数

pwm函数

软pwm函数

串口通信函数


wiringPi库的函数

  1. 初始化函数

    int wiringPiSetup (void)
    //返回:执行状态,-1表示失败
    //当使用这个函数初始化树莓派引脚时,程序使用的是wiringPi 引脚编号表。引脚的编号为 0~16
    
    int wiringPiSetupGpio (void) 
    //返回:执行状态,-1表示失败
    //当使用这个函数初始化树莓派引脚时,程序中使用的是BCM GPIO 引脚编号表
  2. 通用gpio控制函数

    引脚的模式设置
    void pinMode(int pin,int mode)
    //这会将引脚的模式设置为INPUT,OUTPUT,PWM_OUTPUT或GPIO_CLOCK。
    //请注意,只有wiringPi引脚1(BCM_GPIO 18)支持PWM输出,只有wiringPi引脚7(BCM_GPIO 4)支持CLOCK输出模式。
    //在Sys模式下,此功能无效。如果需要更改引脚模式,则可以在启动程序之前使用脚本中的gpio程序进行操作。
    
    输入引脚设置为上拉或下拉电阻模式
    void pullUpDnControl(int pin,int pud)
    //这将对一个设置IO模式为 INPUT 的输入引脚设置为上拉或下拉电阻模式。参数pud应该是从下面几个选项选一:PUD_OFF(不上拉/下拉),PUD_DOWN(下拉至接地)或PUD_UP(上拉至3.3v),在Raspberry Pi上,内部上拉/下拉电阻的阻值约为50KΩ。
    //处于Sys模式时,此功能对Raspberry Pi的GPIO引脚无效。如果您需要激活上拉/下拉,则可以在启动程序之前使用脚本中的gpio程序来执行此操作。
    
    输出一个io的高低电平
    void digitalWrite(int pin,int value)
    //将值HIGH或LOW(高电平1或低电平0)写入必须预先设置为输出的给定引脚。
    //WiringPi 将任何非零数字视为HIGH,0是LOW的唯一表示。
    
    输出一组io的高低电平
    void digitalWriteByte(int value)
    //这将写入提供给前8个GPIO引脚的8位字节。
    //尽管仍然需要对GPIO硬件进行两次写操作,但这是一次将所有8位都设置为特定值的最快方法。
    
    获取io的高低电平
    int digitalRead(int pin)
    //该函数返回在给定引脚上读取的值。根据引脚上的逻辑电平,它将为高电平或低电平(1或0)。
    
    模拟量输入
    AnalogRead(int pin)
    //树莓派的引脚本身是不支持AD转换的,也就是不能使用模拟量的API,
    //需要增加另外的模块。
    
    模拟量输出
    AnalogWrite(int pin,int value)
    //树莓派的引脚本身是不支持AD转换的,也就是不能使用模拟量的API。
    //需要增加另外的模块。
  3. 时间控制函数(时钟)

    返回从初始化以来过了多少ms
    unsigned int millis(void) 
    //这将返回一个值,该值表示从调用wiringPiSetup函数(或wiringPiSetupGpio函数)到当前时间所经过的毫秒数
    //返回一个无符号的32位整数
    //最大可记录大约49天的毫秒时长
    
    返回从初始化以来过了多少us
    unsigned int micros (void) 
    //这将返回一个值,该值表示从调用wiringPiSetup函数(或wiringPiSetupGpio函数)到当前时间所经过的微秒数
    //返回一个无符号的32位整数
    //最大可记录大约71分钟的微秒时长
    
    延时函数(单位为毫秒)
    void delay (unsigned int howLong) 
    //使系统暂停运行
    //由于Linux的多任务性质,所以实际上可能会延时更长时间
    //请注意,最大延迟的毫秒数为无符号的32位整数,大约49天
    
    延时函数(单位为微秒)
    void delayMicroseconds (unsigned int howLong) 
    //使系统暂停运行
    //由于Linux的多任务性质,所以实际上可能会延时更长时间
    //请注意,最大延迟的微秒数为无符号的32位整数,大约71分钟
    //需要提出的是,小于100微秒的延迟是通过持续轮询系统时间的硬编码循环计时的,超过100微秒的延迟是使用系统nanosleep()函数完成的。您可能需要考虑非常短的延时对系统整体性能的影响,尤其是在使用线程的情况下
  4. 中断函数

    设置某个io口发生中断,然后停止程序
    int waitForInterrupt (int pin,int timeOut) 
    //当被调用时,它将等待该引脚上发生中断事件,并且您的程序将被停止
    //timeOut参数以毫秒为单位给出。如果该参数为-1,则意味着永远等待
    //如果发生错误,返回值为-1;如果超时,则返回值为0;如果中断成功,则返回值为1
    //在调用waitForInterrupt之前,必须首先初始化GPIO引脚,目前唯一的方法是在脚本中使用gpio程序,或者从程序内部使用system()调用
    //例如,我们要等待GPIO0引脚的下降沿中断,我们需要在运行程序前执行命令:gpio edge 0 falling
    
    设置某个io口发生中断,然后调用回调函数
    int routingPiISR (int pin,int edgeType,void (* function) (void) ) 
    //注册的函数会在中断发生时执行
    //edgeType参数是INT_EDGE_FALLING(下降沿触发),INT_EDGE_RISING(上升沿触发),INT_EDGE_BOTH(双边沿触发)或INT_EDGE_SETUP。如果是INT_EDGE_SETUP,则不会进行引脚初始化,假设您已经在其他地方设置了引脚(例如,使用gpio程序)。但是如果您指定了其他类型之一,则该引脚将被导出并初始化为指定的触发方式。
    //function参数是中断处理函数的指针,它是一个无返回值,无参数的函数。当发生中断时需要树莓派执行的操作都写在这个函数里。
    //返回值:返回负数则代表定义失败
    //引脚号在当前模式下提供wiringPi,BCM_GPIO,物理或Sys模式。
    //此功能可以在任何模式下工作,并且不需要root特权。
    /该功能以高优先级运行(如果程序使用sudo或以root身份运行),并且与主程序同时执行。它具有对所有全局变量,打开文件句柄等的完全访问权限。
    //注意:当本次中断函数还未执行完毕时,这时候树莓派又触发了一个中断,那么这个后来的中断不会被丢弃,它仍然可以被执行。但是wiringPi最多可以跟踪并记录后来的仅仅1个中断,如果不止1个,则他们会被忽略,得不到执行
  5. pwm函数

    将值写入给定引脚的PWM寄存器
    void pwmWrite(int pin,int value)
    //树莓派只有一个板载PWM引脚,即引脚1(BMC_GPIO 18,物理层12),范围为0~1024。其他PWM器件可能具有其他PWM范围
    //在Sys模式下,此功能无法控制树莓派的板载PWM 
    
    设置PWM的运行模式
    pwmSetMode (int mode)
    //PWM发生器可以运行在2种模式下,通过以下参数指定
    //PWM_MODE_BAL :树莓派默认的PWM模式
    //PWM_MODE_MS :传统的PWM模式
    
    设置PWM发生器的数值范围
    pwmSetRange (unsigned int range)
    //(相当于STM32的定时器计数值),默认是0~1024
    //range:范围的最大值,0~range
    
    设置PWM时钟的除数
    pwmSetClock (int divisor)
    //这将设置PWM时钟的除数(相当于STM32的定时器预分频值)
    
  6. 软pwm函数

    软件pwm是占用cpu的,可以得到100Hz(10ms)的pwm,默认值为100
    需要包含头文件
    #include 
    
    使用一个指定的pin引脚创建一个模拟的PWM输出引脚
    int softPwmCreate (int pin, int initialValue, int pwmRange) 
    //pin:用来作为软件PWM输出的引脚
    //initalValue:引脚输出的初始值
    //pwmRange:PWM值的范围上限。建议使用100。对于pwmRange使用100 ,那么对于给定的引脚,该值可以是0(关闭)到100(完全打开)之间的任何值
    //返回:0表示成功
    
    更新引脚输出的PWM值
    void softPwmWrite (int pin, int value) 
    //pin:通过softPwmCreate创建的引脚
    //value:PWM引脚输出的值
  7. 串口通信函数

    打开并初始化串口
    int serialOpen (char *device, int baud)
    //device:串口的地址,在Linux中就是设备所在的目录
    //默认一般是"/dev/serial0",我的是这样的
    //baud:波特率
    //返回:正常返回文件描述符,否则返回-1失败
    
    关闭由给定文件描述符标识的设备
    void serialClose (int fd) 
    //fd:文件描述符
    
    发送一个字节的数据到串口
    void serialPutchar (int fd, unsigned char c) 
    //fd:文件描述符
    //c:要发送的数据
    
    发送一个字符串到串口
    void serialPuts (int fd, char *s) 
    //fd:文件描述符
    //s:发送的字符串,字符串要以'\0'结尾
    
    发送数据到串口
    void serialPrintf (int fd, char *message, …) 
    //像使用C语言中的printf一样
    //fd:文件描述符
    //message:格式化的字符串
    
    获取串口缓存中可用的字节数
    int serialDataAvail (int fd) 
    //fd:文件描述符
    //返回:串口缓存中已经接收的,可读取的字节数,-1代表错误
    
    从串口读取一个字节数据返回
    int serialGetchar (int fd) 
    //如果串口缓存中没有可用的数据,则会等待10秒,如果10后还有没,返回-1,所以,在读取前,做好通过serialDataAvail判断下
    //fd:文件描述符
    //返回:读取到的字符
    
    清空串口缓存
    void serialFlush (int fd) 
    //fd:文件描述符
    
    发送大数据
    *size_t write (int fd,const void * buf,size_t count) 
    //这个是Linux下的标准IO库函数,需要包含头文件#include 。当要发送到的数据量过大时wiringPi建议使用这个函数
    //fd:文件描述符
    //buf:需要发送的数据缓存数组
    //count:发送buf中的前count个字节数据
    //返回:实际写入的字符数,错误返回-1
    
    读取大数据
    *size_t read (int fd,void * buf ,size_t count) 
    //这个是Linux下的标准IO库函数,需要包含头文件#include 。当要接收的数据量过大时wiringPi建议使用这个函数
    //fd:文件描述符
    //buf:接受的数据缓存的数组
    //count:接收的字节数
    //返回:实际读取的字符数

你可能感兴趣的:(树莓派学习,学习)