系列索引:《嵌入式系统原理与应用》 | 嵌入式系统 重点知识梳理
目录
什么是中断
简而言之,中断就是通知CPU当前有某个事件发生。
中断源(中断请求标志位)
能引发中断的事件。通常,中断源都与外设有关。 每个中断源都有它对应的中断标志位。因此,一般在中断服务程序最后要将对应的中断标志位清零。
中断屏蔽
可以通过设置相应的中断屏蔽位,禁止CPU响应某个中断,从而实现中断屏蔽。
中断的处理过程、中断向量表
中断处理过程
STM32中断向量表
STM32F103各个中断对应的中断服务程序的入口地址统一存放在STM32F103的中断向量表中。STM32F103的中断向量表,一般位于其存储器的0地址处。
中断的利弊
STM32 中NVIC的中断优先级处理
嵌套向量中断控制器NVIC
NVIC集成在ARM Cortex-M3内核中,与中央处理器核心CM3Core紧密耦合,从而实现低延迟的中断处理和高效地处理晚到的较高优先级的中断。
使用4位优先级设置,具有16级可编程异常优先级;
STM32中断优先级(分组)
STM32中断优先级,分为抢占优先级和子优先级。
STM32微控制器的每个中断源,有4位优先级(ARM Cortex-M3内核定义了8位,STM32微控制器只使用了其中的4位),具有16级可编程异常优先级。
用户可以根据实际应用需求通过编程设定4位优先级中抢占优先级的位数和子优先级的位数。
STM32中段服务函数的作用及其特点
STM32所有的中断服务函数,在该微控制器所属产品系列的启动代码文件中都有预先定义。
中断相关库函数(中断通道、优先级分组的设置)
NVIC_DeInit:将NVIC的寄存器恢复为复位启动时的默认值。
NVIC_PriorityGroupConfig:设置优先级分组。
NVIC_Init:根据NVIC_InitStruct中指定的参数初始化NVIC。
设置中断优先级
/* Configure one bit for preemption priority */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//设置中断优先级组
/* Enable the TIM2_IRQn Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //设置TIM2_IRQn中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 指定抢占式优先级别,可取0-7
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //子优先级为0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
编写对应的中断服务程序
外部中断/事件控制器EXTI的特性及其使用方式
STM32F103的通用I/O引脚可以被直接映射为外部中断通道或事件输出,用于产生中断⁄事件请求。如何在通用I/O引脚上产生中断∕事件请求的呢?答案就是STM32微控制器另一个片上外设——外部中断∕事件控制器EXT
STM32微控制器的外部中断∕事件控制器EXTI,由19根外部输入线、19个产生中断∕事件请求的边沿检测器和APB外设接口等部分组成,除EXTI16(PVD输出)、EXTI17(RTC闹钟)和EXTI18(USB唤醒),0-15和GPIO引脚相对应。
如果将STM32F103的I/O引脚映射为EXTI的外部中断∕事件输入线,必须将该引脚设置为输入模式。
如果使用STM32F103引脚的外部中断∕事件映射功能,必须打开APB2总线上该引脚对应端口时钟以及AFIO功能时钟。
EXTI特性
EXTI使用方式(使用GPIO引脚作为外部中断源时)
- GPIO引脚时钟打开,工作模式为输入(上拉或下拉)
- 要把GPIO和对应的中断线连接起来
- 设置中断的优先级
EXTI相关库函数
EXTI_DeInit:将EXTI寄存器恢复为复位时的默认值。
EXTI_Init:根据EXTI_InitStruct中指定的参数初始化EXTI。
EXTI_GetFlagStatus:检查指定的外部中断∕事件线的标志位。
EXTI_ClearFlag:清除指定外部中断∕事件线的标志位。
EXTI_GetITStatus:检查指定的外部中断∕事件线的触发请求发生与否。
EXTI_ClearITPendingBit:清除指定外部中断∕事件线的中断挂起位。
volatile关键字的作用,并使用中断举例
中断中的使用
评论记录:
回复评论: