概述
定义:
NVIC 即嵌套向量中断控制器(Nested Vectored Interrupt Controller)。它是属于 CM3 内核的器件。
中断:就是当 CPU 执行程序时,由于发生了某种随机的事件(外部或内部),引起 CPU 暂时中断正在运行的程序,转去执行一段特殊的服务程序(中断服务子程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程就称为中断。
中断源:引发中断信号来源称为中断源。
中断的嵌套:有些中断还能够被其他高优先级的中断所中断,那么这种情况又叫做中断的嵌套。
中断通道:是传递、处理中断的信息通道。中断通道对应有唯一的中断号、中断优先级、中断向量、服务程序;1个中断通道可以有多个中断源,每个中断源有对应的中断处理程序。
STM32中断分类
1、CPU中断(15个通道)
包括非屏蔽中断、异常、指令中断、复位。
2、设备中断(43~68个通道)
指STM32微控制器片内所有设备的中断,其数量与型号有关,对于大容量(hd)类型,共60个。
3、外部中断(16个中断源、7个通道)
16个中断源,通过7个端口(PA、PB、PC、PD、PE、PF、PG)引脚接外部设备信号。7个中断通道:来自外部引脚。另外4个中断源连接的是内部设备,用于检测电压、RTC闹钟、两个唤醒CPU,且各占1个通道。
中断初始化配置
- 将GPIO设置为:GPIO_EXTI功能。
- 设置中断触发条件:上升沿,下降沿,上升沿或下降沿。
- 使能相关NVIC通道
代码编写
使用按钮触发中断,改变小灯的状态
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin==GPIO_PIN_4)//C4引脚为按钮引脚,初始化设置为上升沿触发
{
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_3);//改变C3小灯引脚的状态
}
if(GPIO_Pin==GPIO_PIN_5)//C5引脚为按钮引脚,初始化设置为下降升沿触发
{
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_0);//改变C3小灯引脚的状态
}
}
这里有个小插曲,在上升沿触发中断的时候容易被多次触发,所以尝试在回调函数中使用延时函数,延时20毫秒,想要在第一次上升沿触发中断以后,跳过在按键抬起后的震荡,从而给按键消抖。但是程序运行了以后第一次中断触发以后单片机就卡死,搜集资料后发现中断里面不能延时,延时是错误用法。不过有点奇怪的是在编译的时候没有出现任何的报错和警告信息。
继续深入查询资料发现,可以不用按键触发外部中断,而是使用定时器中断,每隔一定时间对按键进行扫描,如果为按下状态,则标志位+1,否则标志位清零,当标志位达到一定的数值的时候,则视为按键按下。
void timer0(void)
{
if(io_key==0)keycnt++;else keycnt=0
if(keycnt==5)key=1;//连续5次都采集到就认为有按键
}
这里先存档一下大佬的代码,等下节学习定时器中断的时候实际尝试一下吧。
最后
以上就是超帅香氛为你收集整理的STM32学习记录3——中断定义:STM32中断分类中断初始化配置代码编写的全部内容,希望文章能够帮你解决STM32学习记录3——中断定义:STM32中断分类中断初始化配置代码编写所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复