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

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

软件版本:

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

image-20221018162534540

1.2 配置SYS

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

在这里插入图片描述

1.3 配置RCC

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

image-20221018170403443

1.4 配置GPIO

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

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

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

image-20221021153934280

image-20221021160307242

1.5 配置NVIC

image-20221018171059010

1.6 时钟

image-20221021165616260

1.7 代码创建

image-20221018171538569

image-20221018171637491

2. 通过KEil配置代码

2.1 添加代码

  • 外部中断处理函数

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

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

image-20221021154746879

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

image-20221021155150114

将下面代码写入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状态
		}
}

image-20221021172733938

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

image-20221021155721401

image-20221021165735981

2.2 编译成HEX文件

image-20221019181042744

2.3 烧录

image-20221019181059726

3. 运行

在这里插入图片描述

4.总结

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

5.参考资料

STM32CubeMX 实现 LED 亮灭----中断模式_风霜叶的博客-CSDN博客

STM32外部中断模式控制LED灯亮灭_初见snow的博客-CSDN博客
226.3001.4187)

STM32外部中断模式控制LED灯亮灭_初见snow的博客-CSDN博客

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值