K210应用3-使用GPIOHS控制LED状态

使用gpiohs控制led

  • 实验目的

        本次主要应用K210的基础的功能--GPIOHS。该节验证方式同上一节一致,也是通过控制LED的亮灭来进行验证。

  • 实验准备

        1)、带发光二极管(LED)的K210开发板一块,用于实践并查看实验现象;

        2)、官方裸机编程指导手册:kendryte_standalone_programming_guide,用于查阅SDK中接口说明。

  • 实验原理及名词解释

        GPIOHS:全称高速GPIO,功能与普通GPIO相似,但GPIOHS的管脚反转能力更强,并且每个GPIOHS的IO都具有独立中断源,支持边沿触发和电平触发。

  • 硬件设计

        硬件电路图如下:

  • 软件设计

        软件流程图如下:

  • 软件实现

        根据硬件设计和软件设计可知,本节应用实现步骤如下:

        1)、设置引脚复用功能:由硬件原理图可知:三个LED由分别由IO12、IO13、IO14三个管脚进行控制,参考官方SDK手册,我们使用 fpioa_set_function 函数对这三个引脚进行引脚功能配置,如下图:

        2)、设置GPIOHS驱动模式,如下图:

        3)、控制GPIOHS输出电平:根据硬件原理图知:当GPIOHS输出高电平时,LED熄灭,GPIOHS输出低电平时,LED亮起。故,我们设置GPIOHS初始输出电平为高,后面每隔500ms,GPIOHS输出电平状态反转一次,如下图:

 

         根据上述实现步骤,最终代码如下:

#include "fpioa.h"
#include "gpiohs.h"
#include "sleep.h"

#define LED_R_PIN   (12)
#define LED_G_PIN   (13)
#define LED_B_PIN   (14)

#define LED_R_GPIONUM   (0)
#define LED_G_GPIONUM   (1)
#define LED_B_GPIONUM   (2)
#define LED_R_FUN   (FUNC_GPIOHS0+LED_R_GPIONUM)
#define LED_G_FUN   (FUNC_GPIOHS0+LED_G_GPIONUM)
#define LED_B_FUN   (FUNC_GPIOHS0+LED_B_GPIONUM)

int main()
{
    // 配置引脚功能
    fpioa_set_function(LED_R_PIN, LED_R_FUN);
    fpioa_set_function(LED_G_PIN, LED_G_FUN);
    fpioa_set_function(LED_B_PIN, LED_B_FUN);
    // 设置GPIOHS驱动模式
    gpiohs_set_drive_mode(LED_R_GPIONUM, GPIO_DM_OUTPUT);
    gpiohs_set_drive_mode(LED_B_GPIONUM, GPIO_DM_OUTPUT);
    gpiohs_set_drive_mode(LED_B_GPIONUM, GPIO_DM_OUTPUT);
    // 初始化GPIOHS输出电平
    gpio_pin_value_t gpiohs_value = GPIO_PV_HIGH;
    gpiohs_set_pin(LED_R_GPIONUM, gpiohs_value);
    gpiohs_set_pin(LED_G_GPIONUM, gpiohs_value);
    gpiohs_set_pin(LED_B_GPIONUM, gpiohs_value);
    // 控制三个LED以500ms间隔亮灭
    while(1)
    {
        msleep(500);
        gpiohs_value = !gpiohs_value;
        gpiohs_set_pin(LED_R_GPIONUM, gpiohs_value);
        gpiohs_set_pin(LED_G_GPIONUM, gpiohs_value);
        gpiohs_set_pin(LED_B_GPIONUM, gpiohs_value);
    }

    return 0;
}
  • 编译

        1)、同上一节类似,在SDK中创建gpiohs_led文件夹,在新建的文件夹中创建一个main.c文件,然后将本节代码输入到main.c文件中,如下图:

         2)、同上一节的编译方式类似,打开vscode终端,在终端中进入上一节创建的build文件夹,然后输入:cmake ../ -DPROJ=gpiohs_led -G "MinGW Makefiles" ,生成makefile文件,如下图:

         3)、生成makefile文件后,输入:make ,开始编译,如下图:

         4)、编译完成后,会在build目录下生成烧录文件:gpiohs_led.bin,如下图:

  • 烧录

        同上一节的烧录方式类似,注意:Firmware那一项选择我们刚编译出的gpiohs_led.bin文件。

  • 实验现象

        三个LED灯亮500ms,灭500ms,以此循环。

  • 实验总结

        1)、根据手册,GPIOHS相比于GPIO,GPIOHS的管脚反转能力更强,并且GPIOHS每个IO具有独立的中断源,而GPIO所有IO共用一个中断源。后面用户可根据自身需求,选择使用GPIO或者GPIOHS。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tigalight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值