STM32CubeMx学习笔记--EXIT(外部中断)使用

一、新建工程

1、选择芯片型号

2、配置时钟RCC

选择 HSE(外部高速时钟) 为 Crystal/Ceramic Resonator(晶振/陶瓷谐振器)

3、时钟树配置

在clock Configuration中将HCLK配置为最高频率然后回车

4、选择调试模式

SYS 设置,选择 Debug 为 Serial Wire

Timebase Source时钟源可以选择SysTick

二、EXIT外部中断配置

1、引脚配置

在右边芯片引脚图选择按键对应引脚

点击引脚选择GPIO_EXTIx,x指的是 GPIO_EXTI0 挂载在中断线0上。

2、模式选择

  • 开启下降沿触发中断:即在 按下按键时 电平由高变为低时触发,则在 GPIO mode 中选择 External Interrupt Mode with Falling edge trigger detection
  • 开启上升沿触发中断:即在 按下按键后松开时 电平由低变为高时触发,则在 GPIO mode 中选择 External Interrupt Mode with Rising edge trigger detection
  • 开启下降沿上升沿都触发中断:即在 按下时触发,松开时再次触发,则在 GPIO mode 中选择 External Interrupt Mode with Rising/Falling edge trigger detection
  • 如果硬件上已外部上拉或下拉,则在GPIO Pull-up/Pull-down 中选择 No pull-up and no pull-down 既不上拉也不下拉。
  • 如果硬件外部没有上拉,则在GPIO Pull-up/Pull-down 中选择 Pull-up 内部上拉电阻。

需要查看自己开发板的原理图和自身需求:

3、配置NVIC

中断优先级分组 Priority Group 默认为4个比特位;
勾选刚刚配置的外部中断线3和4,并配置抢占优先级 Preemption Priority 和响应优先级 Sub Priority。

三、生成代码

命名项目名称选择存放路径,选择IDE为MDK-ARM

Code Generator勾选.c/.h

点击GENERATE CODE生成代码。

四、编写逻辑程序

stm32f1xx_hal_gpio.c 文件中找到外部中断服务函数,发现里面调用了HAL_GPIO_EXTI_IRQHandler(KEY0_Pin)我们跳转到这个函数里

里面有判断几号线中断,清除标志位操作,然后调用了HAL_GPIO_EXIT_Callback(GPIO_Pin),这个函数的作用是外部中断后会执行此回调函数

这个函数的类型是__weak,weak是弱化标识,说明这个函数是弱化函数,我们可以在其它地方定义一个一模一样的函数,在编译时系统就会忽略掉这个weak函数。

我们可以在gpio.c里面自己定义一个回调函数HAL_GPIO_EXTI_Callback()(注意在USER CODE BEGIN和USER CODE END之间添加自己编写的代码,防止重新生成代码时自己的代码被覆盖)

在自定义应用程序编写自己要实现的外部中断操作:

/* USER CODE BEGIN 1 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin==KEY1_Pin)   //判断是哪个中断引脚被触发
	{
        // 自定义应用程序
        
	}
}
/* USER CODE END 1 */

我们要通过外部中断来实现按键快速响应,并且按键需要进行消抖,我们可以在回调函数里进行一个标志位的切换,原因是中断函数不宜进行过多的操作,避免影响到系统的稳定。我们可以通过下面的操作来实现:

//按钮中断函数

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
   if( GPIO_Pin == switch_interrupt_Pin)//判断外部中断源
   {
    update = 1;
   }
}

/*在主函数里进行标志位的判断*/

		if(update==1){
			HAL_Delay(20);
			if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_9) == GPIO_PIN_SET)
			{
				HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);//翻转PA5状态
				HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);//翻转PA5状态
				manufacture_sum++;
				printf("AT+MQTTPUB=0,\"/sys/j092L3Wv0td/IntelligentPlant/thing/event/property/post\",\"{params:{\\\"E_OutPut_UP\\\":%u}}\",0,0\r\n",manufacture_sum);
	//			HAL_Delay(100);
//				update = 0;
			}
			update = 0;
		}


                        
参考链接:https://blog.csdn.net/qq_36347513/article/details/112508465

  • 14
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
en.stm32cubemx-win-v6-9-1是一个针对STMicroelectronics的STM32微控制器系列的软件工具。这个软件工具可在Windows操作系统上使用,其版本号为6.9.1。 STM32微控制器系列是STMicroelectronics推出的一种低功耗、高性能的微控制器芯片系列。这些微控制器芯片广泛用于嵌入式系统、物联网设备、工业自动化以及各种电子产品中。STM32微控制器系列有多个不同的型号和系列,每个型号都有不同的功能和性能特点。 en.stm32cubemx-win-v6-9-1是用于STM32微控制器系列的软件工具。它具有通过图形化界面进行配置和生成代码的功能,使得开发人员可以更加方便地进行STM32微控制器的软件开发。通过这个软件工具,开发人员可以选择不同的模块、外设和功能,然后生成相应的初始化代码。这个软件工具还可以提供一些自动生成的模版,使得开发人员可以快速开始开发。 除了代码生成外,en.stm32cubemx-win-v6-9-1还提供了一些其他功能。例如,它可以通过图形化界面配置时钟树、引脚映射、中断优先级等。此外,该软件工具还可以集成其他开发环境,例如Keil或IAR,以便更直接地进行代码编辑和编译。 总而言之,en.stm32cubemx-win-v6-9-1是一个用于STM32微控制器系列的软件工具,它提供了图形化界面配置和生成代码的功能,帮助开发人员更方便地进行STM32微控制器的软件开发。它是一个很有用的工具,可以提高开发效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值