打印
[MM32软件]

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

[复制链接]
36|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
3g, GPIO, IO, gp, pi
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);
}


17
头文件定义
#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。

代码
工程下载连接
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_43932857/article/details/131136396

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

40

帖子

0

粉丝