基于亚博K210开发板——LED(RGB)点灯

开发板

在这里插入图片描述

实验目的

实现开发板上LED0、LED1以及RGB灯的点亮

实验准备

查看原理图

在这里插入图片描述
K210 开发板出厂默认已经焊接好 LED0 和 LED1。LED0 连接的是 IO0,LED1
连接的是 IO17,LED0 为红灯,LED1 为绿灯。两颗 LED 灯都是低电平点亮,高电平熄灭

软件对应SDK

对应的头文件 gpio.h

GPIO配置函数

通用 gpio 共 8 个,使用同一个中断源,可配置输入输出信号,可配置触发
IO 口总中断,边沿触发和电平触发。每隔 IO 可以分配到 FPIOA 上 48 个管脚之
一。

• gpio_init:GPIO 口初始化
• gpio_set_drive_mode:设置 GPIO 口输入或输出模式
• gpio_set_pin:设置 GPIO 引脚电平高/低
• gpio_get_pin:读取 GPIO 引脚电平

什么是 FPIOA 呢

FPIOA (现场可编程 IO 阵列)允许用户将 255 个内部功能映射到芯片外围的 48 个自由
IO 上:

• 支持IO 的可编程功能选择
• 支持IO 输出的8 种驱动能力选择
• 支持IO 的内部上拉电阻选择
• 支持IO 的内部下拉电阻选择
• 支持IO 输入的内部施密特触发器设置
• 支持IO 输出的斜率控制
• 支持内部输入逻辑的电平设置

实验代码

LED/RGB驱动

bsp_led_rgb.h

#ifndef __BSP_LED_RGB_H_
#define __BSP_LED_RGB_H_
/*****************************HEAR-FILE************************************/
#include "fpioa.h"
#include "gpiohs.h"
#include "gpio.h"
#include "fpioa.h"
#include "sleep.h"

/*****************************HARDWARE-PIN*********************************/

#define IS_HIGH_GPIO  1


// 硬件IO口,与原理图对应

//led
#define PIN_LED_0             (0)
#define PIN_LED_1             (17)

//rgb
#define PIN_RGB_R                 (6)
#define PIN_RGB_G                 (7)
#define PIN_RGB_B                 (8)

/*****************************SOFTWARE-GPIO********************************/
// 软件GPIO口,与程序对应

//led
#define LED0_GPIONUM          (3)
#define LED1_GPIONUM          (4)

//rgb
#define RGB_R_GPIONUM          (0)
#define RGB_G_GPIONUM          (1)
#define RGB_B_GPIONUM          (2)

/*****************************FUNC-GPIO************************************/
// GPIO口的功能,绑定到硬件IO口

//led
#define FUNC_LED0             (FUNC_GPIO0 + LED0_GPIONUM)
#define FUNC_LED1             (FUNC_GPIO0 + LED1_GPIONUM)

//rgb
#if  IS_HIGH_GPIO
#define FUNC_RGB_R             (FUNC_GPIOHS0 + RGB_R_GPIONUM)
#define FUNC_RGB_G             (FUNC_GPIOHS0 + RGB_G_GPIONUM)
#define FUNC_RGB_B             (FUNC_GPIOHS0 + RGB_B_GPIONUM)
#else
#define FUNC_RGB_R             (FUNC_GPIO0 + RGB_R_GPIONUM)
#define FUNC_RGB_G             (FUNC_GPIO0 + RGB_G_GPIONUM)
#define FUNC_RGB_B             (FUNC_GPIO0 + RGB_B_GPIONUM)
#endif

void rgbInit(void);
void ledInit(void);
void rgbClose(void);
void ledClose(void);
void ledFlash(int ms);
void rgbFlash(int ms);


#endif /* __BSP_LED_RGB_H_ */

bsp_led_rgb.c

#include "bsp_led_rgb.h"

/**
* Function       hardware_init
* @author        Gengyue
* @date          2020.05.27
* @brief         硬件初始化,绑定GPIO口
* @param[in]     void
* @param[out]    void
* @retval        void
* @par History   无
*/
void hardware_init(void)
{

    fpioa_set_function(PIN_LED_0, FUNC_LED0);
    fpioa_set_function(PIN_LED_1, FUNC_LED1);

    fpioa_set_function(PIN_RGB_R, FUNC_RGB_R);
    fpioa_set_function(PIN_RGB_G, FUNC_RGB_G);
    fpioa_set_function(PIN_RGB_B, FUNC_RGB_B);
}

void rgbInit()
{
    gpio_init();
    //硬件初始化,绑定GPIO口
    fpioa_set_function(PIN_RGB_R, FUNC_RGB_R);
    fpioa_set_function(PIN_RGB_G, FUNC_RGB_G);
    fpioa_set_function(PIN_RGB_B, FUNC_RGB_B);

    //设置模式为输出
#if  IS_HIGH_GPIO     
    gpiohs_set_drive_mode(RGB_R_GPIONUM, GPIO_DM_OUTPUT);
    gpiohs_set_drive_mode(RGB_G_GPIONUM, GPIO_DM_OUTPUT);
    gpiohs_set_drive_mode(RGB_B_GPIONUM, GPIO_DM_OUTPUT);
#else
    gpio_set_drive_mode(RGB_R_GPIONUM, GPIO_DM_OUTPUT);
    gpio_set_drive_mode(RGB_G_GPIONUM, GPIO_DM_OUTPUT);
    gpio_set_drive_mode(RGB_B_GPIONUM, GPIO_DM_OUTPUT);
 #endif 
}


void ledInit()
{
    gpio_init();
    //硬件初始化,绑定GPIO口
    fpioa_set_function(PIN_LED_0, FUNC_LED0);
    fpioa_set_function(PIN_LED_1, FUNC_LED1);
    //设置LED0和LED1的GPIO模式为输出
    gpio_set_drive_mode(LED0_GPIONUM, GPIO_DM_OUTPUT);
    gpio_set_drive_mode(LED1_GPIONUM, GPIO_DM_OUTPUT);

}

void rgbClose()
{
#if  IS_HIGH_GPIO    
    gpiohs_set_pin(RGB_R_GPIONUM, GPIO_PV_HIGH);
    gpiohs_set_pin(RGB_G_GPIONUM, GPIO_PV_HIGH);
    gpiohs_set_pin(RGB_B_GPIONUM, GPIO_PV_HIGH);
#else
    gpio_set_pin(RGB_R_GPIONUM, GPIO_PV_HIGH);
    gpio_set_pin(RGB_G_GPIONUM, GPIO_PV_HIGH);
    gpio_set_pin(RGB_B_GPIONUM, GPIO_PV_HIGH);
#endif    
}


void ledClose()
{
    // 先关闭LED0和LED1
    gpio_pin_value_t value = GPIO_PV_HIGH;
    gpio_set_pin(LED0_GPIONUM, value);
    gpio_set_pin(LED1_GPIONUM, value);

}

void ledFlash(int ms)
{
    static gpio_pin_value_t value = GPIO_PV_HIGH;
    msleep(ms);
    gpio_set_pin(LED0_GPIONUM, value);
    gpio_set_pin(LED1_GPIONUM, value = !value);
}

void rgbFlash(int ms)
{
    static uint8_t rgbIndex = 0;
    rgbIndex %= 3; 
    rgbClose();
    gpiohs_set_pin(rgbIndex, GPIO_PV_LOW);
    rgbIndex++;
    msleep(ms);
}

主程序控制

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include "bsp.h"
#include "bsp_led_rgb.h"
#include "bsp_usart.h"


int main(void)
{
    ledInit();
    rgbInit();
    
    while (1){
      
        ledFlash(1000);
       	sleep(1);
       	rgbFlash(300);     
    }
    return 0;
}

实验结果

LED0 和 LED1 两个灯交替点亮,RGB等也会红绿蓝依次切换

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值