查看: 1707|回复: 1

【瑞萨RA2系列开发板体验】+FreeRTOS+LED

[复制链接]

93

主题

136

帖子

8万

积分

管理员

11111

Rank: 9Rank: 9Rank: 9

积分
84460
QQ
发表于 2022-5-30 14:18:49 | 显示全部楼层 |阅读模式
【瑞萨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不用初始化,系统会自动进行初始化。
  1. //LED操作
  2. #define LED_ON()  do{\
  3.         R_IOPORT_PinWrite(&g_ioport_ctrl, (bsp_io_port_pin_t)BSP_IO_PORT_01_PIN_04, (bsp_io_level_t)0);\
  4.         R_IOPORT_PinWrite(&g_ioport_ctrl, (bsp_io_port_pin_t)BSP_IO_PORT_01_PIN_03, (bsp_io_level_t)0);\
  5. }while(0);\

  6. #define LED_OFF()  do{\
  7.         R_IOPORT_PinWrite(&g_ioport_ctrl, (bsp_io_port_pin_t)BSP_IO_PORT_01_PIN_04, (bsp_io_level_t)1);\
  8.         R_IOPORT_PinWrite(&g_ioport_ctrl, (bsp_io_port_pin_t)BSP_IO_PORT_01_PIN_03, (bsp_io_level_t)1);\
  9. }while(0);\
  10. //250ms对调一下电平。
  11.     while(1)
  12.     {
  13.         LED_ON();
  14.         vTaskDelay (250);
  15.         LED_OFF();
  16.         vTaskDelay (250);
  17.     }
复制代码


编译没错。
7.下载程序
1)将DIO和CLK连到接JLINK上。
2)板子上把BOOT引出来了,检查一下下载模式,SCI模式是使用串口下载的,用JLINK下不进去的。
3)点击编译旁边那个按钮进入仿真,进去后有个绿色的三角形的按钮是运行。
8.现象
两个LED同时以0.25s的时间间隔闪烁。











回复

使用道具 举报

3

主题

195

帖子

1168

积分

金牌会员

Rank: 6Rank: 6

积分
1168
发表于 2023-3-14 11:40:03 | 显示全部楼层

不错,学习一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

用户排行榜

RA助手

主题: 116帖子:134精华:0

RA_Lance

主题: 93帖子:136精华:9

lugl

主题: 52帖子:150精华:1

xujiwei263

主题: 18帖子:86精华:0

Juggernaut

主题: 12帖子:118精华:0

books咦

主题: 11帖子:11精华:2
快速回复 返回顶部 返回列表