1. 补充知识:
中断:中断是单片机最重要最基本的功能之一,是为应对突发事件而设计(事件分为外部和内部,外部比如按键,内部比如定时时间到了),几乎任何单片机不管多么便宜都有中断。
中断的准确定义:
->CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);
->CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);
-> 待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。
举个例子:
比如现在诸位正在听我讲什么是中断,突然快递打电话快递到了门口来取,你就会停下听我讲解先去取快递,接到快递员电话这就是一个“中断发生”的过程(准确点叫“中断请求”),这个中断就属于“外部中断”,你回答“好的”然后下楼去“取快递”这分别叫做“中断响应”和“中断服务”,这个“取快递”的过程就叫“中断服务”,在单片机中就是一段你写好的“代码”,你取完快递再回来继续听我讲什么是中断,这个过程就叫“中断返回”,在单片机中,中断返回后是会回到中断发生时的地方执行原来未完成的代码,就相当于我会等你回来再接着往下继续讲。更复杂一点,在你去取快递的路上突然觉得需要去下洗手间,这个“觉得需要去洗手间”也是一个中断,而且你感觉必须立刻去,并决定先去洗手间再去取快递,那么这个“去洗手间”的中断就可以看做一个“内部中断”(由你体内信号产生),而且此时这个“去洗手间”的中断在你(你就是MCU)看来比“取快递”的中断优先级要高,等你从洗手间出来就会接着取“取快递”,这里就是一次中断返回了,“取快递”回来继续“听讲解”又是一次中断返回。
2. 外部中断
外部中断常用的就是来自IO引脚的中断,这里以nucleo板子上的蓝色用户按键为例讲解。按键的原理就是高低电平的切换,比如“按键按下后IO引脚电平会变为低电平,松开变回高电平”(具体要看接法)。
打开定时器2内部时钟
上传图片太麻烦了,十几张图片,我就不传了,所有过程均有截图,截图按顺序标号,工程文件见附件Demo4:
第4讲Demo截图.rar
3. 内部中断
内部中断比较多,所有外设比如:USART、TIMER、I2C、ADC等都有至少一个内部中断源。
现在以定时器简单定时为例,使用定时器溢出中断,在中断服务函数中翻转PA5的引脚电平。
详细过程见截图和工程文件:
4. 练习
1) 使用按键中断实现“每按下一次按键,串口会输出“Hello World! =x”,x在每次按键被按下后会增加1.
2) 使用按键中断实现板载改变LED闪烁频率,按键按下一次,LED闪烁频率切换一次,频率从1HZ、20HZ、50HZ之间循环切换。
3) 使用按键中断和定时器PWM功能实现改变LED亮度,按键每按下一次,LED亮度改变一次。
Demo4.rar