STM32—外部中断_按键控制 LED

目录

1 、 电路构成及原理图 

2 、编写实现代码 

main.c

 exti.c

3、代码讲解

4、烧录到开发板调试、验证代码

5、检验效果

开发板介绍

相关笔记


此笔记基于朗峰 STM32F103 系列全集成开发板的记录 

1 、 电路构成及原理图 

外部中断---EXTI 
EXTI(External interrupt/event controller)—外部中断/事件控制器,
管理着控制器的  20  个中断/事件线并且每个中断/事件线都对应有
一个边沿(上升沿/下降沿)检测器,可以实现输入信号的边沿检测。
EXTI  可对每个中断/事件线进行单独配置,可以配置为中断或者事件,
以及触发事件的属性。STM32F103  的中断控制器支持  20 个外部中
断/事件请求。

2 、编写实现代码 

main.c

 exti.c

 

3、代码讲解

按部就班的先初始化产生中断的引脚 PC8 也就是 KEY1 引脚,因KEY1 的另一个引脚连接在低电平 GND 端所以选择下降沿触发(按下按键时 PC8 引脚会由高电平被拉到低电平),也是这个原因 PC8 选择上拉即平时没有按下 KEY1 时 PC8 是高电平状态。 

随后就要用 HAL 库函数 HAL_NVIC_SetPriority()设置中断的优先级别了,这里中断线我们选择 EXTI9_5 因前面介绍了中断线和中断服务 函 数 的 对 应 关 系 , 引 脚 PC8 对 应 的 中 断 服 务 函 数 是EXTI9_5_IRQHandler()。

main 没有更多好说的,依旧是初始化 HAL 库、初始化系统时钟(72Mhz)、初始化 LED、初始化按键最后初始化按键的外部中断。 因控制逻辑写在了中断服务函数里,程序运行后有中断产生时就自动运行了,所以 main 函数里也就没有什么需要处理了。 

4、烧录到开发板调试、验证代码

 工程编译没有问题后就下载到开发板中检验代码运行情况,把代码下载到朗峰 F1 开发板方法是:用朗峰 F1 开发板保护盒配的 ST-LINK 下载器 ,连接到开发板的 SWD 插针上注意引脚对应关系,不要插错了。 

然后编译一次(按 ),编译结果显示 0 错误 0 警告就 OK 


 
之后再按 将代码下载到开发板。 

5、检验效果

下载完成后,连接好开发板电源并按下电源开关,

按下 KEY1 看到LED1 亮起,

再次按 KEY1 键 LED1 熄灭。

工程到此验证无误。 

开发板介绍

STM32F103RCT6开发板——全集成开发板,外设齐全,资料详尽,新手学习好帮手!

相关笔记

STM32介绍-CSDN博客

STM32入坑-CSDN博客

STM32-寄存器和HAL库以及如何使用-CSDN博客

STM32-开发环境之MDK5-CSDN博客

STM32-开发环境之STM32CubeMX-CSDN博客

STM32-开发工具-CSDN博客

STM32-开发板介绍-CSDN博客

STM32-点亮 LED-CSDN博客

STM32-启用蜂鸣器-CSDN博客

STM32—启用按键-CSDN博客

STM32—触摸键-CSDN博客

STM32—PWM输出-CSDN博客

STM32—控制蜂鸣器(定时器)CSDN博客

  • 25
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个很常见的任务,我可以为您提供一些代码示例来实现这个功能。 首先,您需要连接一个按键和一个LED灯到您的STM32开发板上。假设您将按键连接到引脚PA0,将LED灯连接到引脚PB0。 接下来,您需要在代码中初始化这些引脚。这可以通过以下方式完成: ```c GPIO_InitTypeDef GPIO_InitStruct; // 初始化PA0引脚为输入模式 GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化PB0引脚为输出模式 GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); ``` 在这个例子中,我们将PA0引脚初始化为输入模式,并启用上拉电阻。这意味着当按键没有按下时,PA0引脚将被拉高。当按键按下时,PA0引脚将会被拉低。我们将PB0引脚初始化为输出模式,这意味着我们可以通过在代码中设置它的状态来控制LED灯的亮度。 接下来,您需要配置外部中断外部中断是一种特殊的中断,可以在引脚状态发生变化时触发。在这个例子中,我们将使用外部中断来检测按键是否被按下。这可以通过以下方式完成: ```c EXTI_HandleTypeDef EXTI_InitStruct; // 配置外部中断 EXTI_InitStruct.Pin = GPIO_PIN_0; EXTI_InitStruct.Mode = EXTI_MODE_INTERRUPT; EXTI_InitStruct.Trigger = EXTI_TRIGGER_FALLING; HAL_EXTI_SetConfigLine(&EXTI_InitStruct, EXTI_LINE_0); ``` 在这个例子中,我们将外部中断配置为检测PA0引脚的下降沿。这意味着当按键被按下时,外部中断将会触发。 最后,您需要实现中断处理函数,以便在按键被按下时切换LED灯的状态。这可以通过以下方式完成: ```c void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == GPIO_PIN_0) { // 切换LED灯的状态 HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0); } } ``` 在这个例子中,我们实现了一个名为`HAL_GPIO_EXTI_Callback`的中断处理函数。当外部中断被触发时,这个函数将被调用。在这个函数中,我们检查触发中断的引脚是否为PA0引脚。如果是,我们将使用`HAL_GPIO_TogglePin`函数来切换LED灯的状态。 以上就是使用stm32外部中断实现按键控制LED灯的示例代码。希望这能帮助到您!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值