0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于单片机的Led跑马灯实现

CHANBAEK 来源:凌云物联网实验室 作者:郭工 2022-12-19 09:23 次阅读

2.1 原理图分析

查看EK-RA6M4的原理图,如下图所示,该开发板上有3个Led指示灯

图片

根据原理图可知,这三个Led的控制逻辑为:

Led灯 LED3 LED2 LED1
颜色 红色 绿色 蓝色
引脚 P400 P404 P415
电平 高电平亮、低电平灭 高电平亮、低电平灭 高电平亮、低电平灭

2.2 创建工程

在开始菜单的FSP v4.1.0里点击运行e2studio。然后点击 File -> Switch Workspace -> Other... ,然后选择刚才创建的工作路径并点击 Launch启动。

图片

接下来点击 File -> C/C++ Project 创建 Renesas RA C/C++ Project 。接下来设置我们的项目名为 MyBoard

图片

在接下来的配置中,我们定制开发我们的开发板,Board选择“Custom User Board (Any Device) ”,Device选择"R7FA6M4AF3CFB",以及烧录调试器的类型。下一步我们就选择 Flat (Non-TrustZone) Project

图片

接下来的操作系统类型,选择 No RTOS

图片

项目模板选择 Bare Metal -Minimal

图片

接下来,创建好的项目如下图所示。

图片

2.3 Pins引脚配置

接下来我们打开项目中的FSP配置文件,配置三个Led灯的引脚为GPIO模式,并分别配置它们的别名为LedRed(P400)、LedGreen(P404)、LedBlue(P415)。

图片

  • 通过 Symbolic Name 字段可以修改该GPIO的名称为 LedRed,它将在IDE自动生成的文件 ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h 中定义;
  • 通过 Mode 字段可以修改GPIO口的工作模式,它们将在IDE自动生成的文件 ra_gen/pin_data.c 中定义;

然后再配置使能外部晶振,并重新生成代码。

图片

2.4 Stack配置

e2studio生成的项目,默认添加的GPIO的stack,这里我们不需要进行任何的修改。

图片

2.5 源码修改

接下来,我们使用添加 src/bsp_led.h 头文件,在里面添加Led的相关定义及操作函数声明如下:

#ifndef BSP_LED_H_
#define BSP_LED_H_

/** Information on how many LEDs and what pins they are on. */
typedef struct st_bsp_leds
{
    uint16_t         led_count;        ///< The number of LEDs on this board
    uint16_t const * p_leds;           ///< Pointer to an array of IOPORT pins for controlling LEDs
} bsp_leds_t;

/** Available user-controllable LEDs on this board. These enums can be can be used to index into the array of LED pins
 * found in the bsp_leds_t structure. */
typedef enum e_bsp_led
{
    BSP_LEDBLUE,                      ///< LED1
    BSP_LEDGREEN,                     ///< LED2
    BSP_LEDRED,                       ///< LED3
} bsp_led_t;

/** Available user-controllable LEDs on this board. These enums can be used to turn on/off LED. */
typedef enum e_bsp_led_status
{
    BSP_LEDOFF,                      ///< Turn off LED
    BSP_LEDON,                       ///< Turn on  LED
} bsp_led_status_t;

extern const bsp_leds_t g_bsp_leds;

extern void turn_led(bsp_led_t which, bsp_led_status_t status);

#endif /* BSP_LED_H_ */

然后再添加 src/bsp_led.c 源文件如下:

#include "bsp_api.h"
#include "bsp_led.h"
#include "bsp_pin_cfg.h"

/** Array of LED IOPORT pins. */
static const uint16_t g_bsp_prv_leds[] =
{
    (uint16_t) LedBlue,
    (uint16_t) LedGreen,
    (uint16_t) LedRed,
};


/** Structure with LED information for this board. */
const bsp_leds_t g_bsp_leds =
{
    .led_count = (uint16_t) ((sizeof(g_bsp_prv_leds) / sizeof(g_bsp_prv_leds[0]))),
    .p_leds    = &g_bsp_prv_leds[0]
};

/** Function to turn Led on or off for this board. */
void turn_led(bsp_led_t which, bsp_led_status_t status)
{
    if(which >= g_bsp_leds.led_count )
    {
        return ;
    }

    if( BSP_LEDOFF == status )
    {
        R_BSP_PinWrite(g_bsp_leds.p_leds[which], BSP_IO_LEVEL_LOW);
    }
    else
    {
        R_BSP_PinWrite(g_bsp_leds.p_leds[which], BSP_IO_LEVEL_HIGH);
    }
}

接下来,我们可以修改 src/hal_entry.c 源文件,在里面添加毫秒级延时宏函数 delay_ms() 以及 Led 跑马灯的控制代码。

#include "bsp_led.h"

#define delay_ms(ms)  R_BSP_SoftwareDelay(ms, BSP_DELAY_UNITS_MILLISECONDS)
... ...

void hal_entry(void)
{
    /* TODO: add your own code here */

#if BSP_TZ_SECURE_BUILD
    /* Enter non-secure code */
    R_BSP_NonSecureEnter();
#endif

    R_BSP_PinAccessEnable(); /* Enable access to the PFS registers. */
    while (1)
    {
        turn_led(BSP_LEDBLUE, BSP_LEDON);
        delay_ms(250);
        turn_led(BSP_LEDBLUE, BSP_LEDOFF);

        turn_led(BSP_LEDGREEN, BSP_LEDON);
        delay_ms(250);
        turn_led(BSP_LEDGREEN, BSP_LEDOFF);

        turn_led(BSP_LEDRED, BSP_LEDON);
        delay_ms(250);
        turn_led(BSP_LEDRED, BSP_LEDOFF);

        delay_ms(350);
    }
}
  • R_BSP_PinAccessEnable() 函数必须使能,否则不能操作GPIO的寄存器

2.5 编译运行

代码修改完成后,在开发板上编译运行,会发现三个Led跑马灯运行。

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    240

    文章

    23128

    浏览量

    658251
  • 单片机
    +关注

    关注

    6032

    文章

    44513

    浏览量

    632691
  • 瑞萨
    +关注

    关注

    34

    文章

    22290

    浏览量

    86029
  • 跑马灯
    +关注

    关注

    5

    文章

    117

    浏览量

    34751
收藏 人收藏

    评论

    相关推荐

    单片机的P0端口如何去实现LED跑马灯

    单片机的P0端口如何去实现LED跑马灯呢?如何对其进行Proteus仿真呢?
    发表于 10-19 09:36

    如何利用51单片机点亮LED实现跑马灯效果?

    如何利用51单片机点亮LED实现跑马灯效果?
    发表于 11-08 06:19

    跑马灯

    跑马灯设计,51单片机C语言程序,调试成功可运行。
    发表于 05-09 09:41 5次下载

    基于单片机跑马灯程序及电路设计

    基于单片机跑马灯程序及电路设计
    发表于 05-15 10:07 39次下载

    基于proteus的七种跑马灯效果的实现

    本文介绍了在Proteus软件中实现联合仿真51单片机实现七种跑马灯效果。七种跑马灯效果,惊喜不断!
    发表于 12-18 13:44 2.1w次阅读
    基于proteus的七种<b class='flag-5'>跑马灯</b>效果的<b class='flag-5'>实现</b>

    如何用51单片机数码管实现跑马灯功能?

    基于51单片机学习板。用S1键作为控制跑马灯的方向按键,S5键作为控制跑马灯方向的加速度按键,S9键作为控制跑马灯方向的减速度按键,S13键作为控制
    的头像 发表于 07-20 11:41 1.4w次阅读
    如何用51<b class='flag-5'>单片机</b>数码管<b class='flag-5'>实现</b><b class='flag-5'>跑马灯</b>功能?

    使用51单片机实现LED跑马灯功能的电路和程序免费下载

    本文档的主要内容详细介绍的是使用51单片机实现LED跑马灯功能的电路和程序免费下载。
    发表于 08-07 17:33 4次下载
    使用51<b class='flag-5'>单片机</b><b class='flag-5'>实现</b><b class='flag-5'>LED</b><b class='flag-5'>跑马灯</b>功能的电路和程序免费下载

    使用单片机实现跑马灯的实验资料合集免费下载

    本文档的主要内容详细介绍的是使用单片机实现跑马灯的实验资料合集免费下载。
    发表于 08-02 17:34 3次下载
    使用<b class='flag-5'>单片机</b><b class='flag-5'>实现</b><b class='flag-5'>跑马灯</b>的实验资料合集免费下载

    使用8051单片机实现跑马灯的汇编语言免费下载

    本文档的主要内容详细介绍的是使用8051单片机实现跑马灯的汇编语言免费下载。
    发表于 07-19 17:38 6次下载
    使用8051<b class='flag-5'>单片机</b><b class='flag-5'>实现</b><b class='flag-5'>跑马灯</b>的汇编语言免费下载

    使用51单片机实现跑马灯的程序免费下载

    本文档的主要内容详细介绍的是使用51单片机实现跑马灯的程序免费下载。
    发表于 07-04 17:41 2次下载
    使用51<b class='flag-5'>单片机</b><b class='flag-5'>实现</b><b class='flag-5'>跑马灯</b>的程序免费下载

    使用单片机实现跑马灯的仿真电路图和工程文件免费下载

    本文档的主要内容详细介绍的是使用单片机实现跑马灯的仿真电路图和工程文件免费下载。
    发表于 05-12 17:51 24次下载
    使用<b class='flag-5'>单片机</b><b class='flag-5'>实现</b><b class='flag-5'>跑马灯</b>的仿真电路图和工程文件免费下载

    STC单片机实现跑马灯的C51程序免费下载

    本文档的主要内容详细介绍的是STC单片机实现跑马灯的C51程序免费下载。
    发表于 06-05 17:35 23次下载
    STC<b class='flag-5'>单片机</b><b class='flag-5'>实现</b><b class='flag-5'>跑马灯</b>的C51程序免费下载

    使用单片机实现跑马灯的程序免费下载

    本文档的主要内容详细介绍的是使用单片机实现跑马灯的程序免费下载。
    发表于 06-18 08:00 2次下载
    使用<b class='flag-5'>单片机</b><b class='flag-5'>实现</b><b class='flag-5'>跑马灯</b>的程序免费下载

    51单片机实验——跑马灯实验

    使用STC89C51单片机,书写代码实现P0口演示跑马灯效果
    发表于 11-23 16:23 12次下载
    51<b class='flag-5'>单片机</b>实验——<b class='flag-5'>跑马灯</b>实验

    基于51单片机的多模式音乐跑马灯

    具体实现功能 1、16个发光二极管做跑马灯跑马灯有10种模式。 2、按键可以切换跑马灯模式,且跑马灯速度可以用按键进行控制。 3、数码管显
    的头像 发表于 10-22 14:10 244次阅读
    基于51<b class='flag-5'>单片机</b>的多模式音乐<b class='flag-5'>跑马灯</b>