STM32单片机外部中断使用方法,单片机如何快速响应外都信号?

单片机的程序执行正常来说是一条指令接着一条指令的,程序属于顺序执行。这样就会有一个弊端,如果整个循环的程序很长,需要执行的时间比较久时,这里举个例子,执行完成一次循环的程序需要2秒,如果外部来了一个信号,这个信号的持续时间只有20毫秒,如果这个时候仍然使用查询的方式来检查是否有外部信号就会可能遗漏。

所以说,单片机检测外部信号一般需要使用中断,使用中断的好处:

1、实时性强,有外部信号立马能响应;

2、不会出现遗漏信号导致没有检测到的情况。

有人说,要想单片机玩得好,中断必须用得好。不错,也确实如此,中断是单片机的精髓。

那么,STM32的外部中断该怎样使用呢?

首先,STM32的每一个引脚都是可以配置成为中断输入引脚的,STM32F1系列支持16个外部中断,每个中断设有独立的状态位、触发和屏蔽设置。也许你会奇怪,STM32引脚最少的单片机也不止16个引脚啊,为什么只有16个外部中断呢?

可以看到,每个中断线管着7个引脚,就拿中断线 0 来说:它对应了 GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、 GPIOE.0、GPIOF.0、GPIOG.0。中断线每次只能连接到 1 个 IO 口上,所以需要通过配置来决定对应的中断线配置到哪个 GPIO 。

单片机引脚的触发方式分为三种:上升沿触发,下降沿触发,上升下降沿触发。

程序的实现步骤:

1、配置GPIO,需要设置成中断的引脚设为输入;

2、开启AFIO时钟;

3、设置IO口的中断映射关系;

4、初始化中断,配置中断是上升沿还是下降沿及其他设置;

5、配置中断分组;

6、使能中断;

7、中断服务函数编写。

其他事项:

需要注意的是,中断线5到9是共用同一个中断服务函数EXTI9_5_IRQHandler

中断线10到15是共用同一个中断服务函数EXTI15_10_IRQHandler

在Keil中,如果你的中断服务函数写错了编译器并不会报错,但是中断是无论如何进不去了。

中断优先级共有16级,这些等级是由抢占优先级和子优先级组成;抢占式优先级和子优先级的数量由中断优先级分组决定,比如设置优先级分组为3,那么抢占优先级就有3个bit,子优先级有1个bit,3个bit可以设置抢占优先级为0~7,1bit可以设置子优先级为0~1;数字越小,优先级越高,抢占优先级和子优先级数量相乘为16级分组。具体的分组设置看图。

STM32单片机外部中断使用方法,单片机如何快速响应外都信号?

中断分组设置表

如果两个中断抢占优先级一样,哪个中断先发生就先执行哪个;抢占式优先级高的可以打断抢占式优先级低的,同级的抢占式优先级不能互相打断。

致芯科技拥有一批专业的科研人才,大量资金被运用到芯片解密、PCB抄板、高速PCB设计物料代采购、SMT/OEM/ODM代工代料、软硬件二次开发、样机制作等一条龙服务。因此有需要芯片解密的业务都可以找致芯科技前来合作。

举报
评论 0