搞过单片机的同学都知道,一般的单片机都有中断系统和外部中断。通过看树莓派的IC手册和WiringPi-Priority, Interrupts and Threads,可以发现树莓派也是具备的,且WiringPi还给我们通过了操作外部中断的函数。这里就介绍一下外部中断怎么使用。这个也是看WiringPi的文档和例子和自己多次试验测试之后发现的,官方文档和例子并不全面,这个不全面也导致我断断续续的搞了几天才搞出来。关于外部中断可以先看看百度百科的解释。

看WiringPi的文档

在WiringPi-Priority, Interrupts and Threads中介绍的Interrupts如下:


大致是这么几个意思:

  1. 树莓派的GPIO端口可以作为外部中断的输入引脚使用,支持边沿触发:
  • INT_EDGE_FALLING:下降沿
  • INT_EDGE_RISING:上升沿
  • INT_EDGE_BOTH: 可上升沿也可以下降沿
  • INT_EDGE_SETUP:保持原有的GPIO初始方式
  1. 2013年1月以后:反对使用WaisForInterrupate()函数-您应该使用下面较新的和更容易使用的wiringPiISR()函数;
  2. 例子可以查看isr.c
    通过isr.c和isr-osc.c例子我们可以发现int wiringPiISR (int pin, int edgeType, void (*function)(void)) 函数的使用和基本的外部中断编程思路,但是实际按照这个思路来编写是运行部成功的。下面是我测试好的电路和代码:

实验电路

实验代码

#include <wiringPi.h>
#include <stdio.h>  #define  LED_B 0   // 蓝色LED
#define  LED_G 2   // 绿色LED
#define  LED_R 3   // 红色LED
// 中断引脚
#define  btn_pin 1 // 按钮引脚
// 中断标志位 发生中断就置1
int flag = 0;
// 中断发生就会执行这个函数
void blank(void){flag = 1;
}
int main (void)
{wiringPiSetup();pinMode(LED_R, OUTPUT);pinMode(btn_pin, INPUT);pullUpDnControl (btn_pin, PUD_UP); // 这个很重要,把中断引脚设置成上拉输入,delay(100);wiringPiISR(btn_pin,INT_EDGE_FALLING,&blank);while(1){if(flag == 1){delay(20); // 延时 按键销抖if(flag == 1){flag = 0; // 重置标志位// LED 闪烁digitalWrite(LED_R,HIGH);delay(100);digitalWrite(LED_R,LOW);}}}return 0;
}

这里是使用的引脚是wPi编码的。

关于树莓派按键的操作可以先看看之前的博客:《(九)树莓派3B+ wiringPi库的使用–button按钮操作》,这里也介绍了为什么要按键销抖。

实验效果

(十八)树莓派3B+ wiringPi库的使用--外部中断相关推荐

  1. (二十四)树莓派3B+ Node.js驱动MPU6050

    在之前的博客中写过MPU6050模块. (十四)树莓派3B+ wiringPi库的使用–硬件IIC驱动MPU6050 之前使用的wiringPi和C语言写的,现在使用Node.js操作一下.关于电路连 ...

  2. 树莓派安装wiringPi库

    [好用]树莓派安装wiringPi库 只需要在终端输入: cd / tmp wget https://project_downloads.drogon.net/wiringpi-latest.deb ...

  3. 树莓派3B wiringPi 控制LED小灯

    材料准备 1.树莓派3B 2.LED小灯 3.220欧电阻一个(红红黑黑金) 4.面包板 5.杜邦线公母2条 线缆连接 代码 #include<wiringPi.h>//包含wiringP ...

  4. 树莓派开发—— wiringPi 库的使用

    一.wiringPi 的安装 参考文献: https://www.cnblogs.com/lulipro/p/5992172.html 进入 wiringPi的github (https://git. ...

  5. STM32F103标准库开发:外部中断(EXTI)实验

    STM32F103标准库开发----目录 STM32F103标准库开发----外部中断(EXTI)实验----程序源码 本文章技术信息均出自:STM32F103系列超详细参考手册-中文版 一.外部中断 ...

  6. 【Python学习系列十八】基于scikit-learn库逻辑回归训练模型(delta比赛代码3)

    为了得到一致假设而使假设变得过度严格称为过拟合.避免过拟合是分类器设计中的一个核心任务.通常采用增大数据量和测试样本集的方法对分类器性能进行评价.由于比赛中样本量是一致,目标测试集也是既定,所以我的思 ...

  7. 【iCore4 双核心板_ARM】例程三十八:DSP MATH库测试

    实验现象: 核心代码: int main(void) {/* USER CODE BEGIN 1 */int i,j;int res;float time[2];static int error_fl ...

  8. 【STM32+cubemx】0007 HAL库开发:外部中断,优先级和中断向量表

    这一节我们以外部中断为例子,讲讲中断的优先级和中断向量表的知识. 1)cubemx生成代码 首先还是在cubemx中生成代码,选择器件.设置SYS(调试接口).设置RCC(外部晶振时钟源). 然后设置 ...

  9. (二十三)树莓派3B+ 驱动蜂鸣器播放《茉莉花》

    在上一篇(十二)树莓派3B+ node-rpio库的使用–硬件PWM中已经介绍了树莓派的PWM的使用.这里实际就是在上一个的基础之上的一个应用.需要一些关于简谱和蜂鸣器的基本知识了. 1.简谱相关知识 ...

最新文章

  1. evnetlet hub
  2. 利用PCHunter结束各种进程
  3. 是什么动词_【术语攻略】什么是及物动词?
  4. 17天17个Python设计模式--目录
  5. boost::geometry::promote_integral用法的测试程序
  6. 二叉搜索树(BST树)的简单实现
  7. winform中与asp.net中的 TreeView节点处理对比
  8. 城市智能升级 算法、算力、数据、行业智慧不可缺
  9. java画一个小车_小轿车简笔画怎么画
  10. 会声会影2022语音转文字功能怎么用
  11. 栅栏密码加密/解密【传统型】在线工具
  12. canvas基础学习笔记
  13. python写excel,请大表哥喝杯茶
  14. CF1219G Harvester 题解
  15. Frenet坐标系与Cartesian坐标系互转(一):公式推导
  16. eulerOS 欧拉OS 审计修复日记
  17. Arduino Uno 火焰传感器实验
  18. 电力电子应用技术_迎接电能系统新时代挑战的电力电子技术
  19. 全方位掌握OpenStack技术知识
  20. EasyNVR实现海康、大华NVR硬盘录像机Web无插件播放方案(支持取特定时间段视频流)

热门文章

  1. gulp:提示:Error: watching html/*: watch task has to be a function (optionally generated by using gulp
  2. 安装群晖系统入门图文教程
  3. java.lang.IncompatibleClassChangeError 常见错误
  4. 身价过亿的妖媚子对小码农说串口能传送我的爱吗?
  5. 解决谷歌的but your computer or network may be sending automated queries
  6. 【香水】区分迪奥小姐Miss Dior中样式相似的几款香水
  7. 用计算机打根号怎么打,根号在电脑上怎么打出来啊?
  8. 物理内存占用多少正常
  9. Python处理CSV文件(二)
  10. 新手必需知道的查看Windows系统是否被重启的方法