【软件环境】
MCUXPresso IDE 25.6
【工程配置】
从数据手册中,可以得到可以供用的是wakeup按键。为了增加可观性,我再添加另一个LED:

图形化配置后如下:

更新源代码后,可以看到如下代码:
void BOARD_InitPins(void)
{
/* Enables the clock for the GPIO0 module */
GPIO_PortInit(GPIO, 0);
gpio_pin_config_t gpio0_pinM2_config = {
.pinDirection = kGPIO_DigitalInput,
.outputLogic = 0U
};
gpio_interrupt_config_t gpio0_pinM2_int_config = {
.mode = kGPIO_PinIntEnableEdge,
.polarity = kGPIO_PinIntEnableLowOrFall
};
/* Initialize GPIO functionality on pin PIO0_11 (pin M2) */
GPIO_PinInit(GPIO, 0U, 11U, &gpio0_pinM2_config);
GPIO_SetPinInterruptConfig(GPIO, 0U, 11U, &gpio0_pinM2_int_config);
GPIO_PinEnableInterrupt(GPIO, 0U, 11U, (uint32_t)kGPIO_InterruptA);
/* Initialize FC3_USART_DATA functionality on pin GPIO_24 (pin E5) */
IO_MUX_SetPinMux(IO_MUX_FC3_USART_DATA);
/* Initialize GPIO11 functionality on pin GPIO_11 (pin M2) */
IO_MUX_SetPinMux(IO_MUX_GPIO11);
}可以看到对GPIO_0、GPIO_1已经初始化输出模式。GPIO_11为输入模式。
2、rw612的GPIO输出操作
/*!
* @brief Sets the output level of the one GPIO pin to the logic 1 or 0.
*
* @param base GPIO peripheral base pointer(Typically GPIO)
* @param port GPIO port number
* @param pin GPIO pin number
* @param output GPIO pin output logic level.
* - 0: corresponding pin output low-logic level.
* - 1: corresponding pin output high-logic level.
*/
static inline void GPIO_PinWrite(GPIO_Type *base, uint32_t port, uint32_t pin, uint8_t output)
{
base->B[port][pin] = output;
}根据sdk中示例,我添加测试代码如下:
/*
* Copyright (c) 2013 - 2015, Freescale Semiconductor, Inc.
* Copyright 2016-2017, 2024 NXP
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "fsl_device_registers.h"
#include "fsl_debug_console.h"
#include "board.h"
#include "app.h"
/*******************************************************************************
* Definitions
******************************************************************************/
/*******************************************************************************
* Prototypes
******************************************************************************/
/*******************************************************************************
* Variables
******************************************************************************/
volatile uint32_t g_systickCounter;
volatile bool g_InputSignal = false;
/*******************************************************************************
* Code
******************************************************************************/
/*!
* @brief Interrupt service fuction of switch.
*/
void GPIO_INTA_IRQHandler(void)
{
/* clear the interrupt status */
GPIO_PinClearInterruptFlag(GPIO, 0, 11, 0);
/* Change state of switch. */
g_InputSignal = true;
SDK_ISR_EXIT_BARRIER;
}
void SysTick_Handler(void)
{
if (g_systickCounter != 0U)
{
g_systickCounter--;
}
}
void SysTick_DelayTicks(uint32_t n)
{
g_systickCounter = n;
while (g_systickCounter != 0U)
{
}
}
/*!
* @brief Main function
*/
int main(void)
{
char ch;
/* Init board hardware. */
BOARD_InitHardware();
PRINTF("MCUX SDK version: %s\r\n", MCUXSDK_VERSION_FULL_STR);
GPIO_PinEnableInterrupt(GPIO, 0, 11, 0);
EnableIRQ(GPIO_INTA_IRQn);
PRINTF("hello world.\r\n");
/* Set systick reload value to generate 1ms interrupt */
if (SysTick_Config(SystemCoreClock / 1000U))
{
while (1)
{
}
}
while (1)
{
SysTick_DelayTicks(100U);
GPIO_PinWrite(GPIO, 0, 0, 1);
SysTick_DelayTicks(100U);
GPIO_PinWrite(GPIO, 0, 0, 0);
if(g_InputSignal)
{
GPIO_PortToggle(GPIO, 0, (1U << 1));
g_InputSignal = false;
}
}
}这里我们需要注意,虽然在初始化了按键GPIO_11,但还是需要使用:
GPIO_PinEnableInterrupt(GPIO, 0, 11, 0); EnableIRQ(GPIO_INTA_IRQn);
来打开GPIO_11的中断,并使能GPIO_INTA_IRQn。
【下载验证】
下载好到开发板后,可以看到开板上的蓝色RGB灯以100ms的频率闪烁了。
同时按下wake按键后可以转另一个RGB灯。
【总结】
通过mcuxpresso ide的图形化配置,可以快速实现对GPIO output、OUTPUT的操作。
我要赚赏金
