谷动谷力

 找回密码
 立即注册
查看: 2652|回复: 0
打印 上一主题 下一主题
收起左侧

【AB32VG1开发】基于RT-Thread AB32VG点亮RGB

[复制链接]
跳转到指定楼层
楼主
发表于 2021-11-28 23:03:01 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
【AB32VG1开发】基于RT-Thread AB32VG点亮RGB

  • 原理图分析
    开发板上板载一个三色 RGB 彩灯


    开发板引脚连接如下图,引脚 PA1(注意手册上写的PA2, 官方例程也是PA2,可以是因为V1.0板是PA2, 我拿到板是V2.0) 对应蓝灯,引脚 PE1 对应红灯,引脚 PE4 对应绿灯,RGB 为共阳极,当引脚拉低时,对应的 led 点亮

    详情参阅:中科蓝讯AB32VG1开发板介绍电路原理图分析接口说明 ...
  • 创建RTT代码工程
    按上节方法创建工程AB32VG1_RGB
    详情参阅: 基于RT-Thread的AB32VG1开发环境搭建
  • 配置工程
    打开工程RT-Thread Setting

    设置要加载驱动Pin(默认是打开的如果要加载其他驱动须勾选上)

    关闭RT-Thread Setting,配置好的驱动或软件包会自动添加到工程,添加过程要等待片刻
    然后,更新软件包
  • 编辑源码
    新建源码文件:rgb_led.c, 编辑
    1. /*
    2. * Copyright (c) 2006-2021, RT-Thread Development Team
    3. *
    4. * SPDX-License-Identifier: Apache-2.0
    5. *
    6. * Change Logs:
    7. * Date           Author       Notes
    8. * 2021-10-01     LOJAM       the first version
    9. */

    10. //#include "rgb.h"
    11. #include <rtthread.h>
    12. #include "board.h"

    13. // 定义一个 RGB 结构体
    14. typedef struct
    15. {
    16.     uint8_t LED_R;
    17.     uint8_t LED_B;
    18.     uint8_t LED_G;
    19. }RGB_Led_t;

    20. static RGB_Led_t Led;
    21. /*
    22. * 编写初始化驱动程序,调用 rt_pin_get 获取 led 句柄,通过句柄设置对应引脚模式为输
    23. 出模式
    24. */
    25. void RGB_Init(void)
    26. {
    27.     // 获得 led
    28.     Led.LED_R = rt_pin_get("PE.1");
    29.     Led.LED_G = rt_pin_get("PE.4");
    30.     Led.LED_B = rt_pin_get("PA.1");
    31.     // 设置引脚为输出方式
    32.     rt_pin_mode(Led.LED_R, PIN_MODE_OUTPUT);
    33.     rt_pin_mode(Led.LED_G, PIN_MODE_OUTPUT);
    34.     rt_pin_mode(Led.LED_B, PIN_MODE_OUTPUT);
    35. }

    36. /*
    37. * 编写 rgb 不同颜色点灯驱动,通过 rt_pin_write 来控制 gpio 口电平高低,点亮红灯即
    38. 拉低红灯引脚,拉高其他两个颜色灯的引脚
    39. 传入参数 on=1:对应亮, on=0:对应灭
    40. 红灯驱动
    41. */
    42. void RGB_Red(rt_bool_t on)
    43. {
    44.     rt_pin_write(Led.LED_G, PIN_HIGH);
    45.     rt_pin_write(Led.LED_B, PIN_HIGH);
    46.     if (on) {
    47.         rt_pin_write(Led.LED_R, PIN_LOW);
    48.     }else {
    49.         rt_pin_write(Led.LED_R, PIN_HIGH);
    50.     }
    51. }

    52. //蓝灯驱动
    53. void RGB_Blue(rt_bool_t on)
    54. {
    55.     rt_pin_write(Led.LED_G, PIN_HIGH);
    56.     rt_pin_write(Led.LED_R, PIN_HIGH);
    57.     if (on) {
    58.         rt_pin_write(Led.LED_B, PIN_LOW);
    59.     }else {
    60.         rt_pin_write(Led.LED_B, PIN_HIGH);
    61.     }
    62. }

    63. //绿灯驱动
    64. void RGB_Green(rt_bool_t on)
    65. {
    66.     rt_pin_write(Led.LED_R, PIN_HIGH);
    67.     rt_pin_write(Led.LED_B, PIN_HIGH);
    68.     if (on) {
    69.         rt_pin_write(Led.LED_G, PIN_LOW);
    70.     }else {
    71.         rt_pin_write(Led.LED_G, PIN_HIGH);
    72.     }
    73. }

    74. //白灯驱动 全亮
    75. void RGB_White(rt_bool_t on)
    76. {
    77.     if (on) {
    78.         rt_pin_write(Led.LED_G, PIN_LOW);
    79.         rt_pin_write(Led.LED_R, PIN_LOW);
    80.         rt_pin_write(Led.LED_B, PIN_LOW);
    81.     }else {
    82.         rt_pin_write(Led.LED_R, PIN_HIGH);
    83.         rt_pin_write(Led.LED_B, PIN_HIGH);
    84.         rt_pin_write(Led.LED_G, PIN_HIGH);
    85.     }
    86. }

    87. //2.3 编写主程序文件
    88. //编写 rgb 彩灯运行线程,三种颜色依次切换,中间延时 1s
    89. static void rgb_thread_entry(void* p)
    90. {
    91.     RGB_Init();
    92.     while(1)
    93.     {
    94.         RGB_Blue(1);
    95.         rt_thread_mdelay(1000);
    96.         RGB_Green(1);
    97.         rt_thread_mdelay(1000);
    98.         RGB_Red(1);
    99.         rt_thread_mdelay(1000);
    100.         RGB_White(1);
    101.         rt_thread_mdelay(1000);
    102.     }
    103. }

    104. //创建线程启动函数,用于启动上一步编写的线程主体
    105. static int Thread_RGB(void)
    106. {
    107.     rt_thread_t thread = RT_NULL;

    108.     thread = rt_thread_create("rgb", rgb_thread_entry, RT_NULL, 512, 10, 10);
    109.     if(thread == RT_NULL)
    110.     {
    111.         rt_kprintf("Thread_GRB Init ERROR");
    112.         return RT_ERROR;
    113.     }
    114.     rt_thread_startup(thread);
    115. }

    116. /*添加将线程初始化添加入系统初始化中*/
    117. INIT_APP_EXPORT(Thread_RGB);
    复制代码
    保存
  • 编译工程
    Ctrl+B, 编译程序,无报错进行下一步,有错找错改错,再编译
    上章节说明很详细,详情参阅: 基于RT-Thread的AB32VG1开发环境搭建
  • 下载工程
    打开 Downloaded 下载器,通过 download 下载生成的.dcf 文件(第一次
    使用前需要先安装串口驱动)
    扫描串口,点击开始后,按一下板子上复位按键下载程序
    上章节说明很详细,详情参阅: 基于RT-Thread的AB32VG1开发环境搭建
  • 运行程序
    因为例程是添加将线程初始化添加入系统初始化中,所以下载后自动运行,依次 会亮起:蓝-绿-红-白,切换间隔1s
  • 本章总结
    本章节我们学会了如何在 RT-Thread 上配置添加驱动及RTT库软件包,配置 GPIO 口,总的来说 GPIO 的使用步骤很简单,第一步获取对应 GPIO 句柄,第二步配置 GPIO 模式,之后就可以调用 rtt 函数对 GPIO 进行读写操作了!


+12

最近谁赞过

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-11-18 06:15 , Processed in 0.643939 second(s), 41 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表