查看MAX78000FTHR开发板的说明书和电路板
RGB灯对应D1,整体是一个模块,对应3个灯。


R红灯:P2.0
G绿灯:P2.1
B蓝灯:P2.2
低电平——亮灯
高电平——灭灯
要点亮RGB灯,只需要把P2.0、P2.1、P2.2设置为普通GPIO口,方向为输出即可。
在Eclipse MaximSDK中,ADI提供了现成的HAL库(Hardware Abstraction Layer,硬件抽象层),类似STM32的HAL库
这样我们就不需要直接操作寄存器,只需要操作对应的函数即可。
我们新建1个程序,基于官方例程GPIO

这是原版例程
他的功能是:读取按钮2(SW2 P1.7)的值,将该值赋予LED1(P2.0红灯)
按下按钮1(SW1 P0.2)将会产生中断,中断函数会执行P0.9翻转的动作。
/**
* @file main.c
* @brief GPIO Example
* @details
*/
/******************************************************************************
*
* Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by
* Analog Devices, Inc.),
* Copyright (C) 2023-2024 Analog Devices, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************/
/***** Includes *****/
#include <stdio.h>
#include <string.h>
#include "mxc_device.h"
#include "mxc_delay.h"
#include "nvic_table.h"
#include "pb.h"
#include "board.h"
#include "gpio.h"
/***** Definitions *****/
#ifdef BOARD_EVKIT_V1
#define MXC_GPIO_PORT_IN MXC_GPIO2
#define MXC_GPIO_PIN_IN MXC_GPIO_PIN_6
#define MXC_GPIO_PORT_OUT MXC_GPIO0
#define MXC_GPIO_PIN_OUT MXC_GPIO_PIN_2
#define MXC_GPIO_PORT_INTERRUPT_IN MXC_GPIO2
#define MXC_GPIO_PIN_INTERRUPT_IN MXC_GPIO_PIN_7
#define MXC_GPIO_PORT_INTERRUPT_STATUS MXC_GPIO0
#define MXC_GPIO_PIN_INTERRUPT_STATUS MXC_GPIO_PIN_3
#endif
#ifdef BOARD_FTHR_REVA
#define MXC_GPIO_PORT_IN MXC_GPIO1
#define MXC_GPIO_PIN_IN MXC_GPIO_PIN_7
#define MXC_GPIO_PORT_OUT MXC_GPIO2
#define MXC_GPIO_PIN_OUT MXC_GPIO_PIN_0
#define MXC_GPIO_PORT_INTERRUPT_IN MXC_GPIO0
#define MXC_GPIO_PIN_INTERRUPT_IN MXC_GPIO_PIN_2
#define MXC_GPIO_PORT_INTERRUPT_STATUS MXC_GPIO0
#define MXC_GPIO_PIN_INTERRUPT_STATUS MXC_GPIO_PIN_9
#endif
/***** Globals *****/
/***** Functions *****/
void gpio_isr(void *cbdata)
{
mxc_gpio_cfg_t *cfg = cbdata;
MXC_GPIO_OutToggle(cfg->port, cfg->mask);
}
int main(void)
{
mxc_gpio_cfg_t gpio_in;
mxc_gpio_cfg_t gpio_out;
mxc_gpio_cfg_t gpio_interrupt;
mxc_gpio_cfg_t gpio_interrupt_status;
#ifdef BOARD_EVKIT_V1
printf("\n\n***** GPIO Example *****\n\n");
printf("1. This example reads P2.6 (PB1 input) and outputs the same state onto\n");
printf(" P0.2 (LED1).\n");
printf("2. An interrupt is set up on P2.7 (PB2 input). P0.3 (LED2) toggles when\n");
printf(" that interrupt occurs.\n\n");
#else
printf("\n\n***** GPIO Example *****\n\n");
printf("1. This example reads P1.7 (SW2 input) and outputs the same state onto\n");
printf(" P2.0 (LED1).\n");
printf("2. An interrupt is set to occur when SW1 (P0.2) is pressed. P0.9 (SDIO3 pin\n");
printf(" on header J4) toggles when that interrupt occurs.\n\n");
#endif
/* Setup interrupt status pin as an output so we can toggle it on each interrupt. */
gpio_interrupt_status.port = MXC_GPIO_PORT_INTERRUPT_STATUS;
gpio_interrupt_status.mask = MXC_GPIO_PIN_INTERRUPT_STATUS;
gpio_interrupt_status.pad = MXC_GPIO_PAD_NONE;
gpio_interrupt_status.func = MXC_GPIO_FUNC_OUT;
gpio_interrupt_status.vssel = MXC_GPIO_VSSEL_VDDIO;
gpio_interrupt_status.drvstr = MXC_GPIO_DRVSTR_0;
MXC_GPIO_Config(&gpio_interrupt_status);
/*
* Set up interrupt pin.
* Switch on EV kit is open when non-pressed, and grounded when pressed. Use an internal pull-up so pin
* reads high when button is not pressed.
*/
gpio_interrupt.port = MXC_GPIO_PORT_INTERRUPT_IN;
gpio_interrupt.mask = MXC_GPIO_PIN_INTERRUPT_IN;
gpio_interrupt.pad = MXC_GPIO_PAD_PULL_UP;
gpio_interrupt.func = MXC_GPIO_FUNC_IN;
gpio_interrupt.vssel = MXC_GPIO_VSSEL_VDDIOH;
gpio_interrupt.drvstr = MXC_GPIO_DRVSTR_0;
MXC_GPIO_Config(&gpio_interrupt);
MXC_GPIO_RegisterCallback(&gpio_interrupt, gpio_isr, &gpio_interrupt_status);
MXC_GPIO_IntConfig(&gpio_interrupt, MXC_GPIO_INT_FALLING);
MXC_GPIO_EnableInt(gpio_interrupt.port, gpio_interrupt.mask);
NVIC_EnableIRQ(MXC_GPIO_GET_IRQ(MXC_GPIO_GET_IDX(MXC_GPIO_PORT_INTERRUPT_IN)));
/*
* Setup input pin.
* Switch on EV kit is open when non-pressed, and grounded when pressed. Use an internal pull-up so pin
* reads high when button is not pressed.
*/
gpio_in.port = MXC_GPIO_PORT_IN;
gpio_in.mask = MXC_GPIO_PIN_IN;
gpio_in.pad = MXC_GPIO_PAD_PULL_UP;
gpio_in.func = MXC_GPIO_FUNC_IN;
gpio_in.vssel = MXC_GPIO_VSSEL_VDDIO;
gpio_in.drvstr = MXC_GPIO_DRVSTR_0;
MXC_GPIO_Config(&gpio_in);
/* Setup output pin. */
gpio_out.port = MXC_GPIO_PORT_OUT;
gpio_out.mask = MXC_GPIO_PIN_OUT;
gpio_out.pad = MXC_GPIO_PAD_NONE;
gpio_out.func = MXC_GPIO_FUNC_OUT;
gpio_out.vssel = MXC_GPIO_VSSEL_VDDIO;
gpio_out.drvstr = MXC_GPIO_DRVSTR_0;
MXC_GPIO_Config(&gpio_out);
while (1) {
/* Read state of the input pin. */
if (MXC_GPIO_InGet(gpio_in.port, gpio_in.mask)) {
/* Input pin was high, set the output pin. */
MXC_GPIO_OutSet(gpio_out.port, gpio_out.mask);
} else {
/* Input pin was low, clear the output pin. */
MXC_GPIO_OutClr(gpio_out.port, gpio_out.mask);
}
}
return 0;
}我们在官方例程的基础上,修改下,实现功能是:GRB灯依次闪烁
为了实现延时,需要添加头文件
#include "mxc_delay.h"
main.c文件如下:
#include <stdio.h>
#include <string.h>
#include "mxc_device.h"
#include "mxc_delay.h"
#include "nvic_table.h"
#include "pb.h"
#include "board.h"
#include "gpio.h"
#define MXC_R_PORT_OUT MXC_GPIO2
#define MXC_R_PIN_OUT MXC_GPIO_PIN_0
#define MXC_G_PORT_OUT MXC_GPIO2
#define MXC_G_PIN_OUT MXC_GPIO_PIN_1
#define MXC_B_PORT_OUT MXC_GPIO2
#define MXC_B_PIN_OUT MXC_GPIO_PIN_2
int main(void)
{
mxc_gpio_cfg_t LEDR,LEDG,LEDB;
/* Setup output pin. */
LEDR.port = MXC_R_PORT_OUT; //端口号
LEDR.mask = MXC_R_PIN_OUT; //针脚号
LEDR.pad = MXC_GPIO_PAD_NONE; //上拉还是下拉
LEDR.func = MXC_GPIO_FUNC_OUT; //设置为GPIO功能
LEDR.vssel = MXC_GPIO_VSSEL_VDDIOH; //初始电压
LEDR.drvstr = MXC_GPIO_DRVSTR_0; //驱动强度
MXC_GPIO_Config(&LEDR);
/* Setup output pin. */
LEDG.port = MXC_G_PORT_OUT; //端口号
LEDG.mask = MXC_G_PIN_OUT; //针脚号
LEDG.pad = MXC_GPIO_PAD_NONE; //上拉还是下拉
LEDG.func = MXC_GPIO_FUNC_OUT; //设置为GPIO功能
LEDG.vssel = MXC_GPIO_VSSEL_VDDIOH; //初始电压
LEDG.drvstr = MXC_GPIO_DRVSTR_0; //驱动强度
MXC_GPIO_Config(&LEDG);
/* Setup output pin. */
LEDB.port = MXC_B_PORT_OUT; //端口号
LEDB.mask = MXC_B_PIN_OUT; //针脚号
LEDB.pad = MXC_GPIO_PAD_NONE; //上拉还是下拉
LEDB.func = MXC_GPIO_FUNC_OUT; //设置为GPIO功能
LEDB.vssel = MXC_GPIO_VSSEL_VDDIOH; //初始电压
LEDB.drvstr = MXC_GPIO_DRVSTR_0; //驱动强度
MXC_GPIO_Config(&LEDB);
while (1)
{
MXC_GPIO_OutClr(LEDR.port, LEDR.mask); //亮灯
MXC_Delay(1000000); //1秒
MXC_GPIO_OutSet(LEDR.port, LEDR.mask); //灭灯
MXC_Delay(1000000); //1秒
MXC_GPIO_OutClr(LEDG.port, LEDG.mask); //亮灯
MXC_Delay(1000000); //1秒
MXC_GPIO_OutSet(LEDG.port, LEDG.mask); //灭灯
MXC_Delay(1000000); //1秒
MXC_GPIO_OutClr(LEDB.port, LEDB.mask); //亮灯
MXC_Delay(1000000); //1秒
MXC_GPIO_OutSet(LEDB.port, LEDB.mask); //灭灯
MXC_Delay(1000000); //1秒
}
return 0;
}编译成功后,在Debug——Debug Configuration页面,选择工程名称RGB


下载后就可以看到RGB灯依次闪烁了。

我要赚赏金
