控制GPIO输出

作者:陈之敏 时间:2020年08月15日 关键字:csdk、RDA8910、二次开发、GPIO输出、LED ## 目录

点击这里查看所有博文

  最近听说有的小伙伴看了我的教程后,有一些问题都跑到官方的gitee上面去问去了。导致官方的人没搞懂问的是啥,小伙伴们也没能知道自己想要的答案。给大家造成了困扰,这里我说声抱歉。

  既然出现了这个问题,我这里就声明一下,本系列教程所涉及的内容(demo)不是官方的作品。我个人觉得官方的demo内容太多太全,往往都是把一个模块内所有的东西全部放在一起。这样的话对新手不是很友好,阅读起来也比较费劲。我就把官方的部分demo进行相关的简化,并推出教程这样的话可能会对新手朋友们有一定的帮助。

  有时候周末闲暇时间我也会加上一些我觉得好玩的模块在里面,这些可能在官方的demo都没有,比如cJSON、PAHO-MQTT、http-client。

  这就是官方的代码仓库。

git clone --recursive https://gitee.com/openLuat/Luat_CSDK_Air724U.git

  当然各位小伙伴在看本教程时,我建议还是使用我下面提供的仓库比较好,看完之后在迁移到官方的仓库⇧。

git clone --recursive https://gitee.com/chenxiahuaxu/RDA8910_CSDK.git

  再看本教程过程中如果遇到了问题,可以在本人的代码仓库下面评论。也可以在本人的博客下面评论。我要是看到的话,并且这个问题在我的能力范围的话我会尽力解答的(非官方,不要对我要求太多哦,要求太多我可能就不管啦)。

一、前言

  拿到CSDK首先搭建好环境,然后就是点灯,点灯才是迈向驱动众多外设的第一步。

在这里插入图片描述   有人讲你这真是闲的没事干,拿这个好几百软妹币的模块用来点灯,51它不香吗。小伙子还是年轻,听我一句劝。学习是次要的,最重要是要学会装逼,用51还怎么装逼呢,too young,too simple

image1   反正我不管你们说什么我都不听,谁也拦不住我,我就是要点灯,今天这个灯我就点定了。 image2 ## 二、编写测试程序   首先我们创建两个任务作为对比

//main函数
int appimg_enter(void *param)
{
    //创建一个任务
    osiThreadCreate("GPIO0", GPIO0, NULL, OSI_PRIORITY_NORMAL, 1024, 0);
    //再创建一个任务
    osiThreadCreate("GPIO1", GPIO1, NULL, OSI_PRIORITY_NORMAL, 1024, 0);
    return 0;
}

  编写GPIO0的输出程序,实现1s为周期的循环闪烁。

static void GPIO0(void *param)
{
    T_AMOPENAT_GPIO_CFG output_cfg = {0};
    output_cfg.mode = OPENAT_GPIO_OUTPUT; //配置输出
    output_cfg.param.defaultState = 0;    // 默认低电平
    BOOL err = 0;
    // gpio0初始化
    err = iot_gpio_config(0, &output_cfg);
    if (!err)
        return;
    while (1)
    {
        //将GPIO0设置为高电平
        iot_gpio_set(0, 1); //设置为高电平
        iot_debug_print("GPIO0 :%d", 1);
        //线程休眠500ms
        osiThreadSleep(500);
        //将GPIO0设置为低电平
        iot_gpio_set(0, 0); //设置为高电平
        iot_debug_print("GPIO0 :%d", 0);
        //线程休眠500ms
        osiThreadSleep(500);
    }
    osiThreadExit();
}

  编写GPIO1的输出程序,实现2s为周期的循环闪烁。

static void GPIO1(void *param)
{
    T_AMOPENAT_GPIO_CFG output_cfg = {0};
    output_cfg.mode = OPENAT_GPIO_OUTPUT; //配置输出
    output_cfg.param.defaultState = 0;    // 默认低电平
    BOOL err = 0;
    // gpio1初始化
    err = iot_gpio_config(1, &output_cfg);
    if (!err)
        return;
    while (1)
    {
        //将GPIO1设置为高电平
        iot_gpio_set(1, 1); //设置为高电平
        iot_debug_print("GPIO1 :%d", 1);
        //线程休眠1000ms
        osiThreadSleep(1000);
        //将GPIO1设置为低电平
        iot_gpio_set(1, 0); //设置为高电平
        iot_debug_print("GPIO1 :%d", 0);
        //线程休眠1000ms
        osiThreadSleep(1000);
    }
    osiThreadExit();
}
  使用GPIO的驱动需要包含#include "iot_gpio.h"头文件,我们这里只用到了两个函数,分别是: >/**初始化gpio @param port: GPIO编号@param cfg: 配置信息 *@return TRUE: 成功
    FALSE: 失败 **/
  • BOOL iot_gpio_config(E_AMOPENAT_GPIO_PORT port,T_AMOPENAT_GPIO_CFG *cfg);

/**设置gpio @param port: GPIO编号@param value: 0 or 1 *@return TRUE: 成功      FALSE: 失败 **/

  • BOOL iot_gpio_set(E_AMOPENAT_GPIO_PORT port, UINT8 value);

三、编译并下载程序

  完整代码在这,自取。

/*
 * @Author: your name
 * @Date: 2020-05-19 14:05:32
 * @LastEditTime: 2020-05-19 17:34:30
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \RDA8910_CSDK\USER\user_main.c
 */
#include "osi_log.h"
#include "osi_api.h"

#include "string.h"
#include "iot_debug.h"
#include "iot_uart.h"
#include "iot_os.h"
#include "iot_gpio.h"

static void GPIO0(void *param)
{
    T_AMOPENAT_GPIO_CFG output_cfg = {0};
    output_cfg.mode = OPENAT_GPIO_OUTPUT; //配置输出
    output_cfg.param.defaultState = 0;    // 默认低电平
    BOOL err = 0;
    // gpio0初始化
    err = iot_gpio_config(0, &output_cfg);
    if (!err)
        return;
    while (1)
    {
        //将GPIO0设置为高电平
        iot_gpio_set(0, 1); //设置为高电平
        iot_debug_print("GPIO0 :%d", 1);
        //线程休眠500ms
        osiThreadSleep(500);
        //将GPIO0设置为低电平
        iot_gpio_set(0, 0); //设置为高电平
        iot_debug_print("GPIO0 :%d", 0);
        //线程休眠500ms
        osiThreadSleep(500);
    }
    osiThreadExit();
}
static void GPIO1(void *param)
{
    T_AMOPENAT_GPIO_CFG output_cfg = {0};
    output_cfg.mode = OPENAT_GPIO_OUTPUT; //配置输出
    output_cfg.param.defaultState = 0;    // 默认低电平
    BOOL err = 0;
    // gpio1初始化
    err = iot_gpio_config(1, &output_cfg);
    if (!err)
        return;
    while (1)
    {
        //将GPIO1设置为高电平
        iot_gpio_set(1, 1); //设置为高电平
        iot_debug_print("GPIO1 :%d", 1);
        //线程休眠1000ms
        osiThreadSleep(1000);
        //将GPIO1设置为低电平
        iot_gpio_set(1, 0); //设置为高电平
        iot_debug_print("GPIO1 :%d", 0);
        //线程休眠1000ms
        osiThreadSleep(1000);
    }
    osiThreadExit();
}
//main函数
int appimg_enter(void *param)
{
    //创建一个任务
    osiThreadCreate("GPIO0", GPIO0, NULL, OSI_PRIORITY_NORMAL, 1024, 0);
    //再创建一个任务
    osiThreadCreate("GPIO1", GPIO1, NULL, OSI_PRIORITY_NORMAL, 1024, 0);
    return 0;
}

//退出提示
void appimg_exit(void)
{
    OSI_LOGI(0, "application image exit");
}

  这是GPIO0以1s为周期翻转 image3   这是GPIO1以2s为周期翻转 image4   查看输出,分析前六个日志,GPIO0的动作是0->1->0->1GPIO1的动作是0->1,正好GPIO0翻转两次,GPIO1翻转一次,符合设计需求 image5

不会下载的点击这里,进去查看我的RDA8910 CSDK二次开发入门教程专题第一篇博文1、RDA8910CSDK二次开发:环境搭建里面讲了怎么下载 这里只是我的学习笔记,拿出来给大家分享,欢迎大家批评指正,本篇教程到此结束