RT-Thread Studio快速配置GPIO进行点灯

RT-Thread Studio快速配置GPIO进行点灯

1. 前言说明

1.1 本章内容

本章通过RT-Thread Studio配置AB32VG1片上外设GPIO的引脚,控制RGB彩灯进行简单的颜色变换

1.2 模块介绍

开发板上板载一个三色RGB彩灯

image-20210311201348618.png

RGB彩灯原理图如下

image-20210311201406610.png

开发板引脚连接如下图,引脚PA2对应蓝灯,引脚PE1对应红灯,引脚PE4对应绿灯,RGB为共阳极,当引脚拉低时,对应的led点亮

image-20210311201222781.png

1.3 开发软件

20210318172331.png

编译平台:RT-Thread Studio: 安装链接

下载平台:Downloader: 安装链接

2. 步骤说明

2.1 新建工程

点击 文件-> 新建-> RT-Thread项目控件

20210209213346.png

选择基于开发板的项目,填写工程名字,选择我们使用到的开发板(AB32VG1),调试器我们随便选,下载方式不是通过此处下载

20210318180626.png

注意:如果第一次使用RISC-V芯片需要安装工具链,在SDK管理器中下载工具链

20210318193859.png

然右击项目名称,进入属性

20210318194757.png

找到MCU->RISC-V ToolchainsPat ,配置Tool的环境,在软件安装位置下面的路径中

软件安装位置\RT-ThreadStudio\repo\Extract\ToolChain_Support_Packages\RISC-V\RISC-V-GCC\10.1.0\bin

20210318195006-1616068381724.png

工程新建后左边的项目资源管理器会显示我们的工程,我们把他展开,编译一下,编译结果如下

20210318195444.png

编译无报错,新建工程完成了!

2.2 编写RGB驱动程序文件

新建程序文件:在applications文件夹下新建立一个rgb.c和.h文件,建立后如下

20210526175354

rgb.c内写入如下程序

添加头文件,定义一个RGB结构体,并声明LED

#include "rgb.h"
#include <rtthread.h>
#include "board.h"

struct Led_s
{
    uint8_t LED_R;
    uint8_t LED_B;
    uint8_t LED_G;
};  // 定义一个RGB结构体

struct Led_s Led;

编写初始化驱动程序,调用rt_pin_get获取led句柄,通过句柄设置对应引脚模式为输出模式

void RGB_Init(void)
{
    // 获得led
    Led.LED_R = rt_pin_get("PE.1");
    Led.LED_G = rt_pin_get("PE.4");
    Led.LED_B = rt_pin_get("PA.2");
    // 设置引脚为输出方式
    rt_pin_mode(Led.LED_R, PIN_MODE_OUTPUT);
    rt_pin_mode(Led.LED_G, PIN_MODE_OUTPUT);
    rt_pin_mode(Led.LED_B, PIN_MODE_OUTPUT);
}

编写rgb不同颜色点灯驱动,通过rt_pin_write来控制gpio口电平高低,点亮红灯即拉低红灯引脚,拉高其他两个颜色灯的引脚

//传入参数 on=1:对应亮,on=0:对应灭
//红灯驱动
void RGB_Red(rt_bool_t on)
{
    if (on) {
        rt_pin_write(Led.LED_R, PIN_LOW);
    }else {
        rt_pin_write(Led.LED_R, PIN_HIGH);
    }
    rt_pin_write(Led.LED_G, PIN_HIGH);
    rt_pin_write(Led.LED_B, PIN_HIGH);
}
//蓝灯驱动
void RGB_Blue(rt_bool_t on){
    if (on) {
        rt_pin_write(Led.LED_B, PIN_LOW);
    }else {
        rt_pin_write(Led.LED_B, PIN_HIGH);
    }
    rt_pin_write(Led.LED_G, PIN_HIGH);
    rt_pin_write(Led.LED_R, PIN_HIGH);
}
//绿灯驱动
void RGB_Green(rt_bool_t on)
{
    if (on) {
        rt_pin_write(Led.LED_G, PIN_LOW);
    }else {
        rt_pin_write(Led.LED_G, PIN_HIGH);
    }
    rt_pin_write(Led.LED_R, PIN_HIGH);
    rt_pin_write(Led.LED_B, PIN_HIGH);
}

2.3 编写主程序文件

编写rgb彩灯运行线程,三种颜色依次切换,中间延时1s

static void rgb_thread_entry(void* p)
{
    RGB_Init();
    while(1)
    {
      rt_thread_mdelay(1000);
      RGB_Blue(1);
      rt_thread_mdelay(1000);
      RGB_Green(1);
      rt_thread_mdelay(1000);
      RGB_Red(1);
    }
}

创建线程启动函数,用于启动上一步编写的线程主体

static int Thread_RGB(void)
{
    rt_thread_t thread = RT_NULL;
    thread = rt_thread_create("rgb", rgb_thread_entry, RT_NULL, 512, 10, 10);
    if(thread == RT_NULL)
    {
        rt_kprintf("Thread_GRB Init ERROR");
        return RT_ERROR;
    }
    rt_thread_startup(thread);
}

添加将线程初始化添加入系统初始化中

INIT_APP_EXPORT(Thread_RGB);

3. 代码验证

编译程序,可以看到无报错

20210526181957

编译完成,打开Downloaded下载器,通过download下载生成的.dcf文件(第一次使用前需要先安装串口驱动)

20210324092249.png

扫描串口,点击开始后,按一下板子上复位按键下载程序

20210324103700.png

程序现象

在这里插入图片描述

4. 章节总结

本章节我们学会了如何在RT-Thread上配置GPIO口,总的来说GPIO的使用步骤很简单,第一步获取对应GPIO句柄,第二步配置GPIO模式,之后就可以调用rtt函数对GPIO进行读写操作了!

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:撸撸猫 设计师:马嘣嘣 返回首页
评论 8

打赏作者

Top嵌入式

投喂个鸡腿

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值