江科大STM32学习笔记——EXTI和NVIC

STM32中断

  • 68个可屏蔽中断通道,包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多个外设。
  • 使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级。

 就是NVIC为中断管理器,覆盖主要外设和系统事件,分配中断优先级。而EXIT则是管理外部中断的。

  • 抢占优先级(先占pre-emption priority):抢占优先级高的中断来时,暂停当前执行程序,转到中断程序执行。
  • 响应优先级(从占subpriority):执行完再转到中断程序。

NVIC

一个外设有多条中断通道,而NVIC只有一个输出口。

对于每个中断有16个优先级,而这16个又可以设置为抢占优先级和响应优先级。

EXTI

  • EXTI可以检测GPIO口的电平变化从而向NVIC提出中断申请。
  • 支持上升沿、下降沿、双边沿和软件触发。
  • 支持所有GPIO口。但相同Pin口不能同时触发中断,如PA1和PB1不能,但PA1和PA2可。
  • 提供16个GPIO_Pin作为外部中断通道,同时还支持一些其他外部事件,如PVD输出、RTC闹钟、USB唤醒和以太网唤醒等。

AFIO只选择一个Pin口,因此不能选择相同的Pin口。

GPIO先经过AFIO的选择,再进入到EXTI,然后再通过NVIC中断控制。

外部中断配置代码

1. 开启时钟。使用RCC开启时钟,因为这里选择GPIOA,而GPIOA和AFIO都是APB2外设的。

2. 配置GPIO口,输入模式。开启完GPIO时钟后,初始化。

3. 配置AFIO,选择输出连接到EXTI。使用GPIO_EXTILineConfig()函数来,配置AFIO数据选择器选择中断引脚。

4. 配置EXTI,选择边沿触发方式和触发响应方式。

EXTI库函数:

这里就使用初始化函数配置EXTI。

5. 配置NVIC,给中断配置合适优先级。

NVIC库函数

第一个为设置中断分组,第二个初始化,第三个设置中断向量表,第四个系统低功耗配置。(后两个用的不多)

要配置NVIC,先要指定一下分组,然后再初始化。

用PriorityGroupConfighan()确定抢占优先级和响应优先级的分配位数,这个自己决定。

数字小等级高,一个中断配置好抢占和响应的位数后,抢占优先级高的可以打断抢占优先级低的程序,当抢占优先级一样,响应优先级高的先执行。

注:中断优先级分组只需要在系统初始化阶段设置一次,设置好后不改变保证中断管理的一致性

然后是NVIC的初始化。

还是一样,创建结构体变量,给结构体成员赋值。可以转到定义查看参数是什么。

第一个选择中断通道,转到定义,跳转到stm32f10x.h文件查看要选择的中断通道。

根据自己的芯片选择相应的中断通道列表,这里用的是stm32103C8T6,选的是md。

展开找到我们选用的EXTI14,10-15都公用一个通道。结构体第一个参数指定完成,第二个中断通道使能ENABLE。

第三个和第四个是指定所选通道的优先级。三是抢占,四是响应。

优先级是在多个中断同时申请,产生拥挤时起作用。

配置完成后就可以开始写中断程序了,中断程序放在中断函数里。而中断函数的名字时固定的,每个中断通道有对应的中断函数名,可以在启动文件中查找。

 找到EXTI14对应的EXTI15_10_IRQHandler,然后编写程序。(中断函数都是无参无返回值,也不需要声明)

首先要进行中断标志位判断,确保是需要的中断源触发。

在最后也需要清除标志位,因为只要中断标志为1就会进入中断函数,如果不清除,就会一直在中断函数里。

  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值