FPB-RA0E1是瑞萨官方的RA0E1快速原型开发板
可以访问官网:https://www.renes
获得相关资料。
瑞萨MCU的集成开发环境是e2 studio。由于之前有RA生态社区的开发板试用经历,e2 studio已经安装过了,不用重新安装。
与RA生态社区的开发板不同,FPB-RA0E1提供了板载的JLINK调试器,下载调试程序十分方便。但是JLINK竟然没有和MCU的串口连接,需要额外外接串口工具才可以和电脑通讯。
FPB-RA0E1是官方开发板,在e2 studio中可以直接基于开发板建立工程,但是e2 studio缺省将所有的引脚都初始化了,不利于初学者使用,最好在建立工程时从选择MCU(R7FA0E1073CFJ)开始。
1、建立工程
建立工程时,选择MCU:RR7FA0E1073CFJ
2、管脚配置
LED1:P008;LED2:P009
USER_BUTTON:P200
串口:P207,P208
3、STACKS配置
UART配置:
外部中断配置:
4、软件部分
1)printf重定向
#ifdef __GNUC__ //串口重定向 #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif PUTCHAR_PROTOTYPE { err = R_UARTA_Write(&g_uart0_ctrl, (uint8_t *)&ch, 1); if(FSP_SUCCESS != err) __BKPT(); while(uart_send_complete_flag == false){} uart_send_complete_flag = false; return ch; } int _write(int fd,char *pBuffer,int size) { for(int i=0;i<size;i++) { __io_putchar(*pBuffer++); } return size; }
2)uart回调函数
volatile bool uart_send_complete_flag = false; void user_uart_callback (uart_callback_args_t * p_args) { if(p_args->event == UART_EVENT_TX_COMPLETE) { uart_send_complete_flag = true; } }
3)外部中断回调
/* 外部中断回调函数 */ void external_irq_callback(external_irq_callback_args_t *p_args) { (void)p_args; // 未使用参数 bsp_io_level_t level; //printf("external_irq_callback\r\n"); /* 检查P200引脚状态 */ err=R_IOPORT_PinRead(&g_ioport_ctrl,BSP_IO_PORT_02_PIN_00,&level); assert(FSP_SUCCESS == err); if(level==BSP_IO_LEVEL_HIGH) { if(button_pressed==1){ button_pressed=0; }else{ button_pressed=1; } } }
4)hal_entry函数
void hal_entry(void) { /* TODO: add your own code here */ err = R_UARTA_Open(&g_uart0_ctrl, &g_uart0_cfg); assert(FSP_SUCCESS == err); /* Configure the external interrupt. */ err = R_ICU_ExternalIrqOpen(&g_external_irq0_ctrl, &g_external_irq0_cfg); assert(FSP_SUCCESS == err); /* Enable the external interrupt. */ /* Enable not required when used with ELC or DMAC. */ err = R_ICU_ExternalIrqEnable(&g_external_irq0_ctrl); assert(FSP_SUCCESS == err); unsigned char buff[]="RA E2STUDIO"; uint8_t buff_len =(uint8_t) strlen(buff); err = R_UARTA_Write(&g_uart0_ctrl, buff, buff_len); if(FSP_SUCCESS != err) __BKPT(); while(uart_send_complete_flag == false){} uart_send_complete_flag = false; int int_i=0; float float_i=66.20f; char char_i[]="hello e2studio"; while(1) { printf("int_i=%d\n",int_i); printf("float_i=%.2f\n",float_i); printf("char_i='%s'\n",char_i); int_i++; if(int_i>100) int_i=0; if(button_pressed==1){ R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_08, BSP_IO_LEVEL_HIGH); R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_09, BSP_IO_LEVEL_HIGH); } else { //R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS); R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_08, BSP_IO_LEVEL_LOW); R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_09, BSP_IO_LEVEL_LOW); } R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS); } #if BSP_TZ_SECURE_BUILD /* Enter non-secure code */ R_BSP_NonSecureEnter(); #endif }
主要实现UART输出,每按一次USER_BUTTON翻转LED1、LED2.
5)运行
5、总结
瑞萨的软件环境具有独立性,如果习惯了其他厂商的产品,可能需要一段适应期。
瑞萨的资料非常齐全,可以从官网、RA生态社区和其他途径获得。并且B站的教学视频非常丰富,入门起来不难。