该文章是学习了STM32后所写,是对STM32的小小的理解。在文中若有错误指出请指正,不胜感激。
STM32有最多68个可屏蔽的中断通道,有16个可编程的优先级。对于STM32F103ZE芯片,其内部包含了19个边沿检测器用来产生中断或者事件请求。对于外部中断只用了16个外部触发输入线。每一个外部输入线都能够被独立的屏蔽,pending register的寄存器能够保存输入线的状态,这个寄存器不能通过硬件自动清零,必须使用软件来清零;
外部中断的内部连接图如下:
触发信号通过输入线进入检测器,检测器的功能是可以设置的,就是通过上边两个边沿检测器即上升沿出发选择寄存器和下降沿出发选择寄存器。从图中就可以看出外部中断/事件触发方式有三种即上升沿触发、下降沿触发、上升沿和下降沿触发。在上升沿触发选择寄存器和下降沿触发选择寄存器中只有低20位有效,每一位各对应一个输入线。
在内部原理图当中我们看到有一个两输入或门电路,输入信号可以来自边沿检测器输出,也可以来自软件中断/事件寄存器。所以对于STM32要产生中断或者是事件有可能来自软件中断/事件触发寄存器或者外部输入信号线。通过改变软件中断/事件触发寄存器的值也是可以向内核请求中断或者事件,但是使用向软件中断/事件触发寄存器写1产生中断的前提是Penging request 寄存器中的相应的位必须是0(向Penging request 寄存器写1来清零相应的位)。
在Pluse generator的右面也有一个与门电路,与门电路的输出是用来产生事件的。通过内部图可以看出若用产生事件必须使与门的两个输入线为真,即事件屏蔽寄存器的相应位使能和用软件或者是硬件请求。所以呀,中断或者事件的产生与否与会相互的影响,对于同一个输入通道可以设置为同时产生中断或者事件。对于控制中断或者事件是否使能的寄存器分别是中断屏蔽寄存器和事件屏蔽寄存器。
设置了上面的寄存器对于产生中断还是不够的,你还需要开启引脚第二功能时钟,对于AFIO时钟如何开启请参考STM32手册RCC部分。设置需要产生中断的引脚为输入模式(可以为上拉输入,下拉输入,悬浮输入等!)。每一个中断输入线可以对应几个引脚,例如PA0、PB0......PG0都能够产生外部中0,但是每次只能由一个来产生中断,那么要让哪一个引脚连接到中断输入线上则通过外部中断配置寄存器了。外部配置寄存器有4个,每个寄存器对应可以配置4个输入线通道,正好16个。AFIO_EXTICR1的寄存器位图如下:
每一个通道对应4位,可以对应于GPIO的端口。
在程序中使用中断,不免会有中断优先级,STM32将中断优先级分为两组,即抢占优先级和响应优先级。具体的如何分参考有关手册,
外不中断的编写步骤:
l 确定抢占优先级和响应优先级如何分组,对于整个芯片的只能使用其中的一组
l 设置引脚为输入模式,最好为悬浮输入模式。
l 将某一个端口映射到触发输入线
l 设置该外部中断通道的触发模式
l 使能中断,设置改中断的优先级
l 打开引脚第二功能时钟
备注:对于相应的端口时钟不需要打开
关键字:stm32 外部中断
引用地址:
STM32外部中断总结
推荐阅读最新更新时间:2024-03-16 15:25
意法半导体推出STM32数控电源微控制器
让云端应用设计变得更节能环保,STM32F334集成高分辨率定时器等先进功能,为数字功率转换应用带来高能效。
中国,2014年8月6日 ——横跨多重电子应用领域、全球领先的半导体供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)推出最新的数控电源微控制器(STM32F334),为推动数字经济增长的云计算技术进一步提高能效。
今天的数字基础设施耗电量巨大。在全球大约286,000千兆瓦时(GWh) 的年用电量中,仅数字中心一种产业就占据约1.3%。根据Uptime Institute机构的能源利用率(PUE, Power Usage Effective
[电源管理]
STM32学习笔记:FSMC详述
FSMC(Flexible Static Memory Controller,可变静态存储控制器)是STM32系列采用一种新型的 存储器 扩展技术。在外部存储器扩展方面具有独特的优势,可根据系统的应用需要,方便地进行不同类型大容量 静态存储器 的扩展。 使用FSMC控制器后,可以把FSMC提供的FSMC_A 作为地址线,而把FSMC提供的FSMC_D 作为数据总线。 (1)当存储数据设为8位时,(FSMC_NANDInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b) 地址各位对应FSMC_A ,数据位对应FSMC_D (2)当存储数据设为16位时,(FSM
[单片机]
在STM32上实现使用DMA+USART3传输数据
串口的配置的文档如下所示 出口3的头文件 #ifndef __USART3_H#define __USART3_H #include sys.h #define USART3_MAX_RECV_LEN 200 //×î´ó½ÓÊÕ»º´æ×Ö½ÚÊý#define USART3_MAX_SEND_LEN 200 //×î´ó·¢ËÍ»º´æ×Ö½ÚÊý#define USART3_RX_EN 1 //0,²»½ÓÊÕ;1,½ÓÊÕ.extern u8 USART3_RX_BUF ; //½ÓÊÕ»º³å,×î´óUSART2_MAX_RECV_LEN×Ö½
[单片机]
从STM32峰会看MCU如何引领智能生活
2019年4月26至27日,一年一度的意法半导体STM32峰会如期举行,本次峰会以 “聚智慧,创未来” 为主题,聚焦人工智能与计算、工业与安全、云技术与连接三大技术趋势。 STM32峰会至今已举办了四届,该展会现今已成为单片机和嵌入式领域最具影响力的年度技术展会。有数千名开发者和合作伙伴来到会议现场,感受到了ST及其合作伙伴所展示的前沿的技术和创新,同时也可参加数项由ST和合作伙伴组织的技术论坛,以及STM32粉丝节。 与其他技术研讨会单纯的讲解技术推荐产品不同,STM32峰会展示了大量公司自行开发,或者第三方合作伙伴开发的产品,从而激发工程师更多创意灵感,也让开发者可以和ST技术人员进行更深入的面对面交流。 在开
[单片机]
stm32 起步 gpio操作
在工程中增加gpio lib.h和stm32头文件,如下: #include “stm32f10x.h” // Device header #include “stm32f10x_gpio.h” 调用lib配置gpio工作方式,先开启时钟,选GPIO,设置GPIO mode,gpio speed,主要看GPIO_InitTypeDef 结构体,芯片不同结构体不同,开始不清楚具体使用可以参考系统自带的example code,my setting如下: void GPIO_Initmain(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Configure all
[单片机]
STM32 PWM实现精确输出脉冲数控制电机
精确输出脉冲数控制电机,使用stm32单片机的pwm功能实现,精确控制脉冲个数 单片机源程序如下: #include stm32f10x_lib.h #include sys.h #include usart.h #include delay.h #include led.h #include exti.h #include key.h #define MOTOR_DIR PBout(11)// PB11 #define MOTOR_EN PEout(15)// PE15 u16 i; u16 fre; u16 TIM5CH1_CAPTURE_VAL; //输入捕获值 u1
[单片机]
基于STM32的传感器接口模块的设计
摘要:基于STM32实现了电流型、电压型以及数字IO型传感器接口模块;进行了接口模块的软件设计,说明了详细的固件代码设计。除传统串口外,提供以太网接口,嵌入UDP协议,提供后期开发的便利接口。 关键词:信号接口;传感器接口模块;UDP协议 0 引言 物联网将会是未来很长一段时间内IT产业的发展趋势,一个完整的物联网系统的构成或产业链的划分,目前业界比较统一的观点基本都认为应该包括三个层面:末端设备或子系统、通信连接系统、以及管理和应用系统。即Device-设备、Connect-连接和Manage-管理。由于数字整合的需求日益增长,对作为感知层核心组成元素的传感器数据融合提出了更高要求。如何将传感器连入网络成为一个尤其重要的问题
[工业控制]