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文件中。在这个文件中内核的中断都已经写好,外设的中断服务函数要自己写。

关键字:     编辑:什么鱼 引用地址:

发表评论

邮箱地址不会被公开。 必填项已用*标注