YIE002开发探索03-外部中断

本文详细介绍了STM32F103C8T6的外部中断配置,包括EXTI控制器、中断管理与优先级,并通过CubeMX图形配置和中断服务程序编写,实现按键控制功能。重点讲解了中断线配置、中断分组及中断服务函数的编写步骤。

(请保留-> 作者: 罗冰 https://blog.youkuaiyun.com/luobing4365)
(代码仓库地址:https://gitee.com/luobing4365/yie002-explorer
具体参考博客:YIE002开发探索-Gitee代码仓库说明)



上一篇中,实现了按键的控制功能。本篇准备使用外部中断的方式,来实现对按键的控制。

1 STM32的外部中断

在跑马灯的实验中,简要的介绍过GPIO的设置。对于本篇来说,使用GPIO作为外部输入中断,所需要关注的知识点有两块:
1) 如何配置外部中断,以及与之相关的中断程序的编写;
2) 中断管理分组以及中断的优先级。

1.1 外部中断/事件控制器(EXTI)

STM32的每个IO都可以作为外部中断的中断输入口。STM32F103C8T6有19个能产生事件/中断请求的边沿检测器,每个输入线可以独立配置成输入类型和对应的触发事件(上升沿、下降沿或双边沿触发)。

这19个外部中断为:
线 0~15:对应外部 IO 口的输入中断。
线 16:连接到 PVD 输出。
线 17:连接到 RTC 闹钟事件。
线 18:连接到 USB 唤醒事件。

也就是说,供IO口使用的中断线只有16个。而STM32的IO口数目是超过16个的,因此,必然产生共用的问题。

在设计上,STM32的管脚GPIOx.0GPIOx.15(x=A/B/C/D/E/F/G)分别对应中断线015,也即每个中断线最多对应7个IO口。比如,线1对应GPIOA.1、GPIOB.1、GPIOC.1…GPIOG.1。中断线每次只能连接到1个IO口上,在平常编程中,需要通过配置决定中断线连接到哪个GPIO上。

如图1,给出了GPIO与中断线的映射关系图。
外部中断通用I/O映像
图1 外部中断通用I/O映像

当然,由于我们使用Cube MX编程,这些配置工作,通过图形配置以及自动生成代码,就可以完成了。对于中断你配置的细节,可以参考相应的文档(RM0008)。

另外一个需要注意的问题是,STM32的IO外部中断函数只有6个(在启动文件startup_stm32f103xb.s中可以看到)。

EXPORT EXTI0_IRQHandler
EXPORT EXTI1_IRQHandler
EXPORT EXTI2_IRQHandler
EXPORT EXTI3_IRQHandler
EXPORT EXTI4_IRQHandler
EXPORT EXTI9_5_IRQHandler
EXPORT EXTI15_10_IRQHandler

从函数字面上也可以看出,中断线0-4分别对应一个中断函数;中断线5-9共用中断函数EXPORT EXTI9_5_IRQHandler;中断线10-15共用中断函数EXPORT EXTI15_10_IRQHandler。因此,对于共用函数的中断,在中断函数中还需要分别判断是哪个引脚引发的中断,然后再进行相应的动作。

1.2 中断管理和优先级

ARM Cortex-M3内核支持256个中断,包括16个内核中断和240个外部中断。STM32只是使用了其中一部分,它有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。

对于STM32F103系列的单片机,又只有60个可屏蔽中断。中断的控制,在单片机内部提供了ICER(中断除能寄存器组)、ISPR(中断挂起控制寄存器组)、ICPR(中断解挂控制寄存器组)、IABR(中断激活标志位寄存器组)和IP(中断优先级控制寄存器组)等来进行操作。

对于中断相关寄存器的操作,可以参考《Cortex M3权威指南》,我们在编程时,主要关注的是中断优先级的处理。

优先级的分组是通过AIRCR(应用程序中断及复位控制寄存器)实现的,其bit 8~10用来定义分组。如表1所示。

表1 AIRCR的中断分组设置表

AIRCR[10:8] 分配结果
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luobing4365

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值