0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32外部中断执行过程

冬至子 来源:硬件工程师的小世界 作者:TTYY 2023-04-24 17:43 次阅读

一、MCU中断程序执行过程

以MCU裸机程序框架为例,MCU 的主函数是个死循环:

主函数:

main(void)

{

While(1)

{

//主程序

}

}

如果没有中断或异常产生会一直在while(1)里执行主程序代码。当中断产生后,当前执行的任务会被打断,程序跳转到中断处理函数执行,执行完会返回之前的主程序断点处继续执行。

中断处理函数:

void IRQ_handler(void)

{

//中断处理程序

//清除中断标志,否则会不停的进入中断处理程序。

}

在中断处理函数中不要做复杂费时的事情,中断内做的事情尽可能少。

二、中断使用实例

STM32的IO都可以配置成外部中断,但不是同时都可以配成外部中断。需要遵循如下规则:

比如PA0设置成外部中断,PB0,PC0,PD0就不能配成外部中断。

比如PA1设置成外部中断,PB1,PC1,PD1就不能配成外部中断。

STM32的EXTI0-15中断线分配给IO使用。PA0的中断只能使用EXTI0的中断请求;PA1中断只能使用EXTI1的中断请求。

每个外部中断线可以独立的配置触发方式,包含上升沿,下降沿或者双边沿触发。每个中断可单独使能/屏蔽。

STM32的中断允许嵌套,抢占优先级高的可以打断抢占优先级低的中断执行。抢占优先级相同时,不能嵌套,不同响应优先级中断同时发生,优先级高的先执行。在程序设计时要根据具体情况分配好抢占优先级和响应优先级。

STM32的优先级分抢占和响应两种,具体选择哪种分组组合可以通过如下函数配置:

NVIC_PriorityGroupConfig()

优先级分组组合有5种:

第0组:所有4bit用于指定响应优先级;

第1组:最高1位用于指定抢占式优先级,后面3位用于指定响应优先级;

第2组:最高2位用于指定抢占式优先级,后面2位用于指定响应优先级;

第3组:最高3位用于指定抢占式优先级,后面1位用于指定响应优先级;

第4组:所有4位用于指定抢占式优先级。

以STM32为例,使用IO端口PB2的外部中断功能需要做如下初始化配置:

1 使能PB2的端口clock及复用功能clock

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);

2 中断优先级初始化

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//选择中断分组1

NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQChannel; //选择中断通道2

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占中断优先级设置为1

NVIC_InitStructure.NVIC_IRQChannelSubPriority =2; //响应中断优先级设置为2

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中断

3 IO初始化

PIO_InitStructure.GPIO_Pin=GPIO_Pin_2; //选择引脚PB2

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出频率最大50MHz

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;; //输入

GPIO_Init(GPIOB,&GPIO_InitStructure);

4 把PB2设置为外部中断模式

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource2);

EXTI_InitStructure.EXTI_Line = EXTI_Line2; //选择中断线路2

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //设置为中断请求 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; //触发方式为上下降沿触发

EXTI_InitStructure.EXTI_LineCmd=ENABLE; //外部中断使能

EXTI_Init(&EXTI_InitStructure);

5 中断处理函数

void EXTI2_IRQHandler(void)

{

//处理程序


//清空中断标志位,防止连续进入中断

EXTI_ClearITPendingBit(EXTI_Line2);

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2270

    文章

    10897

    浏览量

    355820
  • 外部中断
    +关注

    关注

    1

    文章

    131

    浏览量

    15820
  • 裸机
    +关注

    关注

    0

    文章

    39

    浏览量

    6374
  • MCU芯片
    +关注

    关注

    3

    文章

    251

    浏览量

    11442
收藏 人收藏

    评论

    相关推荐

    STM32 GPIO的外部中断设计

    输入引脚,还可以通过另外一种叫做外部中断的方式来对引脚的输入信号进行检测,本篇首先介绍下EXTI的结构,接着介绍外部中断的相关概念,对STM32
    发表于 04-14 10:51 2095次阅读
    <b class='flag-5'>STM32</b> GPIO的<b class='flag-5'>外部</b><b class='flag-5'>中断</b>设计

    STM32外部中断使用配置过程

    一:外部中断使用配置过程:(1)配置时钟信号(2)引脚属性(3)NVIC配置(4)外部中断配置二:STM
    发表于 08-16 07:52

    STM32外部中断实现红外遥控功能

    STM32外部中断实现红外遥控功能。
    发表于 12-14 15:49 67次下载

    STM32_外部中断程序

    STM32 外部中断程序,很好的学习资料,快来下载吧
    发表于 02-15 17:09 30次下载

    Mini STM32 外部中断实验

    一、外部中断概述1、STM32的每个IO都可以作为外部中断输入。2、STM32
    发表于 11-22 15:06 10次下载
    Mini <b class='flag-5'>STM32</b> <b class='flag-5'>外部</b><b class='flag-5'>中断</b>实验

    STM32f10x 外部中断中断分组

    利用外部中断来实现按键控制LED灯的亮灭。实验工具:MDK5,STM32F103ZET6开发板使用固件库编程LED灯引脚PD13,按键PE0首先了解一下32的外部
    发表于 11-23 18:06 4次下载
    <b class='flag-5'>STM32</b>f10x <b class='flag-5'>外部</b><b class='flag-5'>中断</b>及<b class='flag-5'>中断</b>分组

    STM32外部中断实验-EXTI

    STM32 外部中断简介STM32 的每个 IO 都可以作为外部中断
    发表于 11-29 16:06 9次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>外部</b><b class='flag-5'>中断</b>实验-EXTI

    STM32(六)-------中断外部中断

    STM32中断应用中断知识介绍STM32 中断应用概览异常NVIC优先级定义中断知识介绍
    发表于 12-04 17:21 9次下载
    <b class='flag-5'>STM32</b>(六)-------<b class='flag-5'>中断</b>(<b class='flag-5'>外部</b><b class='flag-5'>中断</b>)

    STM32 外部中断实验参考程序

    STM32 外部中断实验程序,供STM32初学者参考。
    发表于 12-30 10:46 41次下载

    STM32_EXTI外部中断学习笔记

    单片机有两个外部中断 ,分别为外部中断0、1。用来实时地处理外部事件的一种内部机制。当某种外部
    发表于 01-14 15:21 3次下载
    <b class='flag-5'>STM32</b>_EXTI<b class='flag-5'>外部</b><b class='flag-5'>中断</b>学习笔记

    STM32的IO外部中断EXTI的使用

    的方式访问输入引脚,还可以通过另外一种叫做外部中断的方式来对引脚的输入信号进行检测,本篇首先介绍下EXTI的结构,接着介绍外部中断的相关概念,对ST
    的头像 发表于 06-22 10:21 2036次阅读
    <b class='flag-5'>STM32</b>的IO<b class='flag-5'>外部</b><b class='flag-5'>中断</b>EXTI的使用

    STM32单片机外部中断简介 STM32单片机外部中断的配置过程

    STM32 单片机是一款高性能、低功耗的 32 位微控制器,具有强大的计算能力、灵活的外设模块以及优秀的扩展性,开发周期短、成本低。在单片机应用中,外部中断是一种重要的硬件触发方式,本文将对
    发表于 08-15 18:21 3046次阅读

    STM32学习笔记一外部中断

    STM32 的每个 IO 都可以作为外部中断中断输入口。STM32F103 的中断控制器支持
    的头像 发表于 10-24 14:12 1377次阅读
    <b class='flag-5'>STM32</b>学习笔记一<b class='flag-5'>外部</b><b class='flag-5'>中断</b>

    STM32如何配置外部中断STM32外部中断配置步骤

    STM32如何配置外部中断STM32外部中断配置步骤  作为一款现代化的微控制器,
    的头像 发表于 10-26 17:47 3549次阅读

    STM32外部中断大问题

    出现这种情况,明明没有触发外部中断,可是中断服务函数还是不断的++。问题一:电气噪声和抖动电气噪声和抖动是常见的问题,可能会导致STM32外部
    的头像 发表于 11-08 08:00 2275次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>外部</b><b class='flag-5'>中断</b>大问题