一: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 的晶体振荡器信号也可分别用于主时钟和副时钟。
二:开发板图片如下所示:
三:定时器知识分享:
定时器阵列单元有八个 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定时器的配置过程:
这里我使用的是R_ATU的定时器,配置定时器的中断翻转时间为1MS。
五:程序编写:
板载LED所使用的GPIO口:
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灯进行闪烁:
这里需要注意的是: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);