关于STM32外部中断线(EXTI中断学习整理)
简述
STM32的每个IO都可以作为外部中断输入。
STM32的中断控制器支持19个外部中断/事件请求:
线0~15:对应外部IO口的输入中断。
线16:连接到PVD输出。
线17:连接到RTC闹钟事件。
线18:连接到USB唤醒事件。
每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。
从上面可以看出,STM32供IO使用的中断线只有16个,但是STM32F10x系列的IO口多达上百个,所以stm32把IO中断映射在16个外部中断/事件线上
对于每个中断线,我们可以设置相应的触发方式(上升沿触发,下降沿触发,边沿触发)以及使能。
是不是16个中断线就可以分配16个中断服务函数呢?
IO口外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数
在stm32汇编文件startup_stm32f10x_hd.s中可以找到中断入口函数
EXTI 寄存器
中断屏蔽寄存器(EXTI_IMR)
此寄存器需要置1打开中断**
事件屏蔽寄存器(EXTI_EMR)**
这一个寄存器在默认的情况下开放来自线的事件请求,不需要设置
上升沿触发选择寄存器(EXTI_RTSR)
下降沿触发选择寄存器(EXTI_FTSR)
软件中断事件寄存器(EXTI_SWIER)
此寄存器可以使软件置1强制中断
挂起寄存器(EXTI_PR)
Stm32的NVIC寄存器详情:
在MDK内,与NVIC相关的寄存器,MDK为其定义了如下的结构体:
typedef struct
{undefined
vu32 ISER[2]; //2个32位中断使能寄存器分别对应到60个可屏蔽中断
u32 RESERVED0[30];
vu32 ICER[2]; //2个32位中断除能寄存器分别对应到60个可屏蔽中断
u32 RSERVED1[30];
vu32 ISPR[2]; //2个32位中断挂起寄存器分别对应到60个可屏蔽中断,可挂起正在执行的中断
u32 RESERVED2[30];
vu32 ICPR[2]; //2个32位中断解挂寄存器分别对应到60个可屏蔽中断,可解除被挂起的中断
u32 RESERVED3[30];
vu32 IABR[2]; //2个32位中断激活标志寄存器,可读取该寄存器判断当前执行的中断是哪个,中断执行完硬件清零,只读
u32 RESERVED4[62];
vu32 IPR[15]; //15个32位中断优先级分组寄存器,每个中断分配8个bit,对应到415=60个中断
} NVIC_TypeDef;
IPR[15]
15个32位中断优先级分组寄存器,每个中断分配8个bit,对应到415=60个中断。但是并不是8个bit都被使用了,而是仅仅只用到了高四位,这样就可以得到5组16级的中断优先级。
高位的4个bit又分为抢占优先级和子优先级,抢占优先级在前,子优先级在后。两种类型优先级占用的位数又可以通过SCB->AIRCR寄存器的bit[10:8]来配置。
地址:
地址:
中断优先级设置步骤
1.设置AFIO复用功能的时钟打开
2.打开复用通道
21.系统运行后先设置中断优先级分组。调用函数:
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
整个系统执行过程中,只设置一次中断分组。
2.针对每个中断,设置对应的抢占优先级和响应优先级:
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
3. 如果需要挂起/解挂,查看中断当前激活状态,分别调用相关函数即可。
上一篇:怎么通过STM32Cube修改型号,所有配置保持不变
下一篇:Stm32的Flash模拟EEPROM与BOOT基本了解
推荐阅读最新更新时间:2024-11-11 12:06
推荐帖子
- 请大侠帮忙看看vxworks hung的问题
- 这是一个简单的任务while(1){_tv.tv_sec=0;_tv.tv_usec=time;/*Ifusing10000us,thenthesystemhangwillnotoccur.*/res=select(0,NULL,NULL,NULL,&_tv);if(res0&&errno!=EINTR&&errno!=0){printf(\"selec
- lyl19 实时操作系统RTOS
- 【DFRobot 云雀气象仪】学习笔记04(使用MQTT协议上传云雀气象仪数据到阿里云)
- ##9:使用MQTT协议上传云雀气象仪数据到阿里云###9.1:阿里云物联网平台使用1:登录云平台,登录网址如下:(https://iot.console.aliyun.com/product)2:创建产品,命名为云雀气象仪,界面如下图如下:!(https://boreyun.oss-cn-shanghai.aliyuncs.com/image-20231117094259824.png)!(https://boreyun.oss-cn-shanghai.aliyuncs.
- qzc0927 传感器
- 基于ZX-2型FPGA开发板的串口示波器(二)
- 串口发送与接收模块设计代码分析1.1Tx_Bps_GenTx_Bps_Gen为发送波特率生成模块,每当有Byte_En信号到来时,即开始产生发送一个完整字节的数据需要的完整波特率时钟信号。本设计,波特率支持9600bps到921600bps。例如,需要产生的波特率时钟为9600bps,即波特率时钟频率为9600Hz,周期为104.17us。生成9600Hz波特率时钟的核心思想
- 小梅哥 FPGA/CPLD
- uCOS-II在S3C2440上的移植
- 1)下载源代码http://www.armforum.cn下载最新的uCOS-II-V286版和MichaelAnburaj基于S3C2410的1.6.1移植版。根据代码用途的,建立app,s3c2440,ucosii三个目录,分别放置应用程序,平台移植文件和uCOS的源代码。如图:ARMM开发论坛字串42)新建ADS工程http://www.armforum.cn加入所有代码,修改ARM
- songbo 实时操作系统RTOS
- 二手瑞萨E10A仿真器HS0005KCU02H 出售
- 二手瑞萨E10A仿真器HS0005KCU02H出售qq644002830加QQ请注明E10a此内容由EEWORLD论坛网友bbfan原创,如需转载或用于商业用途需征得作者同意并注明出处二手瑞萨E10A仿真器HS0005KCU02H出售
- bbfan 瑞萨电子MCU
- CDMA射频前端低噪声放大器电路设计研究
- 文章归纳了射频前端低噪声放大器电路设计中的若干问题,逐一探讨了解决问题的方法。基于有关处理,结合CDMA2000基站中射频低噪声放大器电路的设计要求,完成了实际电路的设计。通过仿真,进一步分析了相关问题处理方法的有效性。CDMA射频前端低噪声放大器电路设计研究
- JasonYoo RF/无线
设计资源 培训 开发板 精华推荐
- 蓝牙和 MSP430 音频源参考设计
- 星际穿越tars机器人pcb1
- 使用 ROHM Semiconductor 的 BD45461 的参考设计
- CL330、3 通道、30mA 线性 LED 驱动器的典型应用,降低 CL330 功耗:跌落电阻器
- HV9931DB2v1,用于 HV9931 230VAC 输入、350mA/40V、14W 输出 LED 驱动器的演示板
- 使用 Richtek Technology Corporation 的 RT9740A 的参考设计
- 基于A6986I的具有双隔离输出的38V、5W同步等压转换器评估板
- 【ART-Pi】ART-Pi智能开关扩展板+677952A
- 【常熟理工学院】差分放大电路测试仪 yyp8186
- STEVAL-IDI005V1、SP1ML 868 MHz 无线传感器板,由纽扣电池供电