发新帖我要提问
12
返回列表
打印
[其他ST产品]

STM32中断及NVIC概述

[复制链接]
楼主: 狗啃模拟
手机看帖
扫描二维码
随时随地手机跟帖
21
狗啃模拟|  楼主 | 2021-12-30 23:06 | 只看该作者 回帖奖励 |倒序浏览
中断编程

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

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

由串口控制寄存器的相关中断使能位控制。

使用特权

评论回复
22
狗啃模拟|  楼主 | 2021-12-30 23:07 | 只看该作者
2、初始化 NVIC_InitTypeDef结构体,配置中断优先级分组,设置抢占优先级和子优先级,使能中断请求。

NVIC 初始化结构体

使用特权

评论回复
23
狗啃模拟|  楼主 | 2021-12-30 23:09 | 只看该作者
typedef struct
{
  uint8_t NVIC_IRQChannel; // 中断源
  uint8_t NVIC_IRQChannelPreemptionPriority; // 抢占优先级
  uint8_t NVIC_IRQChannelSubPriority; // 子优先级
  FunctionalState NVIC_IRQChannelCmd; // 中断使能或者失能
} NVIC_InitTypeDef;

使用特权

评论回复
24
狗啃模拟|  楼主 | 2021-12-30 23:10 | 只看该作者
1)NVIC_IROChannel:用来设置中断源,不同的中断中断源不一样,且不可写错,即使写错了程序不会报错,只会导致不想要

中断。具体的成员配置可参考 stm32f4xx.h头文件里面的 IRQn_Type 结构体定义,这个结构体包含了所有的中断源。

使用特权

评论回复
25
狗啃模拟|  楼主 | 2021-12-30 23:11 | 只看该作者
2)NVIC_IRQChannelPreemptionPriority:抢占优先级,具体的值要根据优先级分组来确定,具体参考表格 优先级分组真值表

使用特权

评论回复
26
狗啃模拟|  楼主 | 2021-12-30 23:11 | 只看该作者
3)NVIC_IRQChannelSubPriority:子优先级,具体的值要根据优先级分组来确定,具体参考表格优先级分组真值表 。

使用特权

评论回复
27
狗啃模拟|  楼主 | 2021-12-30 23:13 | 只看该作者
4)NVIC_IRQChannelCmd:中断使能(ENABLE)或者失能(DISABLE)。操作的是 NVIC_ISER 和 NVIC_ICER 这两个寄存器。

使用特权

评论回复
28
狗啃模拟|  楼主 | 2021-12-30 23:15 | 只看该作者
3、编写中断服务函数

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

是初始化中断向量表。实际的中断服务函数都需要我们重新编写,中断服务函数我们统一写在 stm32f4xx_it.c这个库文件中。

使用特权

评论回复
29
狗啃模拟|  楼主 | 2021-12-30 23:15 | 只看该作者
关于中断服务函数的函数名必须跟启动文件里面预先设置的一样,如果写错,系统就在中断向量表中找不到中断服务函数的入口直接跳转到启动文件里面预先写好的空函数,并且在里面无限循环,实现不了中断。

使用特权

评论回复
30
狗啃模拟|  楼主 | 2021-12-30 23:16 | 只看该作者
关于中断服务函数的函数名必须跟启动文件里面预先设置的一样,如果写错,系统就在中断向量表中找不到中断服务函数的入口直接跳转到启动文件里面预先写好的空函数,并且在里面无限循环,实现不了中断。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则