中断控制 NVIC
大约 1 分钟
中断控制 NVIC
外设介绍
NVIC 嵌套向量中断控制器 通过 NVIC 控制中断是否发生与优先级等信息
外设中断
在启动文件 __Vectors 部分, 定义了大部分的中断函数名称与含义 通过定义中断函数, 实现在中断发生时, 暂时挂起程序并执行中断 部分中断服务函数不在启动文件中, 需要手动添加
中断优先级
- 优先级分组 将优先级分为 5(0 ~ 4) 组, 每组拥有不同的抢占优先级位数(4 - n)与子优先级位数(n), 总位数相同
- 抢占优先级 优先级的前 4 - n 位
- 子优先级 优先级的后 n 位
标准库配置
NVIC 初始化
- NVIC_IRQChannel 中断源, 通常为 外设名_IRQ, 如 USART1_IRQ
- NVIC_IRQChannelPreemptionPriority 抢占优先级(范围通过优先级分组决定)
- NVIC_IRQChannelSubPriority 子优先级(范围通过优先级分组决定)
- NVIC_IRQChannelCmd 使中断开启(Enable) 或关闭 (Disable)
- 函数 NVIC_PriorityGroupConfig(uint32_t); 参数 NVIC_PriorityGroup_n 使用第 n 组优先级分组
- 对于外设的中断还需要先通过 XXX_ITConfig 使能
踩坑笔记
- 部分中断服务函数没有在启动文件中声明, 需要手动添加