尽管STM32的中断系统比起以往学习的单片机要复杂很多,但是二者的使用方法相似,一般编程过程包含以下3个步骤。
第一步,使能外设中断。
中断系统对每个外设中断使能位进行控制。比如串口有发送完成中断、接收完成中断,这两个中断都由串口控制寄存器的相关中断使能位控制。
第二步,初始化中断。
STM32的中断初始化是通过配置中断优先级分组,设置NVIC_InitTypeDef结构体,设置抢占优先级和子优先级,使能中断请求。
优先级分组在AIRCR寄存器的PRIGROUP[10:8]中设置。
而NVIC_InitTypeDef结构体定义可在头文件misc.h中找到:
(www.xing528.com)
这个结构体把中断源、抢占优先级、子优先级和使能/失能设置包装到NVIC_InitTypeDef结构体中,设置时只需对结构体成员进行赋值即可。
结构体成员NVIC_IRQChannel赋值等于stm32f4xx.h头文件的typedef enum IRQn成员,如图5-2所示。要使用某系统异常或中断,将相应的中断赋值即可。
结构体成员NVIC_IRQChannelPreemptionPriority是抢占优先级的设置,具体的值要根据优先级分组来确定,具体参考表5-5描述的分组。
结构体成员NVIC_IRQChannelSubPriority是子优先级的设置,具体的值要根据优先级分组来确定,具体参考表5-5描述的分组。
结构体成员NVIC_IRQChannelCmd是中断使能(ENABLE)或者失能(DISABLE)操作。操作的是NVIC_ISER和NVIC_ICER两个寄存器。
第三步,编写中断服务函数。
启动文件startup_stm32f40xx.s中已经预先为每个中断都配备了一个中断服务函数,只是这些中断函数都为空,目的是初始化中断向量表,这一点与51系列单片机类似。实际的中断服务函数都需要用户重新编写,中断服务函数一般写在stm32f4xx_it.c库文件中。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。