- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Stm32外部中断
Note_Stm32 外部中断
STM32 外部中断管理
STM32 的EXTI 控制器支持19 个外部中断/ 事件请求。每个中断设有状态位,每个中断/ 事件都有独立的触发和屏蔽设置。
STM32 的19 个外部中断为:
a.线0~15 :对应外部IO 口的输入中断。
b.线16 :连接到PVD 输出。
c.线17 :连接到RTC 闹钟事件。
d.线18 :连接到USB 唤醒事件。
1. EXTI 控制器的结构体
typedef struct
{
vu32 IMR;
vu32 EMR;
vu32 RTSR;
vu32 FTSR;
vu32 SWIER;
vu32 PR;
} EXTI_TypeDef;
IMR :中断屏蔽寄存器
这是一个 32 寄存器。但是只有前 19 位有效。当位 x 设置为 1 时,则开启这个线上的中断,否则关闭该线上的中断。
EMR :事件屏蔽寄存器
同IMR ,只是该寄存器是针对事件的屏蔽和开启。
RTSR :上升沿触发选择寄存器
该寄存器同IMR ,也是一个32 为的寄存器,只有前 19 位有效。位 x 对应线x 上的上升沿触发,如果设置为 1 ,则
是允许上升沿触发中断/ 事件。否则,丌允许。
FTSR :下降沿触发选择寄存器
同 PTSR ,丌过这个寄存器是设置下降沿的。下降沿和上升沿可以被同时设置,这样就变成了任意电平触发了。
SWIER :软件中断事件寄存器
通过向该寄存器的位x 写入 1 ,在未设置IMR 和 EMR 的时候,将设置 PR 中相应位挂起。如果设置了IMR 和 EMR
时将产生一次中断。被设置的SWIER 位,将会在 PR 中的对应位清除后清除。
PR :挂起寄存器
当外部中断线上发生了选择的边沿事件,该寄存器的对应位会被置为1 。0 表示对应线上没有发生触发请求。通过向该
寄存器的对应位写入 1 可以清除该位。在中断服务函数里面经常会要向该寄存器的对应位写 1 来清除中断请求。
2. EXTICR 在AFIO 中结构体定义
通过以上配置就可以正常设置外部中断了,但是当配置IO 中断时,由于外部中断线0-15 只列出了IO 口,没有说明是哪一个
PORT ,因此还需要一个寄存器来配置是哪一个 PORT 的IO 口的中断 ,也就是IO 复用里的外部中断配置寄存器 EXTICR,这样
每一个IO 口就都可以配置成中断了。 EXTICR 在AFIO 的结构体定义如下:
typedef struct
{
vu32 EVCR;
vu32 MAPR;
1 / 4
Note_Stm32 外部中断
vu32 EXTICR[4];
} AFIO_TypeDef;
EXTICR 寄存器组,总共有4 个,因为编译器的寄存器组都是从0 开始编号的,所以 EXTICR[0]~ EXTICR[3] ,对应《STM32
参考手册》里的 EXTICR1~ EXTICR 4。每个 EXTICR 只用了其低 16 位。EXTICR[0] 的分配如下:
比如如我要设置GPIOB.1 映射到1 ,则只要设置EXTICR[0] 的bit[7:4]为0001 即可。默认都是0000 即映射到 GPIOA。从
图中可以看出,EXTICR[0] 只管了GPIO 的0~3 端口,相应的其他端口由 EXTICR[1~3] 管理。
3. 外部中断配置函数
// 外部中断配置函数
// 只针对GPIOA~G;丌包括 PVD ,RTC 和 USB 唤醒这三个
// 参数:GPIOx:0~6 ,代表GPIOA~G;BITx: 需要使能的位;TRIM:触发模式,1 ,下升沿;2 ,上降沿;3 ,任意电平触发
// 该函数一次只能配置 1 个IO 口,多个IO 口,需多次调用
// 该函数会自动开启对应中断,以及屏蔽线
void Ex_NVIC_Config(u8 GPIOx ,u
文档评论(0)