ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

STM32学习之外部中断EXTI

2022-03-20 17:32:27  阅读:239  来源: 互联网

标签:优先级 HAL 函数 Pin 中断 STM32 GPIO EXTI


本文参考了此篇文章,建议大家先去看这篇文章,里面讲的很详细。(40条消息) STM32CubeMX实战教程(三)——外部中断(中断及HAL_Delay函数避坑)_会开发的喵的博客-CSDN博客_hal外部中断使能https://blog.csdn.net/weixin_43892323/article/details/104383560

一、什么是外部中断

简单来说,就是单片机在执行主程序的时,由于某个事件的发生,暂停主程序的执行调用相应的中断处理程序,执行完中断程序后再继续执行主程序。

关于中断系统的组成结构,每种型号的单片机都不太一样,自行了解。

关于中断的优先级

中断嵌套的两条规则:①低优先级的中断服务函数可被高优先级的服务函数打断,反之不可以。

②任何一种中断,一旦得到响应,即不可以被同级中断打断。

对于我们的编程,中断的优先级使用是很重要的,用户可以配置中断优先级,这就很好的处理复杂的程序。一般来说,中断优先级的编号越小,其优先级越高。

二、外部中断怎么用

1.设置NVIC

1)对中断优先级进行分组

2)选择中断通道,不同的引脚对应不同的中断个数,在这里,每一组相同的编号的GPIO都被映射到同一个外部中断/事件控制器中。

3)设置优先级

4)使能中断

2.中断端口配置

1)配置GPIO

2)配置外部中断方式

以上操作均可以通过STM32CUbeMX实现,实现过程如下

代码思路:GPIO触发外部中断,中断执行中断函数,中断函数执行步骤为先进入GPIO所对应的中断,调用回调函数,完成中断程序 

什么是回调函数,回调函数在中断有什么作用,大家可以参考这篇文章C 语言回调函数详解 | 菜鸟教程 (runoob.com)https://www.runoob.com/w3cnote/c-callback-function.html

配置完成后,打开工程,在stm32f1xx.it.c中重写callback回调函数,代码如下

/* USER CODE BEGIN 1 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	//使用KEY1控制蜂鸣器
	if(GPIO_Pin==KEY1_Pin)
	{
		//HAL_Delay(100);
		if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==0)
		{
			HAL_GPIO_WritePin(BEEP_GPIO_Port,BEEP_Pin,1);
			HAL_Delay(200);
			HAL_GPIO_WritePin(BEEP_GPIO_Port,BEEP_Pin,0);
		}
	}
	//使用KEY2让LED翻转
	if(GPIO_Pin == KEY2_Pin)
	{
		if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin) == 1)
		{
			HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
			HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
		}		
	}
}
/* USER CODE END 1 *//

至此完毕

注意,这段代码在中断里使用了延时函数,一般来说,单片机中的中断加入延时函数是一大禁忌,对于这种情况,我们可以使用定时器中断来完成

稍后更新定时器中断实现按键按下蜂鸣器响500ms的程序

标签:优先级,HAL,函数,Pin,中断,STM32,GPIO,EXTI
来源: https://blog.csdn.net/weixin_53370601/article/details/123607526

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有