嵌入式入门——中断 笔记

目录

外部中断的配置

一. 设置输入模式

浮空输入/上拉/下拉配置

   2. 模拟功能(专门用于模拟信号输入或输出,如:ADC和DAC)

     3. 输出配置

   4. 复用功能配置

二. 设置EXTI与IO的映射关系

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

   2.(1)AFIO(复用功能IO)【f1】:用于重映射和外部中断映射配置。

(2)EXTI 与 IO对应关系

   3. 产生中断流程(外部中断/时间控制器)

    6. 寄存器介绍

三. NVIC(嵌套向量中断控制器,属于内核)

    1. 了解

    2. 中断向量表

    3. 相关寄存器

    4. 中断优先级基本概念及其分组

    5. 工作原理

    6. NVIC的使用步骤

四. 外部中断配置步骤

    1. EXTI配置步骤【步骤2-5使用HAL_GPIO_Init()函数一步到位】

    2. EXTI的HAL库设置步骤

外部中断的配置

一. 设置输入模式

        GPIO共分为8种模式:浮空输入、上拉输入、下拉输入、模拟功能、开漏输出、推挽输出、开漏式复用功能、推挽式复用功能

  1. 浮空输入/上拉/下拉配置

浮空输入:(1)弱上下拉电阻关闭(2)施密特触发器打开(3)双MOS管不导通

上拉输入:(1)弱上拉电阻打开,弱下拉电阻关闭(2)施密特触发器打开(3)双MOS管不导通

下拉输入:(1)弱上拉电阻关闭,弱下拉电阻打开(2)施密特触发器打开(3)双MOS管不导通

   2. 模拟功能(专门用于模拟信号输入或输出,如:ADC和DAC)

模拟功能:(1)弱上下拉电阻关闭(2)施密特触发器关闭(3)双MOS管不导通(4)读入输入数据寄存器时数值为0

     3. 输出配置

开漏输出(不能输出高电平,必须有外部(或内部)上拉才能输出高电平):

(1)弱上下拉电阻关闭(2)施密特触发器打开(3)P-MOS管始终不导通(4)往ODR对应位写0,N-MOS管导通,写1则N-MOS管不导通

推挽输出(可输出高低电平,驱动能力强):

(1)弱上下拉电阻关闭(2)施密特触发器打开(3)往ODR对应位写0,N-MOS管导通,写1则P-MOS管导通

   4. 复用功能配置

开漏式复用(不能输出高电平,必须有外部(或内部)上拉才能输出高电平,且由其他外设控制输出):(1)上拉电阻关闭(2)下拉电阻关闭(3)施密特触发器打开(4)P-MOS管始终不导通  

推挽式复用(可输出高低电平,驱动能力强,且由其他外设控制输出):(1)上拉电阻关闭(2)下拉电阻关闭(3)施密特触发器打开

二. 设置EXTI与IO的映射关系

  1. stm32f1中断控制器支持19个外部中断/事件请求

提供给IO口的中断线有16条,每条中断线都可以与GPIOx0~GPIOx15(x=A,B,C,D,E,F,G)一一对应,所以0-15每条中断线都会有7种(A-G)不同的连接选择。即

   2.(1)AFIO(复用功能IO)【f1】:用于重映射和外部中断映射配置。

补:SYSCFG(系统配置控制器)【F4/F7/H7】:用于外部中断映射配置等。

(2)EXTI 与 IO对应关系

    AFIO_EXTICR1~4(SYSCFG_EXTICR1~4),每个寄存器控制4条中断线,共记16条。

   3. 产生中断流程(外部中断/时间控制器)

【①边沿检测 ②软件触发 ③中断屏蔽/清除 ④事件屏蔽】

(1)配置好并使能中断线。根据需要的边沿检测设置2个触发寄存器(硬件触发),当外部中断线上发生了期待的边沿时,将产生一个中断请求,边缘检测电路输出为‘1’,则或门输出为‘1’,对应的挂起位也随之被置‘1‘,如果在挂起寄存器的对应位写’1‘,将清除该中断请求。最后在中断屏蔽寄存器的相应位写’1’便可以允许中断请求。

(2)如果需要产生事件,必须先配置好并使能事件线。根据需要的边沿检测通过设置2个触发寄存器,同时在事件屏蔽寄存器的相应位写‘1允许事件请求。当事件线上发生了需要的边沿时,将产生一个事件请求脉冲,对应的挂起位不被置’1’。

(3)通过在软件中断/事件寄存器写’1‘,也可以通过软件产生中断/事件请求。

(4)事件屏蔽寄存器、软件中断事件寄存器用的比较少。

    6. 寄存器介绍

(1)上升沿触发选择寄存器(EXTI_RTSR

(2)下降沿触发选择寄存器(EXTI_FTSR

(3)挂起寄存器(EXTI_PR

(4)中断屏蔽寄存器(EXTI_IMR

(5)软件中断事件寄存器(EXTI_SWIER)

(6)事件屏蔽寄存器(EXTI_EMR)

三. NVIC(嵌套向量中断控制器,属于内核)

    1. 了解

支持256个中断(16内核 + 240外部),支持256个优先级,且允许裁剪。

    2. 中断向量表

定义一块固定的内存,以4字节对齐(32位单片机),存放各个中断服务函数程序的首地址。中断向量表定义在启动文件(.s),当发生中断,CPU会自动执行对应的中断服务函数

    3. 相关寄存器

    4. 中断优先级基本概念及其分组

(1)抢占优先级:高抢占优先级可以打断正在执行的低抢占优先级中断。

(2)响应优先级:当抢占优先级相同时,响应优先级高的先执行,但是不能互相打断。

(3)抢占和响应都相同的情况下,自然优先级越高的,先执行。

(4)自然优先级:中断向量表的优先级。

(5)数值越小,表示优先级越高。

    补:一个工程中,一般只设置一次中断优先级分组。

    5. 工作原理

    6. NVIC的使用步骤

(1)设置中断分组:AIRCR[10:8],HAL_NVIC_SetPriorityGrouping()

(2)设置中断优先级:IPRx bit[7:4],HAL_NVIC_SetPriority()

(3)使能中断:ISERx,HAL_NVIC_EnableIRQ()

四. 外部中断配置步骤

    1. EXTI配置步骤【步骤2-5使用HAL_GPIO_Init()函数一步到位】

(1)使能GPIO时钟

(2)设置GPIO输入模式:上/下拉/浮空输入

(3)使能AFIO/SYSCFG时钟:设置AFIO/SYSCFG时钟开启寄存器

(4)设置EXTI和IO对应关系:选择PA~PK到底哪组IO对应EXTI输入线,AFIO_EXTICR/ SYSCFG_EXTICR

(5)设置EXTI对应通道的屏蔽和上升沿/下降沿触发,IMR、 RTSR/FTSR

(6)设置NVIC:分3步,设置优先级分组、设置优先级、使能中断

(7)设计中断服务函数:编写对应中断的中断服务函数,清中断标志

    2. EXTI的HAL库设置步骤

(1)使能GPIO时钟:__HAL_RCC_GPIOx_CLK_ENABLE()

(2)GPIO/AFIO(SYSCFG)/EXTI:HAL_GPIO_Init(),一步到位

(3)设置中断分组:HAL_NVIC_SetPriorityGrouping()

(4)设置中断优先级:HAL_NVIC_SetPriority()

(5)使能中断:HAL_NVIC_EnableIRQ()

(6)设计中断服务函数:EXTIx_IRQHandler(),清中断标志位(PR寄存器)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值