STM32 EXTI外部中断

举报
糖果罐子 发表于 2023/10/31 20:36:15 2023/10/31
【摘要】 > 本文代码使用 `HAL` 库。 @[TOC](文章目录)---# 前言---# 一、什么是外部中断?`外部中断` 是单片机实时地处理外部事件的一种内部机制。==当某种外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理;中断处理完毕后.又返回被中断的程序处==,继续执行下去.>**外部中断**   是指由 外部设备 发出的 中断请求 ,如键盘、鼠标、计...


> 本文代码使用 `HAL` 库。
 
@[TOC](文章目录)

---

# 前言

---


# 一、什么是外部中断?


`外部中断` 是单片机实时地处理外部事件的一种内部机制。==当某种外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理;中断处理完毕后.又返回被中断的程序处==,继续执行下去.

>**外部中断**   是指由 外部设备 发出的 中断请求 ,如键盘、鼠标、计时器、网络数据等。外部中断可以提高系统的效率,使系统能够有效地处理外部设备发出的中断请求,从而改善系统的性能。

# 二、外部中断中断线
外部中断共有 `20 `条中断线。

从下图可以看出,PA0、PB0...PG0 共用的 *EXTI0* 中断线,PA1、PB1...PG1共用的 *EXTI1* 中断线,也就是 编程里面的(如下图库文件),对应` 16` 个中断线。

112 个引脚被分成了16个 外部中断线,==不同组的同一个引脚号连接到同一个外部中断线上==。
![在这里插入图片描述](https://img-blog.csdnimg.cn/76120ccc99384fa7bfd92c4338389b22.png)

后面三个是专用的中断线:
- 外部中断线 *EXTI16* 连接到 **PVD** 输出.
- 外部中断线 *EXTI17* 连接到 **RTC** 警告事件.
- 外部中断线 *EXTI18* 连接到 **USB** 唤醒事件.
- 外部中断线 *EXTI19* 连接到 **ETH** 唤醒事件.(只有在内部有ETH模块的设备才会有这条线)


---

# 三、STM32F103的引脚复用
`GPIO 的中断是以组位一个单位的,同组间的外部中断同一时间只能使用一个`。比如说,PA0,PB0,PC0,PD0,PE0,PF0,PG0这些为1组,`如果我们使用PA0作为外部中断源,那么别的就不能够再使用了`,在此情况下,我们只能使用类似于PB1,PC2这种末端序号不同的外部中断源。

![在这里插入图片描述](https://img-blog.csdnimg.cn/66e7dfe030924bb087026614ab4a9c95.png)
>以 **AFIO_EXTICR1** 为例 :
>
>![在这里插入图片描述](https://img-blog.csdnimg.cn/0d5d51f1b6634bd1aee945acb193f25b.png)
>① AFIO_EXTICR1有32位,只有低16位可以设置值,高16位是保留位。
②它可以配置4跟外部中断线,每4位控制一根外部中断线.
③ 对于某一根外部中断线,同一时刻只能选择一组GPIO的引脚作为外部中断输入引脚.

# 四、相关函数:
1. 设置外部中断的优先级:

```c
HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority);
```
2. 使能外部中断

```c
HAL_NVIC_EnableIRQ(IRQn_Type IRQn);
```
3.  外部中断服务函数 

```c
void EXTI1_IRQHandler(void);
```
4. 回调函数

```c
HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
```

---

# 总结
下一篇文章 介绍 **OLED** 的使用。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。