第十七课--中断的使用/zh

来自Microduino Wikipedia
1183296105@qq.com讨论 | 贡献2015年1月16日 (五) 13:18的版本 实验原理图
跳转至: 导航搜索

目的

本讲讲解外部中断的使用,Microduino CoreSTM32上每一个I/O口都可以做外部中断源使用,可以设置为上升沿触犯、下降沿触发或者双边沿触发中断。结合前面按键的使用,本讲通过按键触发中断,来改变发光二极管的两灭状态。

设备

Microduino-CoreSTM32是采用 STM32F103CBT6芯片的ARM开发板,采用独特的Upin7接口,大小与一枚一元硬币差不多大,完全兼容Microduino其他扩展模块。

  • 其他硬件设备:
  • 面包板跳线 一盒
  • 面包板 一块
  • LED发光二极管 一个
  • 按键 一个
  • USB数据连接线 一根
  • 220欧姆、1K欧姆电阻 各一个

原理图

发光二极管通过上拉电阻与D13引脚相连,通过D13口的高低电平控制LED的两灭。引脚D2为外部中断引脚,这里为下降沿触发中断,按键在没有按下时,D2口一直为高电平,所以这里D2通过上拉电阻拉高,当按键按下时,D2口接地并触发中断。

程序

int pin = 13;                //D13 发光二极管控制引脚
volatile int state = HIGH;   // 必须被声明为 volatile
void setup()
{
  pinMode(pin, OUTPUT);
  pinMode(2,INPUT);
  attachInterrupt(2, blink, FALLING); //设置中断,当引脚2的输入引脚由
                                      //高变为低时执行blink函数
}
void loop()
{
  digitalWrite(pin, state);
  // detachInterrupt(2);        //取消D2引脚的中断设置
  // noInterrupts();            //屏蔽所有设置的中断
  // interrupts();              //重新恢复中断
}
void blink()         //反转state的状态
{
  if(state==HIGH)
  {state=LOW;}
  else
  {state=HIGH;}
}

程序说明:

  • void attachInterrupt(uint8 pin, voidFuncPtr handler, ExtIntTriggerMode mode)
  • 参数:pin为引脚号。
  • handler为中断发生时,用于处理中断的函数。
  • mode为中断模式。中断模式有3种:“RASING”、“FALLING”、“CHANGE”。当设定为“RASING”时,会在指定引脚输入电压从LOW变为HIGH的上升沿触发中断;当设定为“FALLING”时,会在指定引脚输入电压从HIGH变为LOW的下降沿会触发中断;当设定为“CHANGE”时,只要出现上升沿或下降沿都会触发中断。

中断处理函数是不能接受参数的,所以只能通过全局变量或静态变量等方式来与中断处理函数通信。

调试

  • 把代码部分复制到Maple IDE编译。
  • 连接好电路图。
  • 点击“upload”下载程序。
  • 按下按键,观察实现现象。

结果

初始状态为发光二级管亮,当按键按下发光二级管熄灭,再次按下按键时发光二极管点亮,如此反复。大家可以发挥想象制作更有趣的东西,强化对中断函数attachInterrupt、detachInterrupt、noInterrupts以及interrupts的理解与应用。

视频