STM32中断应用概览.pdf

中断编程的顺序

1-使能中断请求

首先外部设备提出中断请求,如串口发送中断,USART_CR1的位6TCIE置1(小门),小门的信号传给NVIC,NVIC的中断使能寄存器ISER来决定哪个外设中断先运行。
image.png

2-配置中断优先级分组

设置优先级分组可调用misc.c中的库函数 NVIC_PriorityGroupConfig()实现,
image.png
image.png


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

image.png
image.png
1) NVIC_IROChannel:用来设置中断源,不同的中断中断源不一样,且不可写错,即使写错了程序也不会报错,只会导致不响应中断。具体的成员配置可参考 **stm32f10x.h 头文件里面的 IRQn_Type 结构体定义,这个结构体包含了所有的中断源。 **
2) NVIC_IRQChannelPreemptionPriority:抢占优先级,具体的值要根据优先级分组来确定,具体参考表格 17-5 优先级分组真值表 。
3) NVIC_IRQChannelSubPriority:子优先级,具体的值要根据优先级分组来确定,具体参考表格 17-5 优先级分组真值表 。
4) NVIC_IRQChannelCmd:中断使能( ENABLE)或者失能( DISABLE)。操作的是 NVIC_ISER 和 NVIC_ICER 这两个寄存器

4-编写中断服务函数

在启动文件 startup_stm32f10x_hd.s 中我们预先为每个中断都写了一个中断服务函数,只是这些中断函数都是为空,为的只是初始化中断向量表。实际的中断服务函数都需要我们重新编写, 为了方便管理我们把中断服务函数统一写在 stm32f10x_it.c 这个库文件中。