第十七课--中断的使用/zh
目的
本讲讲解外部中断的使用,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的理解与应用。