概念
中断(Interrupt)是计算机系统中一个重要的概念,它允许计算机的处理器(CPU)暂停当前正在执行的任务,去处理一个更高优先级的事件或任务,然后再返回到原来的任务继续执行。这种机制使得计算机能够高效地处理多个并发任务,以及快速响应外部事件。
类型
-
硬件中断:由硬件设备产生,比如键盘输入、鼠标移动、网络数据到达等。硬件中断通常分为可屏蔽中断(Maskable Interrupt,MI)和非屏蔽中断(Non-Maskable Interrupt,NMI)。
-
软件中断:由软件程序主动发起,通常用于系统调用或者异常处理。
-
异常:这是处理器在执行指令时遇到的问题,比如除以零、访问非法内存地址等,这些情况会触发异常处理。
-
系统调用:在操作系统环境中,应用程序通过系统调用请求内核提供的服务。
gpio限制
-
EXTI线路数量:
- 每个STM32系列支持的EXTI线路数量是有限的。例如,STM32F1系列有19条EXTI线路,而STM32F4系列有23条EXTI线路。
- 这些EXTI线路可以复用,连接到不同的GPIO引脚,但一旦一个EXTI线路被分配给一个特定的GPIO引脚,它就不能再分配给其他引脚。
STM32的每个EXTI线路都可以独立地连接到不同的GPIO引脚上。例如,EXTI线0可以连接到PA0、PB0、PC0等GPIO引脚中的任何一个。这种设计提供了很大的灵活性,允许开发者根据具体的应用需求来选择哪个GPIO引脚触发哪个EXTI线路。
然而,一旦一个EXTI线路被分配给一个特定的GPIO引脚,它就不能再分配给其他引脚。这意味着,如果你将EXTI线0配置为使用PA0引脚,那么在同一时刻,EXTI线0就不能再与PB0或PC0等引脚关联。每个EXTI线路在同一时间只能与一个GPIO引脚相关联。
STM32的中断可以来自多个来源:
- 内核中断:比如系统滴答定时器(SysTick)中断。
- 外部中断:通过外部中断/事件控制器(EXTI)管理,可以来自GPIO引脚的外部信号。
- 内部中断:由STM32内部外设(如ADC、USART、SPI等)产生的中断。
步骤:
- 配置中断源:根据需求配置对应的中断源,比如设置GPIO引脚为中断输入,或者配置ADC的转换完成中断。
- 配置NVIC:在STM32的固件库中,可以通过函数来配置NVIC,包括设置中断的优先级和使能中断。
- 编写中断服务例程:当中断发生时,STM32会跳转到对应的中断向量表中的地址去执行代码。你需要在这个地址定义一个中断服务例程来处理中断。
- 使能全局中断:在配置好中断之后,你需要在主程序中使能全局中断,使用
__enable_irq()
函数。