中断相关知识
提示:文章
文章目录
- 前言
- 一、背景
- 二、
- 2.1
- 2.2
- 三、
- 3.1
- 总结
前言
前期疑问:
1、中断嵌套是什么?
2、为什么EXTI文章中,对按键中断向量需要配置。而串口配置接收中断的时候不需要配置中断向量?
简单搜了下百度,中断嵌套好像是在一个中断中再触发另一个中断。这样的话好像又涉及到知识盲区,先不管这个。
答:串口也是需要配置的,即在NVIC_InitType结构体中配置USART1中断源或者叫中断向量。但是实际上两者还是有区别。对于串口中断,包括配置PA9、PA10的GPIO口,然后配置中断分组和中断优先级,在配置中断优先级的时候就配置了中断向量和使能中断。最后就是配置USART,配置波特率和停止位和长度等信息,配置波特率就是串口独有的。
而按键EXTI在配置了GPIO口后,将GPIO口配置成浮空输入。再配置NVIC中的中断源后,两个按键配置两个中断源,然后就是配置具体是哪一个引脚,因为比如KEY1是PA0,使用的中断源是EXTI0中断源,但是实际EXTI0中断源对应Px0-Px15多个GPIO口(x为A…G),实际文章实例教程中是将EXTI_Init和GPIO_InitType写在一起的,我是觉得也可以分开写。
本文目标:
一、背景
这个文章其中写的时间是在EXT文章后面的。而实际野火中中断文章是在EXTI文章前面的。之所以在这里EXTI文章是在这篇中断文章前面,是因为之前没有单独给中断新建一个文章。但是在后面看EXTI文章的时候,意识到还有不少中断的知识点不甚其解。比如EXTI配置外部中断的时候是要配置EXTI_InitType结构体,并且指定外部中断向量。还配置了NVIV_InitType结构体。关于上述知识点我还存在模糊理解,所以又回到中断文章重新看文章。
现在看完中断文章,对上述疑问有了些理解。下面解答上述的问题:
1、 | EXTI_InitType是什么? | 是配置外部中断的,里面涉及到指定中断向量是哪一个,然后需要在中断服务函数中实现功能,比如按键按下led灯亮。 另外还有配置是中断还是事件,按键就配置成中断。 另外还有配置是上升沿触发中断还是下降沿出发中断 |
2、 | NVIC是什么? | 是配置中断优先级的。里面有4个成员,一个是配置优先级分组,一个是… |
上述的表述有问题,直到我开始整理NVIC的成员的时候我才意识到我的理解还是有遗漏,而且我还意识到之前疑问的一个地方。 因为NVIC_InitType成员中四个成员①中断源②抢占式优先级(主优先级)③子优先级④使能中断。然后就涉及到一个问题,串口中断并不是没有配置中断,而是配置了中断。然后我还有一个疑问,比如串口是PA9和PA10,是USART1中断,我配置成USART2中断可以吗? | ||
3、 | NVIC_PriorityGroupConfig | 这个函数是配置中断分组的,一个可以分成5组,由4位寄存器配置。当抢占优先级为0位时,子优先级就为4位,所以抢占优先级为0,子优先级有0-15,一共16种优先级。到抢占优先级为4位时,子优先级就为0位,所以抢占优先级为0-15,一共16种优先级,子优先级为0种。这个寄存器是NVIC_IPRx寄存器,只使用了高4位 。文中提到优先级可以配置成0-255,这个是怎么算出来的。哦哦想了下可能是有8位,最大值就是256个 |
特别说明:
其中文中还有一个段落是特别说明,指出了只需要配置一次中断优先级分组就行了,如果多次配置,只取最后一次配置的。
二、
2.1
2.2
三、
3.1
总结
未完待续