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
|