zl程序教程

您现在的位置是:首页 >  Java

当前栏目

(一)STM32L4(RT- Thread)——LED灯

2023-02-18 16:23:33 时间

目录

学习目标

内容

代码

总结 


学习目标

        今天我们来学习点亮潘多拉开发板的LED灯,同时也是首次在项目中使用RT - Thread操作系统,目前感觉变化不大,和裸机开发很像,可能到后面才能发现有不同之处吧,值得一提的是 RT - Thread 的日志系统通过串口打印信息到电脑,这一点还是比较好玩的,好了,让我们进入知识的讲解。

实验结果

src="https://player.bilibili.com/player.html?aid=903601314"

WeChat

https://player.bilibili.com/player.html?aid=563609628

WeChat

内容

        说实话点亮LED灯还是比较简单的,就是通过给高低电平来控制亮灭,这部分就不详细介绍了,主要来介绍一下RT - Thread。

代码

#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>

#define DBG_TAG "main"
#define DBG_LVL         DBG_LOG
#include <rtdbg.h>

/* 配置 LED 灯引脚 */          
#define LED_PIN              PIN_LED_R

int main(void)
{
    unsigned int count = 1;

    /* 设置 LED 引脚为输出模式 */
    rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT);

    while (count > 0)
    {
        /* LED 灯亮 */
        rt_pin_write(LED_PIN, PIN_LOW);
        LOG_D("led on, count: %d", count);
        rt_thread_mdelay(500);

        /* LED 灯灭 */
        rt_pin_write(LED_PIN, PIN_HIGH);
        LOG_D("led off");
        rt_thread_mdelay(500);

        count++;
    }

    return 0;
}
void rt_pin_mode(rt_base_t pin, rt_base_t mode)

        有关这个函数 ,我们来简单的介绍一下,学习途径当然是官方手册啦,这是可以设置的参数。

rt_pin_write(LED_PIN, PIN_LOW);

         这个就是设置低电平,比较简单。

LOG_D("led on, count: %d", count);
LOG_D("led off");

        这个是通过串口来打印,结果如下。 


        接下来我们来看一看RGB灯的实现,如果理解了上面的代码,就比较好理解。 

#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>

#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>

/* 定义 LED 亮灭电平 */
#define LED_ON  (0)
#define LED_OFF (1)

/* 定义 8 组 LED 闪灯表,其顺序为 R G B */
static const rt_uint8_t _blink_tab[][3] =
{
    {LED_ON, LED_ON, LED_ON},
    {LED_OFF, LED_ON, LED_ON},
    {LED_ON, LED_OFF, LED_ON},
    {LED_ON, LED_ON, LED_OFF},
    {LED_OFF, LED_OFF, LED_ON},
    {LED_ON, LED_OFF, LED_OFF},
    {LED_OFF, LED_ON, LED_OFF},
    {LED_OFF, LED_OFF, LED_OFF},
};

int main(void)
{
    unsigned int count = 1;
    unsigned int group_num = sizeof(_blink_tab)/sizeof(_blink_tab[0]);
    unsigned int group_current;

    /* 设置 RGB 灯引脚为输出模式 */
    rt_pin_mode(PIN_LED_R, PIN_MODE_OUTPUT);
    rt_pin_mode(PIN_LED_G, PIN_MODE_OUTPUT);
    rt_pin_mode(PIN_LED_B, PIN_MODE_OUTPUT);

    while (count > 0)
    {
        /* 获得组编号 */
        group_current = count % group_num;

        /* 控制 RGB 灯 */
        rt_pin_write(PIN_LED_R, _blink_tab[group_current][0]);
        rt_pin_write(PIN_LED_G, _blink_tab[group_current][1]);
        rt_pin_write(PIN_LED_B, _blink_tab[group_current][2]);

        /* 输出 LOG 信息 */
        LOG_D("group: %d | red led [%-3.3s] | green led [%-3.3s] | blue led [%-3.3s]",
            group_current,
            _blink_tab[group_current][0] == LED_ON ? "ON" : "OFF",
            _blink_tab[group_current][1] == LED_ON ? "ON" : "OFF",
            _blink_tab[group_current][2] == LED_ON ? "ON" : "OFF");

        /* 延时一段时间 */
        rt_thread_mdelay(500);
        count++;
    }
    return 0;
}

        比较简单,就不介绍了。 

总结 

         总体来说目前还是比较简单的使用,遇到问题也可以自行查找资料解决,期待以后关于RT - Thread的学习。