瑞萨Renesas RA2L1 开发板测评(2)--LED闪烁
创始人
2025-06-01 06:58:41

前言

(1)首先感谢 李肯前辈的活动,从而申请到了RA2L1开发板的测评。
(2)注意,学习本文之前要学习瑞萨Renesas RA2L1 开发板测评(1)--keil环境配置;
(3)我们拿到开发板的第一步就应该学习GPIO的输出,所以以LED闪烁作为例子。

启动文件简介

以STM32为例

(1)首先,我们需要知道,开发板开机的第一步是执行Reset_Handler这个程序。这个时候有人就说了:“放屁!是执行main函数,不懂装懂!”是的,对于绝大多数人来说,都认为main函数才是开机执行的第一个程序,这是很正常的,但是是错误的。
(2)为什么我们会常常有这样错误的想法呢?因为对于绝大多数人而言,他们没有接触过Reset_Handler,而也不需要他们接触。因为用户只需要编写main函数里面的内容即可。前面的初始化是固定的。
但是为什么我要介绍这个东西呢?因为瑞萨的Reset_Handler与我们经常接触的STM32配置有些许区别。我以STM32为切入方便各位理解。
(3)IMPORT:表示该标号来自外部文件,跟 C 语言中的 EXTERN 关键字类似。这里表示 SystemInit 和 __main 这两个函数均来自外部的文件。

RA2E1启动开机启动程序

(1)瑞萨的Reset_Handler程序并不是使用汇编程序编写的。而且,对于STM32而言SystemInit程序都是一些固定死的程序,不需要我们过多查看。而对于瑞萨开发板有所不同,他的SystemInit里面是会随着我们在rasc中的配置而发生改变的。
(2)这个时候有人会问了。什么变化呢?很简单,就是我们的IO初始化,会存放到R_BSP_WarmStart()函数中,而R_BSP_WarmStart()函数会被SystemInit()函数调用。
(3)现在我们知道了开发板程序执行顺序了。是不是可以直接在main()函数里面直接写程序了呢?不是的,瑞萨开发板有规定当使用 RTOS 时,程序从 main 函数开始进行线程调度;当没有使用 RTOS 时,C 语言程序的入 口函数 main 函数调用了 hal_entry 函数。
这是什么意思呢?很简单,如果我们使用了操作系统,就是从main()函数开始写,而如果是裸机开发,就是从hal_entry()函数开始。但是这个时候就有人问了开机启动的第一个程序不是Reset_Handler()吗?而Reset_Handler()中调用的是main()函数啊。为什么我们是要在hal_entry()函数中写程序呢?看下图

LED闪烁程序编写

利用rasc初始化GPIO

(1)我们知道了瑞萨开发板的启动文件之后,就可以开始编写程序了。首先为我们在keil环境配置那一章获得了一个文件夹了,此时打开。
(2)因为我们在上一章节已经将rasc添加进入keil中了,所以打开右上角的Tools,RA Smart Configurator。
(3)此时我们需要打开原理图,因为我们需要知道LED是由哪一个引脚控制,需要给什么电平才能够亮灯。
(4)从原理图中获得信息之后,我们开始配置rasc。
(5)配置好之后,关闭rasc。界面如下,我们先下载程序进去,看看LED1是否被点亮。

keil程序编写

(1)因为我们本文是要让LED1闪烁,所以需要在hal_entry()函数中编写程序。我首先介绍一下需要用到的函数。
/*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*/
(2)由此我们可以得出以下代码:
void hal_entry(void)//为什么在这里写程序,看RA2E1启动开机启动程序介绍
{/* TODO: add your own code here */while(1){//将P502设置为低电平R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_05_PIN_02,BSP_IO_LEVEL_LOW);//延时1sR_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);//将P502设置为高电平R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_05_PIN_02,BSP_IO_LEVEL_HIGH);//延时1sR_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);}
#if BSP_TZ_SECURE_BUILD/* Enter non-secure code */R_BSP_NonSecureEnter();
#endif
}

将LED程序封装

将led文件添加进入keil

(1)作为一名程序员,必须具备模块的思想,绝不重复造轮子。所以我们要学会如何将已经写好的程序进行封装。
(2)在因为我们需要使用rasc配置程序,而如果我们突然需要更改rasc的初始化,怕自动生成的代码将我们原来生成的代码删除。于是瑞萨就规定了,用户自己写的程序需要放在src文件夹下这样就不会被自动生成的代码删除。
(3)首先我们在src文件夹中创建一个led文件夹,然后led中加入led.c和led.h文件。
(4)当我们再次打开keil,发现led.c和led.h并没有加入工程。这就需要我们重新打开rasc——>点击“Generate Project Content”按钮 ——>然后关闭rasc。

在led中写入程序

led.c

双击右侧project中的led.c文件写入如下程序
#include "led.h"/*函数说明:led1闪烁*传入参数:无*返回参数:无*/
void led_1_flicker(void)
{LED1_lighting_up;R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);LED1_lighting_off;R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);
}/*函数说明:led2闪烁*传入参数:无*返回参数:无*/
void led_2_flicker(void)
{LED2_lighting_up;R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);LED2_lighting_off;R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);
}

led.h

我们需要注意,因为led.h文件很可能被多个文件重复引用。所以我们需要加上
#ifndef/#define/#endif进行保护。
#ifndef    __led_H
#define    __led_H#include "hal_data.h"/*********   参数宏定义     *********/
#define LED1 BSP_IO_PORT_05_PIN_02
#define LED2 BSP_IO_PORT_05_PIN_01/*********   函数宏定义     *********/
#define LED1_lighting_off    R_IOPORT_PinWrite(&g_ioport_ctrl,LED1,BSP_IO_LEVEL_LOW)
#define LED1_lighting_up     R_IOPORT_PinWrite(&g_ioport_ctrl,LED1,BSP_IO_LEVEL_HIGH)
#define LED2_lighting_off    R_IOPORT_PinWrite(&g_ioport_ctrl,LED2,BSP_IO_LEVEL_LOW)
#define LED2_lighting_up     R_IOPORT_PinWrite(&g_ioport_ctrl,LED2,BSP_IO_LEVEL_HIGH)/*********   函数声明      *********/
void led_1_flicker(void);
void led_2_flicker(void);#endif

hal_entry.c

(1)在hal_entry()写入如下函数。
(2)需要注意:我们上面只初始化了LED1,所以我们还需要使用rasc初始化LED2。否则LED2是不会闪烁的。
void hal_entry(void)
{/* TODO: add your own code here */while(1){led_1_flicker();led_2_flicker();}
#if BSP_TZ_SECURE_BUILD/* Enter non-secure code */R_BSP_NonSecureEnter();
#endif
}

相关内容

热门资讯

“妖王”惠城环保3年15倍,扣... 在5月30日股价创下历史新高后,惠城环保2022年11月以来的累计涨幅超过15倍,系同时间段A股市场...
不慌!港股深 v,a50 期指... 今天早盘港股大跳水,搞得很多股民对节后行情比较担忧。但港股盘中触底反弹,收盘已收回盘中跌幅,a50期...
刚刚,杀出一个医药大白马,挑战... 重重挑战激发无限动力!集采、竞争,仿佛是医药企业头顶的两座大山。连恒瑞医药、华东医药都不免因此出现短...
香港四大家族之一,有麻烦了……... 原创 刘博团队又一家知名大房企,惊爆财务困境。今天,香港四大家族之一——郑裕彤家族控股的、在香港上市...
002875,明日停牌!节前已... 2025.06.02本文字数:279,阅读时长大约1分钟A股“童装第一股”安奈儿正筹划公司控制权变更...
争议升级!两家上市公司深夜互相... 5月中旬以来,玻尿酸、重组胶原蛋白之争引发热议,频频登上网络热搜,且有愈演愈烈之势。6月1日晚间,医...
两宗券商“老鼠仓”曝光:中信证... 地方证监局最新披露的罚单,让两起券商从业人员“老鼠仓”案件浮出水面,2家龙头券商中信证券、华泰证券牵...
土耳其主要银行业指数上涨1.5... 每经AI快讯,6月2日,土耳其主要银行业指数上涨1.5%。
【12366问答】离境退税相关... 12366 热点梳理 问答来啦 退税商店在向境外旅客开具《离境退税申请单》后,如发生境外旅客退货等...
高凌信息:终止发行股份购买资产... 新京报贝壳财经讯 高凌信息6月2日发布公告,公司于2024年12月启动筹划实施重大资产重组,拟通过发...
赛诺菲斥资超90亿美元收购罕见... 当地时间6月2日,法国制药巨头赛诺菲与美国生物药企Blueprint Medicines公司宣布达成...
黔源电力:董事长罗涛因工作原因... 新京报贝壳财经讯 黔源电力6月2日晚间公告,公司董事长罗涛因工作原因申请辞去公司董事长、董事、董事会...
京沪高铁:已完成约10亿元股份... 新京报贝壳财经讯 6月2日,京沪高铁(601816.SH)公告称,公司已使用自有资金约10亿元,以集...
恒宝股份:实控人在股票交易异常... 新京报贝壳财经讯 6月2日,恒宝股份发布异动公告,公司控股股东、实际控制人在股票交易异常波动期间存在...
机构论后市丨关注核心资产;对科... 沪指本周累计跌0.03%,深成指累计跌0.91%,创业板指累计跌1.4%。A股后市怎么走?看看机构怎...
宏信证券更名天府证券,中小券商... 因实控人将发生变化,时隔13年,宏信证券再次更名。国家企业信用信息公示系统信息显示,宏信证券有限责任...
最新!全球9大汽车集团总负债:... 谁是车界负债之王?在企业的经营生产中,负债是难以避免的。企业通过合理的负债水平,是有助于其快速发展的...
韩国紧急商讨应对美上调钢铝关税   新华社首尔6月2日电(记者黄昕欣 陆睿)韩国产业通商资源部2日召集钢铝产业代表召开紧急会议,商讨...
二次育肥“禁令”来了?有猪企回... 二次育肥禁令来了? 今天上午,猪肉板块异动拉升。有市场消息称,“昨天,相关部门开会,透露引导生猪行业...
恒指探底回升跌0.57% 黄金...   中新经纬6月2日电 周一,港股三大指数集体低开,此后探底回升。截至收盘,恒生指数跌0.57%报2...
在下沉市场,找不到中国汽车的未... 原本已经渐入缓和的车市价格战,随着年中6月的到来而再度升温。下到5万元接近老头乐的“车市踢脚线”,上...
全维度突破!雅迪冠能S长续航进... 文 | 无锈钵“你可能不认识我们,但你一定见过我造的车。”5月26日,浙江宁波,雅迪全球产品及技术副...
晶科能源:收到政府补助9800... 晶科能源(688223)公告,5月29日收到政府补助人民币9800万元,属于与收益相关的政府补助款项...
国际金价年内上涨超25%,5月... 首先来看美股上周交易的情况。受美欧贸易谈判出现积极信号、美国国际贸易法院一度“叫停”特朗普政府多项关...
全球人造草坪老二青岛青禾“躺平... 5月26日-6月2日,沪深北合计有3家企业终止审核,分别为沪市主板申报企业青岛青禾人造草坪股份有限公...
MiniMax正暗戳戳憋大招 ... 出品|虎嗅科技组作者|宋思杭编辑|苗正卿头图|视觉中国AI六小虎之一的MiniMax正在憋大招,而这...
今日起招股发售价9.75港元,... 6月2日,车来了母公司元光科技启动全球发售,发售价9.75港元,预计将在6月10日在港交所挂牌。元光...
港股午评:恒生指数跌2.20%... 新京报贝壳财经讯 6月2日,港股午间收盘,恒生指数跌2.20%,恒生科技指数跌2.43%。石药集团跌...
夏乐:美债压力与美元走弱 全球... 原创 财联社 蜂网专家2025年05月29日《首席说》是财联社倾力打造的一档高端直播联线栏目。面向泛...
罗志恒:财政政策不应受3%赤字... 罗志恒系粤开证券首席经济学家、中国首席经济学家论坛理事自2008年以来,本轮积极财政政策实行了长达1...