[其他ST产品] STM32中断及NVIC概述

[复制链接]
 楼主| 狗啃模拟 发表于 2021-12-30 23:06 | 显示全部楼层
中断编程

在配置每个中断的时候一般有 3个编程要点:

1、使能外设某个中断,这个具体由每个外设的相关中断使能位控制。比如串口有发送完成中断,接收完成中断,这两个中断都

由串口控制寄存器的相关中断使能位控制。
 楼主| 狗啃模拟 发表于 2021-12-30 23:07 | 显示全部楼层
2、初始化 NVIC_InitTypeDef结构体,配置中断优先级分组,设置抢占优先级和子优先级,使能中断请求。

NVIC 初始化结构体
 楼主| 狗啃模拟 发表于 2021-12-30 23:09 | 显示全部楼层
  1. typedef struct
  2. {
  3.   uint8_t NVIC_IRQChannel; // 中断源
  4.   uint8_t NVIC_IRQChannelPreemptionPriority; // 抢占优先级
  5.   uint8_t NVIC_IRQChannelSubPriority; // 子优先级
  6.   FunctionalState NVIC_IRQChannelCmd; // 中断使能或者失能
  7. } NVIC_InitTypeDef;
 楼主| 狗啃模拟 发表于 2021-12-30 23:10 | 显示全部楼层
1)NVIC_IROChannel:用来设置中断源,不同的中断中断源不一样,且不可写错,即使写错了程序不会报错,只会导致不想要

中断。具体的成员配置可参考 stm32f4xx.h头文件里面的 IRQn_Type 结构体定义,这个结构体包含了所有的中断源。
 楼主| 狗啃模拟 发表于 2021-12-30 23:11 | 显示全部楼层
2)NVIC_IRQChannelPreemptionPriority:抢占优先级,具体的值要根据优先级分组来确定,具体参考表格 优先级分组真值表
 楼主| 狗啃模拟 发表于 2021-12-30 23:11 | 显示全部楼层
3)NVIC_IRQChannelSubPriority:子优先级,具体的值要根据优先级分组来确定,具体参考表格优先级分组真值表 。
 楼主| 狗啃模拟 发表于 2021-12-30 23:13 | 显示全部楼层
4)NVIC_IRQChannelCmd:中断使能(ENABLE)或者失能(DISABLE)。操作的是 NVIC_ISER 和 NVIC_ICER 这两个寄存器。
 楼主| 狗啃模拟 发表于 2021-12-30 23:15 | 显示全部楼层
3、编写中断服务函数

在启动文件 startup_stm32f429_439xx.s 中我们预先为每个中断都写了一个中断服务函数,只是这些中断函数都是为空,为的只

是初始化中断向量表。实际的中断服务函数都需要我们重新编写,中断服务函数我们统一写在 stm32f4xx_it.c这个库文件中。
 楼主| 狗啃模拟 发表于 2021-12-30 23:15 | 显示全部楼层
关于中断服务函数的函数名必须跟启动文件里面预先设置的一样,如果写错,系统就在中断向量表中找不到中断服务函数的入口直接跳转到启动文件里面预先写好的空函数,并且在里面无限循环,实现不了中断。
 楼主| 狗啃模拟 发表于 2021-12-30 23:16 | 显示全部楼层
关于中断服务函数的函数名必须跟启动文件里面预先设置的一样,如果写错,系统就在中断向量表中找不到中断服务函数的入口直接跳转到启动文件里面预先写好的空函数,并且在里面无限循环,实现不了中断。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部
快速回复 在线客服 返回列表 返回顶部