这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Renesas » 【瑞萨RA0E2开发板】01:学习一下瑞萨RA0系列的定时器知识

共2条 1/1 1 跳转至

【瑞萨RA0E2开发板】01:学习一下瑞萨RA0系列的定时器知识

高工
2025-09-14 15:22:47     打赏

一:RA0E2知识分享:

FPB-RA0E2 是一款用于 RA0E2 微控制器组的快速原型开发板,它能让用户无缝评估 RA0E2 微控制器组的特性,并使用灵活软件包(FSP)和 e2 studio 集成开发环境开发嵌入式系统应用。用户可以利用板载功能以及他们所选的流行生态系统附加组件,将他们的创意变为现实。

FPB-RA0E2 开发板的关键特性分为两类(与开发板的架构一致),具体如下:

微控制器及微控制器原生引脚访问

R7FA0E2094CFM 微控制器(简称 RA 微控制器)

32 MHz. Arm® Cortex®-M23 内核

128 KB 代码闪存,16 KB SRAM,2 KB 数据闪存

64 引脚,LQFP 封装

通过 32 个 2 针公头(未安装)实现原生引脚访问

微控制器的 VCC 电流测量点,用于精确测量电流消耗

多种时钟源 - RA 微控制器提供高速、中速和低速的片上时钟信号振荡器。20.000 MHz(未安装)和 32.768 kHz 的晶体振荡器信号也可分别用于主时钟和副时钟。

二:开发板图片如下所示:

01-1.jpg

01-2.png

三:定时器知识分享:

定时器阵列单元有八个 16 位定时器。

每个 16 位定时器称为一个通道,可作为独立定时器使用。此外,两个或多个通道可以组合使用以创建一个高性能定时器。

每个单元的通道配置

可以将单元 0 中通道 1 和通道 3 的 16 位定时器用作两个 8 位定时器(高位和低位)。可以将通道 1 和通道 3 用作 8 位定时器的功能如下:

间隔定时器(高位和低位 8 位定时器)和方波输出(仅低位 8 位定时器)

外部事件计数器(仅低位 8 位定时器)

延迟计数器(仅低位 8 位定时器)

单元 0 的通道 7 可以与串行阵列单元的 UART2 结合使用,以实现 LIN 总线通信。

四:工程创建过程:

基本的操作,请大家移步到之前的帖子,这里就不做过多的介绍:

【瑞萨RA8D1开发板学习历程】:01新建工程+控制LED引脚功能-电子产品世界论坛

4.1 R_ATU定时器的配置过程:

01-3.png

这里我使用的是R_ATU的定时器,配置定时器的中断翻转时间为1MS。

五:程序编写:

板载LED所使用的GPIO口:

01-4.png

5.1 :定时器的初始化:

void R_TAU_Time0ing_Init(void)
{

fsp_err_t err = FSP_SUCCESS;
err = R_TAU_Open(&g_timer0_ctrl, &g_timer0_cfg);
/*    Handle any errors. This function should be defined by the user.*/
assert(FSP_SUCCESS == err);
/*     Start the timer.*/
(void) R_TAU_Start(&g_timer0_ctrl);
}

5.2 :定时器回调函数中,增加对GPIO口的操作:

void g_timer0_callback(timer_callback_args_t *p_args)
{
if (TIMER_EVENT_CYCLE_END == p_args->event)
{
/*        g_timer_flag [APP_TML_16_BIT] = true;
        g_number_cycles ++;*/
count0Point++ ;
if(count0Point>=100)
{
count0Point = 0 ;
if(flag ==0)
{
flag =1 ;
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_03, BSP_IO_LEVEL_LOW);
}
else
{
flag =0 ;
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_03, BSP_IO_LEVEL_HIGH);
}
}
}
}

5.3 在主函数中,初始化定时器并对添加对另外一个GPIO口的操作:

R_TAU_Time0ing_Init();
while(1)
{
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_02, BSP_IO_LEVEL_HIGH);
R_BSP_SoftwareDelay (1000, BSP_DELAY_UNITS_MILLISECONDS);
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_02, BSP_IO_LEVEL_LOW);
R_BSP_SoftwareDelay (1000, BSP_DELAY_UNITS_MILLISECONDS);
}

六:实验现象:

按照设定的时间间隔,两个LED灯进行闪烁:

01 00_00_00-00_00_30.gif

这里需要注意的是:RA0系列的单片机的定时器与其他系列的定时器有些不同,在初始化的时候,对于对于不清楚的库函数,我们可以在atu.h中进行查找,具体如下所示:

fsp_err_t R_TAU_Open(timer_ctrl_t * const p_ctrl, timer_cfg_t const * const p_cfg);
fsp_err_t R_TAU_Stop(timer_ctrl_t * const p_ctrl);
fsp_err_t R_TAU_Start(timer_ctrl_t * const p_ctrl);
fsp_err_t R_TAU_Reset(timer_ctrl_t * const p_ctrl);
fsp_err_t R_TAU_Enable(timer_ctrl_t * const p_ctrl);
fsp_err_t R_TAU_Disable(timer_ctrl_t * const p_ctrl);
fsp_err_t R_TAU_PeriodSet(timer_ctrl_t * const p_ctrl, uint32_t const period_counts);
fsp_err_t R_TAU_CompareMatchSet(timer_ctrl_t * const        p_ctrl,
uint32_t const              compare_match_value,
timer_compare_match_t const match_channel);
fsp_err_t R_TAU_DutyCycleSet(timer_ctrl_t * const p_ctrl, uint32_t const duty_cycle_counts, uint32_t const pin);
fsp_err_t R_TAU_InfoGet(timer_ctrl_t * const p_ctrl, timer_info_t * const p_info);
fsp_err_t R_TAU_StatusGet(timer_ctrl_t * const p_ctrl, timer_status_t * const p_status);
fsp_err_t R_TAU_CallbackSet(timer_ctrl_t * const          p_api_ctrl,
void (                      * p_callback)(timer_callback_args_t *),
void const * const            p_context,
timer_callback_args_t * const p_callback_memory);
fsp_err_t R_TAU_Close(timer_ctrl_t * const p_ctrl);
fsp_err_t R_TAU_LinMeasurementFuncSwitch(timer_ctrl_t * const p_ctrl, tau_function_t func);



关键词: 瑞萨     RA0E2     ATU定时器    

院士
2025-09-14 22:10:41     打赏
2楼

真棒真棒!

我上周五抽中了一个RA4E0开发板

嘿嘿


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]