写在前面:
本节课中,将介绍按键的硬件原理,如何使用stm32的外部中断功能读取按键输入,如何使用软件消抖来消除按键输入产生的电压的抖动。此外,将再一次借助按键中断的例子帮助大家理解通过中断实现程序前后台的思想。你将会学会如何制造一个核爆按钮。
想象你正在专心玩原神,正在打深渊,突然门铃响了(FBI Open The Door!!!)。这时,你暂停游戏去开门,处理完门铃的事情后,再回来继续打深渊。这里,“玩原神”就是单片机正在执行的主要程序,“门铃响”就像是一个中断事件,“开门”就是中断处理程序,而“继续打深渊”则是中断处理完成后,单片机回到原来的任务。
在单片机中,中断是一种机制,它允许单片机暂时停止当前的工作,去处理一个重要的任务(中断事件),处理完后再回到原来的工作。中断的发生是由一些特定的事件触发的,比如按键按下、定时器到时间了、串口接收到数据等。
具体来说,当一个中断事件发生时,单片机会:
保存现场:记住当前正在做的事情和状态(按Esc呼出派蒙)。
跳转到中断处理程序:去处理这个突发的任务(去开门)。
处理完后恢复现场:处理完中断事件后,单片机会恢复到原来的状态,继续之前的工作(打深渊)。
这种机制让单片机可以及时响应各种突发事件,而不需要不停地检查这些事件是否发生,就像你可以通过门铃来判断是否有人来找你,而不是隔一段时间就去看看猫眼。通过使用中断,单片机可以更加高效地处理多任务,及时响应外部的变化。
想象你正在《原神》中探索提瓦特大陆。突然,你的手机响了两下,一个是你npy打来的电话,另一个是兄弟发来的消息。你必须决定先处理哪个任务。这时候,你会根据任务的重要性和紧急程度来决定优先顺序。你可能会先接你npy的电话,最后再回复兄弟的消息。这就是一种优先级的安排。
在单片机中,中断优先级的概念类似,它用于决定当多个中断同时发生时,单片机应该先处理哪一个。每个中断源都可以被赋予一个优先级,优先级高的中断会先被处理。
具体来说:
举个例子:
高优先级中断:处理紧急情况,比如系统故障或重要的传感器信号。
中等优先级中断:处理常规任务,比如按键输入或定时器溢出。
低优先级中断:处理次要任务,比如显示更新或状态监控。
中断优先级使得单片机能够有效管理多任务,确保最紧急和重要的任务能够及时得到处理,提高系统的响应速度和可靠性。通过合理分配中断优先级,开发者可以优化系统性能,确保关键任务不会被低优先级任务延误。
外部中断通常是GPIO的电平跳变引起的中断。在stm32中,每一个GPIO都可以作为外部中断的触发源,外部中断一共有16条线,对应着GPIO的0-15引脚,每一条外部中断都可以与任意一组的对应引脚相连,但不能重复使用。例如外部中断Line0可以和PA0,PB0,PC0等任意一条0号引脚相连,但如果已经和PA0相连,就不能同时和PB0,PC0其他引脚相连。