stm32外部中断模式控制灯亮灭

文章目录

  • stm32外部中断模式控制灯亮灭
  • 软件版本:
  • 1. 通过STMCube配置项目
  • 1.1 引脚配置
  • 1.2 配置SYS
  • 1.3 配置RCC
  • 1.4 配置GPIO
  • 1.5 配置NVIC
  • 1.6 时钟
  • 1.7 代码创建
  • 2. 通过KEil配置代码
  • 2.1 添加代码
  • 2.1.1打开生成的项目,打开stm32f1xx_it.c,找到EXTI9_5_IRQHandler()函数
  • 2.1.2 选中HAL_GPIO_EXTI_IRQHandler,按F12跳转到stm32f1xx_hal_gpio.c,找到HAL_GPIO_EXTI_Callback()这个函数
  • 2.2 编译成HEX文件
  • 2.3 烧录
  • 3. 运行
  • 4.总结
  • 5.参考资料


软件版本:

STM32CubeMX:6.6.0
KEIl:5.37.0.0
FlyMcu:0.188
硬件:
STM32F103ZET6

1. 通过STMCube配置项目

1.1 引脚配置

A4输出控制灯的亮灭,设置为GPIO_Output

A1持续输出高电平,设置同上

A7持续输出低电平,设置同上

B7模拟开关,设置为GPIO_EXTI5

stm32cubemx如何将单片机设置成按键 stm32单片机按键控制灯亮灭_外部中断

1.2 配置SYS

在Pinout &Configuration 栏里,配置系统调试接口SYS,选择 Serial Wire

stm32cubemx如何将单片机设置成按键 stm32单片机按键控制灯亮灭_外部中断_02

1.3 配置RCC

RCC设置,选择 HSE (外部高速时钟)为 Crystal/Ceramic Resonator

stm32cubemx如何将单片机设置成按键 stm32单片机按键控制灯亮灭_stm32_03

1.4 配置GPIO

选择 LED 灯引脚 PA4,设置引脚为输出模式 GPIO_Output;
选择 PB7作为外部中断的引脚,设置为与中断线 GPIO_EXTI7 连接

PA1为高电平,PA7为低电平。

将PA4的Uesr Label 改为LED,PB7的改为SWITCH

stm32cubemx如何将单片机设置成按键 stm32单片机按键控制灯亮灭_引脚_04

stm32cubemx如何将单片机设置成按键 stm32单片机按键控制灯亮灭_stm32_05

1.5 配置NVIC

stm32cubemx如何将单片机设置成按键 stm32单片机按键控制灯亮灭_单片机_06

1.6 时钟

stm32cubemx如何将单片机设置成按键 stm32单片机按键控制灯亮灭_单片机_07

1.7 代码创建

stm32cubemx如何将单片机设置成按键 stm32单片机按键控制灯亮灭_外部中断_08

stm32cubemx如何将单片机设置成按键 stm32单片机按键控制灯亮灭_arm_09

2. 通过KEil配置代码

2.1 添加代码

  • 外部中断处理函数

外部中断处理逻辑与按键扫描一样,当检测到按键时, LED 状态变化。回调函数中无需处理中断标志位,是因为此项工作已经由 HAL_GPIO_EXTI_IRQHandler 完成。

2.1.1打开生成的项目,打开stm32f1xx_it.c,找到EXTI9_5_IRQHandler()函数

stm32cubemx如何将单片机设置成按键 stm32单片机按键控制灯亮灭_外部中断_10

2.1.2 选中HAL_GPIO_EXTI_IRQHandler,按F12跳转到stm32f1xx_hal_gpio.c,找到HAL_GPIO_EXTI_Callback()这个函数

stm32cubemx如何将单片机设置成按键 stm32单片机按键控制灯亮灭_引脚_11

将下面代码写入HAL_GPIO_EXTI_Callback()对应位置处

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) 
{ 
	 if( GPIO_Pin == SWITCH_Pin ) // 判断外部中断源
		{
			HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); // 翻转LED状态
		}
}

stm32cubemx如何将单片机设置成按键 stm32单片机按键控制灯亮灭_单片机_12

注意:这时会报错有些管脚未定义,要将头文件main.h中的宏定义复制到stm32f1xx_hal_gpio.c中

stm32cubemx如何将单片机设置成按键 stm32单片机按键控制灯亮灭_单片机_13

stm32cubemx如何将单片机设置成按键 stm32单片机按键控制灯亮灭_stm32_14

2.2 编译成HEX文件

stm32cubemx如何将单片机设置成按键 stm32单片机按键控制灯亮灭_引脚_15

2.3 烧录

stm32cubemx如何将单片机设置成按键 stm32单片机按键控制灯亮灭_引脚_16

3. 运行

stm32cubemx如何将单片机设置成按键 stm32单片机按键控制灯亮灭_单片机_17

4.总结

本次实验运用了STM外部中断模式控制LED灯亮灭,初步体会了外部中断的用法,同时也更熟悉了对STM32CubeMX和Keil5的运用。