STM32中断应用总结

发布者:清晨微风最新更新时间:2022-04-24 来源: eefocus关键字:STM32  中断应用  中断向量表 手机看文章 扫描二维码
随时随地手机看文章

中断种类

可以参考参考手册中的中断向量表


NVIC

  嵌套向量中断控制器,属于内核外设,管理内核和片上所以外设相关的功能。其功能可以参考内核编程手册

STM32F10xxx Cortex-M3编程手册-英文版 的4.3节

也可从固件库中观察。重要的有两个库文件 core_cm3.h 和misc.h

下面是core_cm3.h 中 NVIC_Type 结构体


typedef struct

{

  __IO uint32_t ISER[8];              //中断使能寄存器  

  uint32_t RESERVED0[24];                                

  __IO uint32_t ICER[8];              //中断清除寄存器    

  uint32_t RSERVED1[24];                                 

  __IO uint32_t ISPR[8];              // 中断使能悬起寄存器       

  uint32_t RESERVED2[24];                              

  __IO uint32_t ICPR[8];              // 中断清除悬起寄存器        

  uint32_t RESERVED3[24];                                   

  __IO uint32_t IABR[8];              // 中断有效位寄存器         

  uint32_t RESERVED4[56];                                   

  __IO uint8_t  IP[240];              //中断优先寄存器           

  uint32_t RESERVED5[644];                                    

  __O  uint32_t STIR;                 // 软件触发中断寄存器         

}  NVIC_Type;


在misc.h 中有关于 NVIC 的固件库函数

在这里插入图片描述

中断优先级的定义

中断优先级的设定

设定优先级需要使用 NVIC 的 IPRx 寄存器。

ARM公式在设计时,优先级编码是8位的,但ST公司只用了其高4位。


优先级的分组

  把前四位分组,分为主优先级和子优先级。先比较主优先级,相同则比较子优先级,相同则比较硬件编码,硬件编码可以在参考手册的中断向量表中查到。


  优先级由SCB 的 AIRCR:PRIGROUP[10:8] 配置。配置的方案可以在misc.h 中找到

在这里插入图片描述

具体意思是,配置分组为 NVIC_PriorityGroup_0 时,主优先级被分配0位,子优先级4位。以此类推


中断编程顺序

1.配置外设中断

2.配置中断优先级分组

3.配置 NVIC 寄存器,初始化NVIC_InitTypeDef

4.编写中断服务函数


配置外设中断

要配置外设的中断,还要打开NVIC 的中断使能寄存器。


配置中断优先级分组

优先级由SCB 的 AIRCR:PRIGROUP[10:8] 配置。固件库编程使用 NVIC_PriorityGroupConfig 函数。一般关于NVIC的函数都在 miss.c 中。

在这里插入图片描述

配置NVIC

我们知道有关NVIC的库是 misc ,我们打开头文件,可以看到初始化函数


void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);


其中初始化结构体 NVIC_InitTypeDef 如下。

在这里插入图片描述

NVIC_IRQChannel: 用来选择对应的中断类型和端口号,后面详细介绍;

NVIC_IRQChannelPreemptionPriority: 设置主优先级

NVIC_IRQChannelSubPriority: 设置子优先级

NVIC_IRQChannelCmd: 选择开启还是关闭,FuctionalState 类型;


注意第一个 NVIC_IRQChannel 的配置值在 stm32f10x.h 中找出,要对应自己芯片的型号,如指南者是HD

然后调用 NVIC_Init 函数完成配置


编写中断服务函数

函数名称

中断服务函数名称必须和启动文件中一致。启动文件为 startup_stm32f10x_hd.s。如果名称写错,则会执行启动文件中的中断,即无限循环。

在这里插入图片描述

函数放置位置

  为了便于管理,要把所有中断服务函数放在 stm32f10x_it.c文件中。在这个文件中内核的中断都已经写好,外设的中断服务函数要自己写。

关键字:STM32  中断应用  中断向量表 引用地址:STM32中断应用总结

上一篇:STM32 SysTick小结
下一篇:STM32 硬件I2C外设

小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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