【瑞萨RA2系列开发板体验】+FreeRTOS+LED
作者:jf_55088080
瑞萨RA2E1上使用FreeRTOS,创建工程并点亮LED。
1.板子长这样如图片RA2E1_Board。LQFP48的封装,整体很简洁,所有的IO都引出,带两个按键,两个触摸。两个LED,注意没有电源灯,接电源时需要注意,不能接反了,支持3V3和5V。接上电源后,板子LED会闪烁,出厂已经下载了一个示例程序。要是不闪,先拔了,再去检查下电源是不是接错了。
2.因为板子不自带下载器,所以你需要准备一个V9及以上版本的JLINK,JLINK-OB/DAP是不能下载程序的。
3.开发环境这选用e2 Studio,Keil下也能开发,不过安装比较麻烦,对Keil的版本和编译器有严格的要求,还需要额外的配置软件FSP。相对来说,e2 Studio一个软件就够了,下好安装包,一路下一步安装就行了。安装包名字 setup_fsp_v3_1_0_rasc_v2021-04,注意后面带rasc。这个集成类似于CubeMX的一个配置功能。
4.创建工程。
1)打开e2Studio,点浏览,选择一个路径,存放工作空间,尽量别有中文路径。进去会弹出个提示信息,点APPLY或者取消都行,这个不重要,把欢迎也关了。
2)左上角点文件,给工程取个名字,存放的位置,就缺省就行,这会保存到和工作空间一个路径下,或者你自己再选一个路径 。
3)Device选择对应的芯片型号,看板子上的芯片型号。Board可以选择是基于芯片创建还是基于开发板创建,基于开发板创建,可以创建例程工程,这种工程里面配置好了一些外设,还有一些写好了的例子。我这选择基于芯片创建。这个熟悉了之后,是没啥太大区别的。C/C++看你自己使用的开发语言,右下角的调试器先选JLINK,之后是可以修改的。
4)下一步,右边选上FreeRTOS,左边选第一个,默认的就行。暂未涉及到作为第三方库开发。然后就只有一个选项了,下一步。
5)到这就创建完成了,点左上角有个锤子一样的图标,编译一下,没有错误,但有警告,关于类型转换的,这个不影响。
5.配置FreeRTOS并创建第一个线程
1)左边有个项目资源管理器,没有的话,点窗口,显示视图,项目资源管理器。自己移动后,找不到了,可以复位透视图,点窗口,透视图,复位透视图就行。
2)左边找到configuration.xml,双击之后,就可以进到配置选项。配置芯片本身的外设和FreeRTOS都在这个里面。
3)点击Stacks,左上角有个New Thread,点一下就会在下面新建一个线程。双击New Thread,左下角就会出现配置选项。Common是关于FreeRTOS的,Thread是关于你新建的这个线程的。
4)Symbol是你线程句柄的名字,Name是你线程入口的名字,线程的函数实体。配置栈大小和优先级。这的内存开辟方式使用静态开辟就行。如果要是用动态开辟,需要把Common中的Memory Allocation中的Dynamic Allocation使能,并设置总的Heap Size。这个大小必须大于你需要使用的Heap,不能一样。
5)其他的就使用默认的就行,需要使用什么就使能什么。用过FreeRTOS的大概都能看懂。
6)右上角点Generate生成代码。然后编译,没错误。
6.点亮LED
1)点击configuration.xml,pin,Ports ,P1,P103,Mode选Output Mode。P104也是,这两个GPIO是板子上的LED,生成代码。
2)左边项目资源管理器,ra_gen下面有两个和你创建的线程句柄名一样的.c和.h文件,这一个是线程的创建和初始化。这是自动生成的,不能修改,就算修改,你重新生成工程后,也会恢复到之前的状态。ra_gen下的文件都不能修改。src下面有目前有两个.c。一个是hal_entry.c系统自带的。在这个里面,你可以加自己的代码,但是得注意他这执行流程。另一个就是创建的线程入口函数。这一个就是你这个线程具体干啥的。自己写功能。
3)在led_entry中的while(1)添加LED的代码,GPIO不用初始化,系统会自动进行初始化。
- //LED操作
- #define LED_ON() do{\
- R_IOPORT_PinWrite(&g_ioport_ctrl, (bsp_io_port_pin_t)BSP_IO_PORT_01_PIN_04, (bsp_io_level_t)0);\
- R_IOPORT_PinWrite(&g_ioport_ctrl, (bsp_io_port_pin_t)BSP_IO_PORT_01_PIN_03, (bsp_io_level_t)0);\
- }while(0);\
- #define LED_OFF() do{\
- R_IOPORT_PinWrite(&g_ioport_ctrl, (bsp_io_port_pin_t)BSP_IO_PORT_01_PIN_04, (bsp_io_level_t)1);\
- R_IOPORT_PinWrite(&g_ioport_ctrl, (bsp_io_port_pin_t)BSP_IO_PORT_01_PIN_03, (bsp_io_level_t)1);\
- }while(0);\
- //250ms对调一下电平。
- while(1)
- {
- LED_ON();
- vTaskDelay (250);
- LED_OFF();
- vTaskDelay (250);
- }
复制代码
编译没错。
7.下载程序
1)将DIO和CLK连到接JLINK上。
2)板子上把BOOT引出来了,检查一下下载模式,SCI模式是使用串口下载的,用JLINK下不进去的。
3)点击编译旁边那个按钮进入仿真,进去后有个绿色的三角形的按钮是运行。
8.现象
两个LED同时以0.25s的时间间隔闪烁。
|