自学内容网 自学内容网

【STM32】STM32学习笔记-EXTI外部中断

外部中断(EXTI)是STM32单片机中常用的一种中断方式,它允许单片机对外部事件快速响应。本文将详细介绍如何使用STM32的EXTI外部中断,包括配置步骤和代码示例。

1. EXTI基本原理

STM32的EXTI模块可以响应来自GPIO引脚的外部事件或中断请求。每个EXTI线路可以独立配置触发方式,如上升沿、下降沿或双边沿触发。当配置的边沿检测到时,EXTI模块会产生一个中断请求,如果中断使能,则会触发中断服务程序执行。

2. 硬件准备

  • STM32F103C8T6开发板
  • 连接到GPIO引脚的外部设备(如按钮)

3. 软件配置

使用STM32CubeMX配置EXTI外部中断,步骤如下:

3.1 时钟树配置

确保GPIO和AFIO时钟使能。

3.2 外设参数配置

在STM32CubeMX的Pinout视图中,选择需要配置为外部中断的GPIO引脚,并配置为GPIO_EXTI[x]模式,其中x是EXTI线路编号。

3.3 NVIC配置

在NVIC中配置对应的中断优先级并使能。

4. 代码实现

4.1 包含头文件
#include "stm32f1xx_hal.h"
4.2 EXTI初始化
void EXTI_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    EXTI_HandleTypeDef EXTI_InitStruct = {0};

    __HAL_RCC_GPIOA_CLK_ENABLE();
    GPIO_InitStruct.Pin = GPIO_PIN_0; // 选择PA0作为外部中断输入
    GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; // 下降沿触发
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(EXTI0_IRQn);

    EXTI_InitStruct.Line = EXTI_LINE_0; // 选择EXTI0线路
    EXTI_InitStruct.Mode = EXTI_MODE_INTERRUPT;
    EXTI_InitStruct.Trigger = EXTI_TRIGGER_FALLING;
    EXTI_InitStruct.LineCmd = ENABLE;
    HAL_EXTI_Init(&EXTI_InitStruct);
}
4.3 中断服务函数
void EXTI0_IRQHandler(void)
{
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    if (GPIO_Pin == GPIO_PIN_0)
    {
        // 执行中断处理逻辑
    }
}

5. 主函数

在主函数中调用EXTI_Init函数进行初始化。

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    EXTI_Init();

    while (1)
    {
        // 主循环中的其他任务
    }
}

6. 注意事项

  • 确保硬件连接正确,特别是外部中断引脚的连接。
  • 在中断服务函数中清除中断标志位,避免重复进入中断。
  • EXTI线路编号与GPIO引脚编号相对应,如EXTI0对应PA0、PB0等。

通过上述步骤,我们可以在STM32F103C8T6上使用HAL库成功配置EXTI外部中断,并实现对外部事件的快速响应。这为开发需要快速响应外部事件的嵌入式系统提供了基础。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料


原文地址:https://blog.csdn.net/weixin_66608063/article/details/143031684

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!