这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » NXP-MCXA153开发之八——按键

共7条 1/1 1 跳转至

NXP-MCXA153开发之八——按键

助工
2024-06-16 11:56:52     打赏

【目的】体验MCXA153的GPIO输入功能。

【实验步骤】

官方的SDK已经提供了按键中断的示例,这里直接导入他的工程,来体验。

1、点击导入SDK示例:

image.png

2、选择工程存放在的目录,选择driver_examples下面的gpio下的gpio_input_interrupt示例。

image.png

3、工程目录source下面的gpio_input_interrupt.c为用户主函数的文件。

image.png

4、函数中,先用宏对对应的PORT、PIN、中断进行了重新定义:

/*******************************************************************************
* Definitions
******************************************************************************/
#define BOARD_LED_GPIO       BOARD_LED_RED_GPIO
#define BOARD_LED_GPIO_PIN   BOARD_LED_RED_GPIO_PIN
#define BOARD_SW_GPIO        BOARD_SW2_GPIO
#define BOARD_SW_GPIO_PIN    BOARD_SW2_GPIO_PIN
#define BOARD_SW_NAME        BOARD_SW2_NAME
#define BOARD_SW_IRQ         BOARD_SW2_IRQ
#define BOARD_SW_IRQ_HANDLER BOARD_SW2_IRQ_HANDLER

5、再定义了一个按健的标志位:

/* Whether the SW button is pressed */
volatile bool g_ButtonPress = false;

6、用户的中函数实现:

/*!
* @brief Interrupt service fuction of switch.
*
* This function toggles the LED
*/
void BOARD_SW_IRQ_HANDLER(void)
{

/* Clear external interrupt flag. */
GPIO_GpioClearInterruptFlags(BOARD_SW_GPIO, 1U << BOARD_SW_GPIO_PIN);
/* Change state of button. */
g_ButtonPress = true;
SDK_ISR_EXIT_BARRIER;
}

在中断回调中,先清除产生的标志位,然后把标志志为真。

7、main的代码如下:

/*!
* @brief Main function
*/
int main(void)
{
/* Define the init structure for the input switch pin */
gpio_pin_config_t sw_config = {
kGPIO_DigitalInput,
0,
};

/* Define the init structure for the output LED pin */
gpio_pin_config_t led_config = {
kGPIO_DigitalOutput,
0,
};

CLOCK_EnableClock(kCLOCK_GateGPIO3);

BOARD_InitPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();

/* Print a note to terminal. */
PRINTF("\r\n GPIO Driver example\r\n");
PRINTF("\r\n Press %s to turn on/off a LED \r\n", BOARD_SW_NAME);

/* Init input switch GPIO. */

GPIO_SetPinInterruptConfig(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN, kGPIO_InterruptFallingEdge);

EnableIRQ(BOARD_SW_IRQ);
GPIO_PinInit(BOARD_SW_GPIO, BOARD_SW_GPIO_PIN, &sw_config);

/* Init output LED GPIO. */
GPIO_PinInit(BOARD_LED_GPIO, BOARD_LED_GPIO_PIN, &led_config);

while (1)
{
if (g_ButtonPress)
{
PRINTF(" %s is pressed \r\n", BOARD_SW_NAME);
/* Toggle LED. */
GPIO_PortToggle(BOARD_LED_GPIO, 1U << BOARD_LED_GPIO_PIN);
/* Reset state of button. */
g_ButtonPress = false;
}
}
}

主函数中,先定义了两个gpio结构体,一个为LED灯,一个为按键,分别定义为输出与输入。然后执行了板级的Init。

GPIO_SetPinInterruptConfig配置按键为下拉产生中断。

在while循环中,判断按键的标志,如果有按键按下,则进行LED的反转。

【实现效果】

按下按键后,在串口终端中提示按下,同时翻了LED灯。


 GPIO Driver example


 Press SW2 to turn on/off a LED 

 SW2 is pressed 

 SW2 is pressed 

 SW2 is pressed 

 SW2 is pressed 

 SW2 is pressed 







关键词: FRDM     MCXA153     GPIO     SW    

专家
2024-06-16 14:09:08     打赏
2楼

看看!


专家
2024-06-16 14:36:14     打赏
3楼

看看


高工
2024-06-16 22:40:36     打赏
4楼

看看


高工
2024-06-17 13:20:28     打赏
5楼

看看看看


专家
2024-06-23 09:48:02     打赏
6楼

看看


院士
2024-06-23 17:22:22     打赏
7楼

谢谢分享。


共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]