接上篇的内容,我们继续分享精彩的测试内容。
三、呼吸灯测试
MCXA153板载五个LED灯,用IO高低电平点灯有点低级。但是可以点呼吸灯,就有技术含量了。
呼吸灯一般是由PWM来控制,也可以由定时器中断来实现。在这个实验中就是用定时中断实现的。呼吸灯的原理是光在亮度上发生平滑的、周期性的变化,就像人在呼吸一样,由暗逐渐变亮,再由亮逐渐变暗。其核心原理是改变LED两端的电压来实现。在本项目中是由D7来实现,既是下图中间红色LED。
代码实现
首先LED对应IO口的重定义
/*! @brief GPIO for LED. */
#ifndef BOARD_LED_RED_GPIO
#define BOARD_LED_RED_GPIO GPIO3
#endif
#ifndef BOARD_LED_RED_GPIO_PIN
#define BOARD_LED_RED_GPIO_PIN 12U
#endif
#ifndef BOARD_LED_GREEN_GPIO
#define BOARD_LED_GREEN_GPIO GPIO3
#endif
#ifndef BOARD_LED_GREEN_GPIO_PIN
#define BOARD_LED_GREEN_GPIO_PIN 13U
#endif
#ifndef BOARD_LED_BLUE_GPIO
#define BOARD_LED_BLUE_GPIO GPIO3
#endif
#ifndef BOARD_LED_BLUE_GPIO_PIN
#define BOARD_LED_BLUE_GPIO_PIN 0U
用于控制LED的PORT3初始化
void BOARD_InitPins(void)
{
/* Write to GPIO3: Peripheral clock is enabled /
CLOCK_EnableClock(kCLOCK_GateGPIO3);
/ Write to PORT3: Peripheral clock is enabled /
CLOCK_EnableClock(kCLOCK_GatePORT3);
/ GPIO3 peripheral is released from reset /
RESET_ReleasePeripheralReset(kGPIO3_RST_SHIFT_RSTn);
/ PORT3 peripheral is released from reset */
RESET_ReleasePeripheralReset(kPORT3_RST_SHIFT_RSTn);
gpio_pin_config_t LED_RED_config = {
.pinDirection = kGPIO_DigitalOutput,
.outputLogic = 0U
};
/* Initialize GPIO functionality on pin PIO3_12 (pin 38) */
GPIO_PinInit(BOARD_INITPINS_LED_RED_GPIO, BOARD_INITPINS_LED_RED_PIN, &LED_RED_config);
const port_pin_config_t LED_RED = {/* Internal pull-up/down resistor is disabled */
kPORT_PullDisable,
/* Low internal pull resistor value is selected. */
kPORT_LowPullResistor,
/* Fast slew rate is configured */
kPORT_FastSlewRate,
/* Passive input filter is disabled */
kPORT_PassiveFilterDisable,
/* Open drain output is disabled */
kPORT_OpenDrainDisable,
/* Low drive strength is configured */
kPORT_LowDriveStrength,
/* Normal drive strength is configured */
kPORT_NormalDriveStrength,
/* Pin is configured as P3_12 */
kPORT_MuxAlt0,
/* Digital input enabled */
kPORT_InputBufferEnable,
/* Digital input is not inverted */
kPORT_InputNormal,
/* Pin Control Register fields [15:0] are not locked */
kPORT_UnlockRegister};
/* PORT3_12 (pin 38) is configured as P3_12 */
PORT_SetPinConfig(BOARD_INITPINS_LED_RED_PORT, BOARD_INITPINS_LED_RED_PIN, &LED_RED);
}
定时器中断来实现SysTick();
static void SysTick_init(void) {
/* Initialize the systick module. /
SysTick_Config(SYSTICK_TICKS);
}
LED亮灭控制
void SysTick_Handler(void)
{
/ Toggle pin connected to LED */
GPIO_PortToggle(BOARD_LED_RED_GPIO, 1u << BOARD_LED_RED_GPIO_PIN);
}
四、小结
通过定时器中断实现了LED呼吸灯效果,能够控制LED平滑渐变亮灭。达到呼吸效果。NXP芯片的使用还是很便利的,开发板的功能也强大,还需进一步挖掘其强大的潜力。

