[STM32]外部中断编程

什么是中断

        中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行

        断点:主程序暂停,执行中断;中断执行完,回到主程序的位置

        形象来讲:我在上课,学校开始消防演练,课堂被打断,我们都去消防演练,演练结束继续回来上课

中断嵌套

当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回

 

stm32中断

中断源:68个可屏蔽中断通道,包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多个外设    //中断通道就是中断源
注意:

        1.68个可屏蔽中断通道,是F1系列单片机最大通道数,不是所有STM32都拥有所有中断通道
        2.使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级 

NVIC基本结构

NVIC:中断向量控制器
作用:同一分配中断优先级和管理中断    //相当于CPU处理中断助手
NVIC是一个内核外设
原理:NVIC通过终端优先级决定执行那个终端,并通过一个输出口告诉CPU该执行那个中断

 

中断优先级

当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源

NVIC中断分组

NVIC的中断优先级由优先级寄存器的4位(0~15)决定,这4位可以进行切分,分为高n位的抢占优先级和低4-n位的响应优先级
    抢占优先级高的可以中断嵌套,抢占属性由NVIC_IRQChannelPreemptionPriority 的参数配置。    //插队
    响应优先级高的可以优先排队,响应属性由NVIC_IRQChannelSubPriority 参数配置。    
    抢占优先级和响应优先级均相同的按中断号排队
中断号:
    中断系统表中的中断号
注意:
    在库函数中,先占就是抢占(pre-emption),从站就是响应(subpriority)

分组方式抢占优先级响应优先级
分组00位,取值为04位,取值为0~15
分组11位,取值为0~13位,取值为0~7
分组22位,取值为0~32位,取值为0~3
分组33位,取值为0~71位,取值为0~1
分组44位,取值为0~150位,取值为0

外部中断

端口电平变化而产生的中断请求
        EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序
优点:中断系统可以提高程序的运行效率
中断源:
    外部中断:引脚电平跳变、定时的时间到、串口通信接收到数据

基本信息

外部中断功能:
            从低功耗模式的停止模式下唤醒STM32
支持的触发方式:
            上升沿:边沿检测电路检测到上升沿
            下降沿:边沿检测电路检测到下降沿
            双边沿:边沿检测电路检测到上升沿和下降沿
            软件触发:软件中断事件寄存器输出1
支持的GPIO口:
            所有GPIO口,但相同的Pin不能同时触发中断
通道数:
            16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒
            //16个GPIO_Pin是外部中断的主要功能
            //对于PVD电源电压监测,当从电压从电压过低恢复时,PVD需要借助外部中断退出停止模式
            //对于RTC时钟,为了省电,RTC定一个闹钟后STM32会进入停止模式,等到闹钟响的时候再唤醒,需要借助外部中断
            //USB唤醒和以太网唤醒类似
触发响应方式:
            中断响应:申请中断,让CPU执行中断函数
            事件响应:外部中断检测到引脚电平发生变化时,可以选择除法中断,也可以选择除法一个事件,除法事件,中断信号不会通向CPU,直接通向其他外设,让其他外设工作

exit基本结构

AFIO:

        数据选择器,GPIO外设由16个引脚,若每个引脚占用一个通道,那EXIT的16个通道不够;AFIO中断引脚选择的电路模块,在GPIO的16个引脚里选择其中一个连接到后面的EXIT通道

注意:

        EXIT9_5(5~10)和EXIT15_10(10~15)分配在同一个通道里,会触发同一个中断函数,需要根据标志位区分是那个中断进来

 

AFIO

AFIO:复用IO口
AFIO主要用于引脚复用功能的选择和重定义
AFIO作用:
    复用功能引脚重映射
    中断引脚选择
梯形符号:数据选择器,多个输入,一个输出,侧面由选择控制端,通过控制端数据,从输入选择一个接到输出

 

exit内部框图

输入线20根,连接在EXIT右边
边沿检测电路可以检测上升沿还是下降沿,通过触发选择寄存器除法中断
输出:
    NVIC触发中断,选置一个挂起寄存器,相当于一个中断标志位
    20触发事件,

中断编程

步骤

1.配置RCC,把涉及的外设的时钟都打开
2.配置GPIO,选择端口的输入模式
3.配置AFIO,选择使用的GPIO    //AFIO也是APB2的外设
    RCC_APB2PeriphClockCmd(AFIO,ENABLE);
4.配置EXIT,选择边沿触发方式和响应方式    
5.配置NVIC,选择合适优先级
通过NVIC外部中断信号就能进入CPU    //内核外设,不用开启时钟
注意:
    EXIT和NVIC时钟一直打开的,不需要再开启时钟
    RCC只能处理内核外的外设,RCC管不到内核外设

编写中断函数

注意:
    1.中断函数名字固定,每个中断通道对应一个中断函数    //在start的startup文件里以IRQHandler为后缀的字符串就是中断函数名
    2.中断函数固定无参无返回值

中断函数内部:

        1.对中断标志位进行判断,确保想要的中断源触发函数
        2.编写中断函数内容
        3.清除中断标志位

中断建议

1.尽量不要再中断中使用太长延时的函数
2.尽量不要在中断函数和主函数中调用相同的函数或操作同一个硬件  
3.建议在中断中操作变量或标志位
注意:
    中断保护现场和恢复现场只对CPU有效,对外部硬件没有现场保护

学习资源:

        哔哩哔哩江科大自化协STM32视频资料

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值