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

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

GPIO配置

原理图可知,用户按键连接PA0
MM32F3273G8P火龙果开发板MindSDK开发教程6 - Gpio外部中断的使用_第1张图片
常态高电平,按下后低电平,设置双边触发,中断触发读取值为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

实验现象

MM32F3273G8P火龙果开发板MindSDK开发教程6 - Gpio外部中断的使用_第2张图片
按下打印press,松开打印release。

代码

工程下载连接

你可能感兴趣的:(火龙果MM32F3273G8P,单片机,嵌入式硬件,mm32)