STM32L475潘多拉开发板RT Thread实验程序下载以及实验1_LED_BLINK

作为一名STM32嵌入式学习的新人,我希望把我学习STM32潘多拉开发板的一些实验经历和学习经历记录下来,最好能够给大家一点点帮助。

1、程序烧录的设置:

作为玩单片机的电子生,我们的实验第一步都是点亮LED,但是STM32的程序下载和C51不太一样,需要用到ST Link或者J Link,但是有些开发板是集成了有ST Link的,例如本实验开发板,如图所示:

下载程序点击 ARM Keil 的download,或者按F8。但是我们光把USB线插入到这个接口是没用的,会显示

 所以我们要先配置一下电脑的串口,我是下载这个程序软件配置的(需要的朋友可以私聊我):

 配置完后是这样:

 然后就可以点击Download烧录程序到板子上了:

 下载好后的板子运行的第一个程序。

OK,现在解决了烧录的问题,我们来开始聊代码。

2、头文件的浅聊

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

(1)这个代码中,rtthread.h是RT-Thread系统的头文件,用于一些常用函数、宏、数据结构的定义等。在本实验例程中,用到的定义的函数有rt_thread_mdelay()等,可以自己去rtthread.h头文件中查看定义了哪些函数,去了解一下定义的结构那些。

(2)rtdevice.h是RT-Thread设备驱动的头文件。在本次实验中,我们用到了实验板中的引脚,所以需要定义一下设备的引脚pin。

(3)board.h是RT-Thread用于定义和配置开发板的头文件。具体有什么用还在了解中……

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

 这里,`DBG_TAG` 的定义为 `main`,表示调试标签为 "main"。这个宏可以在调试输出中作为标识符,用于标记与主要代码逻辑相关的调试信息。`DBG_LVL` 的定义为 `DBG_LOG`,表示调试级别为 `DBG_LOG`。这个宏用于指定调试输出的级别,可以根据不同的需求来调整调试信息的显示详细程度。(具体啥用也还在了解中……)

rtdbg.h头文件应该是定义程序中的打印函数:

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

这里用LOG_D()来代替printf()。

定义好环境后,可以开始编写后面的程序:

在看主程序之前,首先了解一下RGB灯引脚的定义以及点亮的方式。在Drivers文件里面有drv_gpio.h头文件(drv_gpio.c有),该头文件里面中定义了RGB的引脚以及一些按键和蜂鸣器的引脚:

// BEEP && LED && KEY
#define PIN_BEEP        GET_PIN(B, 2)      // PB2 :  BEEP         --> BEEP
#define PIN_LED_R       GET_PIN(E, 7)      // PE7 :  LED_R        --> LED
#define PIN_LED_G       GET_PIN(E, 8)      // PE8 :  LED_B        --> LED
#define PIN_LED_B       GET_PIN(E, 9)      // PE9 :  LED_G        --> LED
#define PIN_KEY2        GET_PIN(D, 8)      // PD8 :  KEY2         --> KEY
#define PIN_KEY1        GET_PIN(D, 9)      // PD9 :  KEY1         --> KEY
#define PIN_KEY0        GET_PIN(D, 10)     // PD10:  KEY0         --> KEY
#define PIN_WK_UP       GET_PIN(C, 13)     // PC13:  WK_UP        --> KEY

 在RGB引脚定义中,例如R灯的引脚,在芯片中定义R灯的引脚是pin 57,则定义#define PIN_LED_R   GET_PIN(E, 7),表示R灯的引脚是E区的7(意思就是引脚57?)芯片引脚如图所示:

3、主函数

 OK,我们继续来看主函数,该函数的功能是使RGB灯中的R灯每秒亮灭1次,500ms亮,500ms灭。

/* 配置 LED 灯引脚 */
#define LED_PIN     PIN_LED_R    //定义LED_PIN为红色的RGB灯R灯的引脚

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

    /* 设置 LED 引脚为输出模式 */
    rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT);    //定义该R灯的引脚为输出模式。

    while (count > 0)
    {
        /* LED 灯亮 */
        rt_pin_write(LED_PIN, PIN_LOW);    //写LED_PIN引脚为低电平模式,灯亮
        LOG_D("led on, count: %d", count);
        rt_thread_mdelay(500);

        /* LED 灯灭 */
        rt_pin_write(LED_PIN, PIN_HIGH);    //写LED_PIN引脚为低电平模式,灯灭
        LOG_D("led off");
        rt_thread_mdelay(500);

        count++;
    }

    return 0;
}

那么,根据这个代码,我们可以写一些让R、G、B三灯轮流闪烁的情况,代码如下:

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

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

/* 配置 LED 灯引脚 */
#define LED_PIN1              PIN_LED_R
#define LED_PIN2              PIN_LED_G
#define LED_PIN3              PIN_LED_B

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

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

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

        /* LED 灯灭 */
        rt_pin_write(LED_PIN1, PIN_HIGH);
//        LOG_D("led off");
        rt_thread_mdelay(500);
			
			        /* LED 灯亮 */
        rt_pin_write(LED_PIN2, PIN_LOW);
//        LOG_D("led on, count: %d", count);
        rt_thread_mdelay(500);

        /* LED 灯灭 */
        rt_pin_write(LED_PIN2, PIN_HIGH);
//        LOG_D("led off");
        rt_thread_mdelay(500);
			
			        /* LED 灯亮 */
        rt_pin_write(LED_PIN3, PIN_LOW);
//        LOG_D("led on, count: %d", count);
        rt_thread_mdelay(500);

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

        count++;
    }

    return 0;
}

在这串代码中,我们首先定义了RGB三个引脚为输出模式,然后默认为低,所以会三灯全亮:

 然后就是在循环中R、G、B三灯轮流闪烁:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值