【致敬未来的攻城狮计划】连续打卡第8天+RA2E1两个灯交替闪烁

时间:2021-06-01 01:16:00

开启攻城狮的成长之旅!这是我参与的由 CSDN博客专家 架构师李肯http://yyds.recan-li.cn)和 瑞萨MCU (瑞萨电子 (Renesas Electronics Corporation) ) 联合发起的「 致敬未来的攻城狮计划 」的第 8 天,点击查看活动计划详情 (https://bbs.csdn.net/topics/613916237)!

感谢瑞萨和架构师李肯提供的机会,也感谢群友们对知识的无私分享以及对我的各种问题的不吝指正。


昨天照着瑞萨用户手册点亮了红灯。

今天照着大佬的博客,学习一下如何根据点亮另外一个灯。

因为我还不熟,所以这次仍然使用e2studio。

寻找LED位置

瑞萨的用户手册用的是BSP,板子支持包里已经提前写好了。

这次是利用原理图找:

原理图就在CPK-RA2L1_RA2E1设计文件包.zip中。

官网下载链接:https://www.renesas.cn/cn/zh/document/sch/1596866?r=1596846

图中P502和P501分别控制一个LED灯,灯均接地,需要输出高电平才能产生电流,点亮灯泡。

【致敬未来的攻城狮计划】连续打卡第8天+RA2E1两个灯交替闪烁

接下来进入e2studio。

依次双击打开configuration.xml,点击Pins,在Ports菜单中找到P501P502,修改Mode为输出高电平。

【致敬未来的攻城狮计划】连续打卡第8天+RA2E1两个灯交替闪烁

如果是在e2studio中,可以依次点击左上角的“构建”和“调试”。

如果是在keil中打开RASC,需要先在RASC点击"Generate Project Content",再点击“编译”和“下载”。

运行结果:红灯和蓝灯成功点亮。

【致敬未来的攻城狮计划】连续打卡第8天+RA2E1两个灯交替闪烁

我们可以在IDE中分别指定P501和P502单独点亮。即可得到:

  • P501为蓝灯。
  • P502为红灯。

官方的原理图中也对LED灯的颜色做了标注。

编写程序

以下内容引用自群友的博客:【致敬未来的攻城狮计划】--RA2E1 开发板测评(2)LED闪烁_风正豪的博客-CSDN博客

我们即将用到的函数:

/*R_IOPORT_PinWrite()用于设置IO高低电平
 *传入参数有三个
 *参数一:
    *固定为&g_ioport_ctrl
 *参数二:
    *指定IO口,比如我们需要控制P502,就输入BSP_IO_PORT_05_PIN_02。如果是控制P411,就输入BSP_IO_PORT_04_PIN_11
 *参数三:
    *指定输出的电平,BSP_IO_LEVEL_LOW输出低电平,BSP_IO_LEVEL_HIGH输出高电平
 */
/*R_BSP_SoftwareDelay()用于设置延时时间
 *参数一:
    *设置延时时间长短,是32bit的数据,所以只能输入0-4294967296(正常人应该都不会超过。。)
 *参数二:
    *设置延时单位,BSP_DELAY_UNITS_SECONDS表示单位为秒,BSP_DELAY_UNITS_MILLISECONDS表示ms,BSP_DELAY_UNITS_MICROSECONDS是us
 */

于是得到了控制P502每隔一秒闪一次的代码,将其填入到hal_entry.c中。

while (1)
{
    //将P502设置为低电平
    R_IOPORT_PinWrite (&g_ioport_ctrl, BSP_IO_PORT_05_PIN_02, BSP_IO_LEVEL_LOW);
    //延时1s
    R_BSP_SoftwareDelay (1, BSP_DELAY_UNITS_SECONDS);
    //将P502设置为高电平
    R_IOPORT_PinWrite (&g_ioport_ctrl, BSP_IO_PORT_05_PIN_02, BSP_IO_LEVEL_HIGH);
    //延时1s
    R_BSP_SoftwareDelay (1, BSP_DELAY_UNITS_SECONDS);
}

因为我的想法是让红灯和蓝灯交替闪烁。

因此需要在佬的代码上改一改。

while (1)
{
    //将P501设置为低电平,P502设置为高电平。
    R_IOPORT_PinWrite (&g_ioport_ctrl, BSP_IO_PORT_05_PIN_01, BSP_IO_LEVEL_LOW);
    R_IOPORT_PinWrite (&g_ioport_ctrl, BSP_IO_PORT_05_PIN_02, BSP_IO_LEVEL_HIGH);
    //延时0.5s
    R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
    //将P501设置为高电平,P502设置为低电平。
    R_IOPORT_PinWrite (&g_ioport_ctrl, BSP_IO_PORT_05_PIN_01, BSP_IO_LEVEL_HIGH);
    R_IOPORT_PinWrite (&g_ioport_ctrl, BSP_IO_PORT_05_PIN_02, BSP_IO_LEVEL_LOW);
    //延时0.5s
    R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
}

顺利的话,就会看到红灯和蓝灯交替闪烁。

对比一下用户手册上的代码:

R_IOPORT_PinWrite (&g_ioport_ctrl, BSP_IO_PORT_05_PIN_01, BSP_IO_LEVEL_LOW);//本次

g_ioport.p_api->pinWrite (&g_ioport_ctrl, Leds.p_leds[BSP_LED_LED1], BSP_IO_LEVEL_LOW);//用户手册

个人觉得这次的代码更简单一些。

【致敬未来的攻城狮计划】连续打卡第8天+RA2E1两个灯交替闪烁

群友的博客用的是keil,还用到了多文件编写,这个我还没不会。

这些内容也会成为接下来的几天的学习目标之一,到时再做分享。

出现的问题

上一行说到:顺利的话,就会看到红灯和蓝灯交替闪烁。

但也很有可能不顺利,比如我就遇到了,只有一个灯在闪。

问题可能就是接口不是Output输出模式。需要在Pin Configuration页面中设置P501和P502为输出模式。

【致敬未来的攻城狮计划】连续打卡第8天+RA2E1两个灯交替闪烁

这两个输出模式的区别就是:Output mode(Initial Low)初始状态为低电平;Output mode(Initial High)初始状态为高电平。

如果都设置初始状态为High高电平,则在SystemInit();断点执行完,在hal_entry ();断点执行前的这段时间,板子上的两个灯都会被点亮。

【致敬未来的攻城狮计划】连续打卡第8天+RA2E1两个灯交替闪烁

用到的资料


每日收获:学识++