MM32F3273G8P火龙果开发板MindSDK开发教程6 - Gpio外部中断的使用

该教程介绍了如何在MM32F3273G8P火龙果开发板上使用MindSDK进行GPIO外部中断的配置和处理。通过设置GPIO为上拉输入,配置双边触发,实现按键按下和松开的中断事件检测,中断处理函数分别打印按键按下和释放的信息。
摘要由CSDN通过智能技术生成

MM32F3273G8P火龙果开发板MindSDK开发教程5 - Gpio外部中断的使用

GPIO配置

原理图可知,用户按键连接PA0
在这里插入图片描述
常态高电平,按下后低电平,设置双边触发,中断触发读取值为0可知按下,中断触发读取值为1可知松开。

配置GPIO上拉输入,代码如下:

/* 调用GPIO的HAL库对象结构体声明GPIO对象 */
GPIO_Init_Type gpio_init;

/* 设置GPIO的模式 */
gpio_init.PinMode  = GPIO_PinMode_In_PullUp;
gpio_init.Speed = GPIO_Speed_50MHz;

/* 选择引脚初始化 */
gpio_init.Pins  = USER_KEY_PIN;
GPIO_Init(USER_KEY_PORT, &gpio_init);

外部中断配置

USER_SYSCFG_CLK_EN();
/* 将外部中断线设置为复用模式 */
SYSCFG_SetExtIntMux(SYSCFG_EXTIPort_GPIOA, SYSCFG_EXTILine_0);
/* 设置外部中断线的触发方式 */
EXTI_SetTriggerIn(EXTI, EXTI_LINE_0, EXTI_TriggerIn_BothEdges); 
/* 使能外部中断线 */
EXTI_EnableLineInterrupt(EXTI, EXTI_LINE_0, true);

prioritygroup = NVIC_GetPriorityGrouping();
NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(prioritygroup, 0, 0));
/* 使能对应的外部中断 */
NVIC_EnableIRQ(EXTI0_IRQn);

中断处理函数

/* EXTI IRQ Handler */
void BOARD_EXTI_IRQHandler(void)
{
    uint32_t flags = EXTI_GetLineStatus(BOARD_EXTI_PORT);
    if ( 0u != ( flags & BOARD_EXTI_LINE ) ) /* Interrupts. */
    {
        if (0 == GPIO_ReadInDataBit(USER_KEY_PORT,USER_KEY_PIN))
        {
            printf("user key press\r\n");
        }
        else if (1 == GPIO_ReadInDataBit(USER_KEY_PORT,USER_KEY_PIN))
        {
            printf("user key release\r\n");
        }
    }
    EXTI_ClearLineStatus(BOARD_EXTI_PORT, flags);
}

头文件定义

#ifndef __KEY_H__
#define __KEY_H__
#include "hal_common.h"
#include "hal_gpio.h"
#include "hal_rcc.h"
#include "hal_syscfg.h"
#include "hal_exti.h"

#define USER_KEY_PIN             GPIO_PIN_0
#define USER_KEY_PORT            GPIOA
#define USER_KEY                 GPIO_ReadInDataBit(USER_KEY_PORT, USER_KEY_PIN)
#define USER_KEY_GPIO_CLK_EN()   RCC_EnableAHB1Periphs(RCC_AHB1_PERIPH_GPIOA, true)
#define USER_SYSCFG_CLK_EN()     RCC_EnableAPB2Periphs(RCC_APB2_PERIPH_SYSCFG, true);



/*SYSCFG*/
#define BOARD_SYSCFG_EXTIPORT        SYSCFG_EXTIPort_GPIOA
#define BOARD_SYSCFG_EXTILINE        SYSCFG_EXTILine_0

/*EXTI*/
#define BOARD_EXTI_PORT              EXTI
#define BOARD_EXTI_LINE              EXTI_LINE_0
#define BOARD_EXTI_IRQN              EXTI0_IRQn
#define BOARD_EXTI_IRQHandler        EXTI0_IRQHandler

void BOARD_UserKeyInit(void);
#endif

实验现象

在这里插入图片描述
按下打印press,松开打印release。

代码

工程下载连接

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值