STM32复习笔记(五)外部中断

发布者:JoyfulHarmony最新更新时间:2019-06-27 来源: eefocus关键字:STM32  外部中断 手机看文章 扫描二维码
随时随地手机看文章

一、外部中断概述:

STM32的每个IO都可以作为外部中断输入。


STM32的中断控制器支持19个外部中断/事件请求:


线0~15:对应外部IO口的输入中断。


线16:连接到PVD输出。


线17:连接到RTC闹钟事件。


线18:连接到USB唤醒事件。


每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。


从上面可以看出,STM32供IO使用的中断线只有16个,但是STM32F10x系列的IO口多达上百个,STM32F103ZET6(112),


STM32F103RCT6(51),那么中断线怎么跟io口对应呢?

GPIOx.0映射到EXTI0


GPIOx.1映射到EXTI1



GPIOx.15映射到EXTI15


对于每个中断线,我们可以设置相应的触发方式(上升沿触发,下降沿触发,边沿触发)以及使能。


二、是不是16个中断线就可以分配16个中断服务函数呢?

IO口外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数


从表中可以看出,外部中断线5~9分配一个中断向量,共用一个服务函数外部中断线10~15分配一个中断向量,共用一个中断服务函数。


三、中断服务函数列表:

EXTI0_IRQHandler          


EXTI1_IRQHandler


EXTI2_IRQHandler          


EXTI3_IRQHandler          


EXTI4_IRQHandler          


EXTI9_5_IRQHandler        


EXTI15_10_IRQHandler      


四、外部中断常用库函数:

①void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);


   //设置IO口与中断线的映射关系


   exp:  GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);


②void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);


 //初始化中断线:触发方式等


③ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);


//判断中断线中断状态,是否发生


④void EXTI_ClearITPendingBit(uint32_t EXTI_Line);


//清除中断线上的中断标志位


五、EXTI_Init函数:

void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);


typedef struct

{

  uint32_t EXTI_Line;   //指定要配置的中断线           

  EXTIMode_TypeDef EXTI_Mode;   //模式:事件 OR中断

  EXTITrigger_TypeDef EXTI_Trigger;//触发方式:上升沿/下降沿/双沿触发

  FunctionalState EXTI_LineCmd;  //使能 OR失能

}

 EXTI_InitTypeDef;

 EXTI_InitStructure.EXTI_Line=EXTI_Line2;  

 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

 EXTI_InitStructure.EXTI_LineCmd = ENABLE;

 EXTI_Init(&EXTI_InitStructure);

六、外部中断的一般配置步骤:

①初始化IO口为输入。


       GPIO_Init();


②   开启IO口复用时钟。


       RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);


③设置IO口与中断线的映射关系。


        void GPIO_EXTILineConfig();


④初始化线上中断,设置触发条件等。


       EXTI_Init();


⑤配置中断分组(NVIC),并使能中断。


       NVIC_Init();


⑥   编写中断服务函数。


      EXTIx_IRQHandler();


⑦清除中断标志位


      EXTI_ClearITPendingBit();



关键字:STM32  外部中断 引用地址:STM32复习笔记(五)外部中断

上一篇:STM32复习笔记(四)串口通信
下一篇:STM32复习笔记(七)定时器&定时器中断

推荐阅读最新更新时间:2024-11-02 11:50

AnalogML供应商Aspinity加入ST合作伙伴计划
Aspinity加入意法半导体(ST)合作伙伴计划,为始终在线的边缘处理提供完整的AnalogML解决方案。模拟机器学习先驱与高性能微控制器的领导者合作,以延长IoT设备的电池寿命。 Aspinity已加入ST合作伙伴计划,加速将Aspinity的超低功耗模拟机器学习(analog ML)内核与ST的高性能微控制器(MCU)集成到始终小型,功耗受限的环境中。 Aspinity的产品基于其接近零功率的AnalogML内核,该内核使基于事件的系统唤醒完全在信号链前端的模拟域内发生,从而使大多数系统保持睡眠状态,直到检测到事件发生为止。Aspinity与ST之间的合作使客户能够迅速采用AnalogML,以更有效地弥合模拟物理世界
[单片机]
STM32 GPIO初始化步骤
1、使能GPIO时钟:RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); 参数说明: 例如: 2、设置GPIO参数:输出OR输入,工作模式,端口翻转速率; 3、调用初始化函数:GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); 参数说明: 例如: 4、操作GPIO。
[单片机]
<font color='red'>STM32</font> GPIO初始化步骤
STM32 结构体定义地址对齐
在MDK下定义一个结构体,对一段报文,强制转换为结构体类型,实际运行地址错位。 Heartbeat_Message *tmp_Heartbeat; tmp_Heartbeat=(Heartbeat_Message *) &sen_dma_tmpbuf ; typedef struct { uint16_t Sync; uint16_t Packet_Length; uint8_t ID ; uint8_t Frame_Type; uint8_t Packet_Type; uint32_t time; uint16_t CRC16; }Heartbeat_Message;
[单片机]
STM32PWM实现呼吸灯-库函数
最让我头大的是初始化函数的各个参数的设置,在这里给出pwm_init的模板 pwm.h: #include pwm.h void TIM14_PWM_init(u32 arr, u32 psc) //arr为定时器的自动装载值(决定周期),cnt达到arr时io要置0,psc为预分频系数 { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_AP
[单片机]
十五年创新路:意法半导体举办首届STM32中国线上技术周
2022年是意法半导体STM32家族问世15周年。在全球疫情阻止人们面对面沟通交流的当下,7月18-22日,意法半导体举办首届暨2022年STM32中国线上技术周,庆祝与生态合作伙伴共同创新的十五载。 在这个为期五天的线上活动中,意法半导体总裁兼首席执行官Jean-Marc Chery、意法半导体执行副总裁、通用微控制器子产品部总经理Ricardo De Sa Earp、意法半导体执行副总裁、中国区市场营销负责人曹志平(Henry Cao) 将分别作主题演讲。同时,意法半导体和合作伙伴带来30多场在线研讨会、100多个展品视频演示。在在线研讨会后设有技术问答环节,参观者将有机会与我们的专家和工程师进行现场互动。 下面,
[单片机]
十五年创新路:意法半导体举办首届<font color='red'>STM32</font>中国线上技术周
stm32 can不稳定的解决方法
问题出现的背景 需要写一个新的电机的驱动,使用can通讯,驱动比较简单,很快就写好了。自己单独测试一个电机的时候没有问题,正反转测什么的都很正常。本以为事情会很顺利,但是在测两个电机的时候,却发现很严重的问题,经常左电机不装或者是右电机不转。 问题的解决步骤 发送: 3 个发送邮箱 发送报文的优先级特性可软件配置 记录发送 SOF 时刻的时间戳 接收: 3 级深度的2个接收 FIFO 14 个位宽可变的过滤器组 - 由整个 CAN 共享 标识符列表 FIFO 溢出处理方式可配置 记录接收 SOF 时刻的时间戳
[单片机]
STM32 查看 FLASH 和 RAM 使用情况
1、KEIL MDK 编译后的信息 Code=86496 RO-data=9064 RW-data=1452 ZI-data=16116 1)Code 是代码占用的空间; 2)RO-data 是 Read Only 只读常量的大小,如const型; 3)RW-data 是(Read Write)初始化了的可读写变量的大小; 4)ZI-data 是(Zero Initialize) 没有初始化的可读写变量的大小,ZI-data不会被算做代码里因为不会被初始化。 1.1、Flash 占用 在烧写的时候是 FLASH 中的被占用的空间为: Code+RO Data+RW Data 1.2、RAM 内存
[单片机]
STM32外部中断
1、外部中断/事件线映射 从上表可知,STM32F10x 的 EXTI 供外部 IO 口使用的中断线有 16 根,但是我们使用的 STM32F103 芯片却远远不止 16 个 IO 口,那么 STM32F103 芯片怎么解决这个问题的呢?因为 STM32F103 芯片每个 GPIO 端口均有 16 个管脚,因此把每个 端 口 的 16 个 IO 对 应 那 16 根 中 断 线 EXTI0-EXTI15 。比 如 :GPIOx.0-GPIOx.15(x=A,B,C,D,E,F,G)分别对应中断线 EXTI0-EXTI15,这样一来每个中断线就对应了最多 7 个 IO 口,比如:GPIOA.0、GPIOB.0、GPIOC.0、
[单片机]
<font color='red'>STM32</font>的<font color='red'>外部中断</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved