中断种类
可以参考参考手册中的中断向量表
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 SysTick小结
下一篇:STM32 硬件I2C外设
设计资源 培训 开发板 精华推荐
- 【航顺训练营】送给我的女儿HK32开发板-402304A
- #第七届立创电赛#立创电子设计大赛-N32计算机
- 使用 ROHM Semiconductor 的 BD49K32G-TL 的参考设计
- LTC1538IG-AUX 高效双路 5V/3V 降压转换器典型应用电路
- 具有电源良好状态的 LT3976EUDD 5V、2MHz 降压转换器的典型应用电路
- 使用 ADA4077-4ARUZ 双电源高精度放大器用于低功耗线性化 RTD 电路的典型应用电路
- AD8602DRZ-REEL7 高端运算放大器电流监视器的典型应用
- USB-TTL串口通信模块-CH340C
- LT1952EGN-1 36V 至 72V 输入至 12V 在 20A 无(光耦合器)同步总线转换器的典型应用电路
- 6W、5V DC 至 DC 单路输出电源