我是靠谱客的博主 超帅香氛,最近开发中收集的这篇文章主要介绍STM32学习记录3——中断定义:STM32中断分类中断初始化配置代码编写,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

定义:

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中断分类中断初始化配置代码编写所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部