本篇文章将以RA6E2为例,介绍如何使用瑞萨电子FSP CAN-FD lite的堆栈来设计和实现基于CAN的简易系统。最后,使用两套FPB-RA6E2和CAN收发器模块通过CAN实现相互通信,按下一块板上的按键S1会发送CANFD数据。
1安装和准备
本节要点:
本节学习如何搭建应用实例以及如何将套件连接至电脑端。
1.1 首先确保已安装所有实例工具
e2 studio 2023-01及以上版本
FSP 4.3.0及以上版本
GCC ARM Embedded 10.3.1.20210824及以上版本
下载e2 studio 2023-04 + FSP 4.4.0
1.2 本实例将用到如下组件
两块FPB-RA6E2,两块CANFD收发器模块,两根USB micro-B线,十三根跳线。
CANFD收发器模块,由瑞萨AE自制,如果有需要,请联络瑞萨销售或者代理。也可使用其他CANFD收发器模块。
1.3 使用杜邦线连接FPB板和CANFD收发器模块
FPB-RA6E2和CANFD收发器模块的连接方式:
FPB-RA6E2的J3:2(P401)与CANFD收发器模块的CTX相接(母转母杜邦线)
FPB-RA6E2的J3:3(P402)与CANFD收发器模块的CRX相接(母转母杜邦线)
FPB-RA6E2的J2:6(GND)与CANFD收发器模块的GND相接(公转母杜邦线)
FPB-RA6E2的J2:4(3.3V)与CANFD收发器模块的3V3相接(公转母杜邦线)
FPB-RA6E2的J2:5(5V)与CANFD收发器模块的5V相接(公转母杜邦线)
2块CANFD收发器模块的连接方式:
使用3根母转母杜邦线分别连接两个收发器模块上的CANH、CANL和GND。
1.4 连接示意
1.5 使用Micro USB连接FPB-RA6E2,Micro USB一端接PC,另一端接FPB-RA6E2的J8。验证如下现象:
Debug USB端口(J8)附近的绿色LED(POWER)是否亮起且不闪烁。
板子右上角的橙色LED(LED6)是否亮起。
2CANFD:创建FPB-RA6E2 Blinky工程
本节要点:
本节学习项目开发,熟悉e2 studio和FSP,创建简单的Blinky工程,验证FPB-RA6E2可以正常运行。
2.1 运行e2 studio,并打开workspace执行如下步骤:
在菜单中选择“New”。
选择“Renesas C/C++ project”。
下拉菜单中选择“Renesas RA”。
2.2 输入fpb_ra6e2_canfd_lab,您也可以自定义名称。(但是不可以有中文、特殊字符)
2.3 选择FPB-RA6E2,确保您使用的是FSP 4.3.0及以上,确保GCC版本为10.3.1.20210824:
2.4 下一页面选择默认选项。
● 工程类型:Flat (Non-TrustZone) Project
● RTOS选择:No RTOS
最后一个页面选择Bare Metal - Blinky
2.5 如果系统提示打开“Configuration”透视图,请单击“Open Perspective”。
2.6 打开FSP Configuration
如果仍未打开,请在预览窗口双击 configuration.xml 文件。
2.7 点击编译代码。
2.8 高亮fpb_ra6e2_canfd_lab工程
按下调试按钮
2.9 运行代码
检查FPB-RA6E2板上的两个绿色LED(LED1和LED2)灯是否同步闪烁。
2.10 按下断开按钮
3CANFD:发送CANFD数据
本节要点:
本节学习如何发送CANFD数据,要求按下任意一块FPB-RA6E2板上的S1按钮后,发送CANFD数据。
3.1 打开FSP Configuration
如果仍未打开,请在预览窗口双击configuration.xml文件。
3.2 选择Pins Tab,点击 IRQ,确认目前IRQ9已设为P304:
3.3 设置Stacks
点击New Stack,选择External IRQ (r_icu)。
3.4 设置External IRQ (r_icu)的属性
Name: g_external_irq
Channel: 9
Digital Filtering: Enabled
Callback: user_irq_callback
3.5 点击生成代码
3.6 在Project Explorer窗口,双击src文件夹下的hal_entry.c文件。
在26行添加以下内容:
左右滑动查看更多
#define APP_ERR_TRAP() __asm("BKPT #0 ") /* trap upon the error */ /* Boolean flag to determine switch is pressed or not.*/ volatile bool g_sw_press = false;
3.7 在hal_entry函数中第43行添加下方内容(API可以通过从Developer Assistance下面拖拽的方式完成):
左右滑动查看更多
fsp_err_t err = FSP_SUCCESS; /* Initialize External IRQ driver*/ err = R_ICU_ExternalIrqOpen(&g_external_irq_ctrl, &g_external_irq_cfg); if(FSP_SUCCESS != err) { APP_ERR_TRAP(); } /* Enable External IRQ driver*/ err = R_ICU_ExternalIrqEnable(&g_external_irq_ctrl); /* Handle error */ if(FSP_SUCCESS != err) { APP_ERR_TRAP(); }
3.8 hal_entry.c文件中R_BSP_WarmStart()后,添加callback函数(也可以通过从Developer Assistance下面拖拽的方式完成)。
左右滑动查看更多
/* Callback function */ void user_irq_callback(external_irq_callback_args_t *p_args) { /* TODO: add your own code here */ fsp_err_t err = FSP_SUCCESS; /* Make sure it's the right interrupt*/ if(9 == p_args->channel) { g_sw_press = true; } }
3.9 点击编译代码。
3.10 高亮fpb_ra6e2_canfd_lab工程
按下调试按钮
3.11 在user_irq_callback中设置断点(126行左侧地址或者行数显示处双击鼠标左键)。
3.12 运行代码,并确认按下板上S1时,能正确进入callback中。
确认后,请将这个断点取消(断点处双击鼠标左键)。
3.13 选择Pins Tab,点击CANFD0,Pin Group Selection选择_B Only的情况下,Operation Mode选择Enabled,发生引脚使用冲突。
在Ports中找到P402,打开Mode的下拉菜单点击Disabled,由于已经设置了CANFD的引脚,此时Mode会自动切换为Peripheral mode,并确认当前P402为CANFD0_CRX0。
同样地,修改P401的设置。
经过以上修改,可以看到Pins Tab上的error就没有了。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !