【Clion CubeMX开发STM32】(四)RTOS篇:使用ENV工具创建RT Thread项目
【Clion+CubeMX开发STM32】(四)RTOS篇 创建RT Thread项目工程(ENV工具)
前言
前面几篇文章已经讲解了如何通过clion平台结合openOCD进行单片机开发,不过裸机开发并不能应对所有的开发场景,在复杂系统和高时效性的开发需求下,RTOS实时操作系统是单片机开发中必不可少的一环。
在cubeMX中可以很方便的添加freertos或者rt thread等实时操作系统内核到你的项目工程中,随用随加,以freertos为例,添加freertos到你的项目工程中去,只需在cubemx中勾选上freertos即可,甚至可以不修改时钟源,使用嘀嗒定时器也能运行。
不过,本篇文章主要介绍的是基于国产实时操作系统RT Thread及RT Thread软件包快速开发单片机项目。
RT Thread这里不过多讲解,感兴趣的朋友可以去看看RT Thread官网,本文主要讲解如何使用RT Thread中的BSP源码通过ENV工具快速创建基于clion开发的项目工程,并通过env工具添加RT Thread在线软件包快速开发单片机项目。
准备
- clion嵌入式开发环境(clion cubemx git)
- RT Thread源码
- env工具
- 单片机
clion的嵌入式开发环境前面几篇文章已经讲解完了,开始本篇之前,需要你的clion能够开发裸机项目。
git在本篇是必要选项
单片机我使用的是stm32f103RC,这个可以使用任意型号,只要是RT Thread支持的单片机包括且不限于stm32 gd32 apm32等,具体支持名单可以在BSP中查看或去官网查看。
下载RT Thread源码
打开RT Thread官网
在资源选项找到下载,随后在下载页面找到RT Thread源代码
RT Thread提供多种下载方式,这里推荐选择gitee,点击gitee下载链接
选择标签,找到自己需要的RT Thread版本,我选择的是4.1.0版本,不建议大家选择最新版本或者低于4.0的版本
切换到4.1.0版本后,点击克隆,推荐git克隆,下载的zip压缩包文件可能会损坏或文件不全
复制克隆命令后,在电脑内创建新文件夹,将源代码克隆到本地
创建BSP工程模版
克隆完成后,关闭git,打开克隆到本地的源代码文件夹,找到BSP文件
在bsp文件夹下可以看到rt thread具体支持的单片机,以stm32为例,找到stm32文件夹
ps:下载到本地的源代码,除了BSP文件,其他文件会参与到后续的scons编译,尽量不要乱删,如果下载的代码损坏了,可以重新在gitee上下载
选择需要你的单片机型号,比如我使用的单片机为stm32f103rc,选择任意stm32f103的bsp即可,这里以战舰为例,选择warshipv3
在该文件路径下打开env工具
输入命令,创建工程目录
scons --dist
可以看到输入命令后,bsp文件夹内多了dist文件夹,打开后找到project
移植模版工程
project文件夹就是我们基于bsp创建的项目工程,将其复制到clion工程存放的文件夹内,并修改名称
我这里将名称修改为rt_thread_env,修改后打开文件夹,并打开env工具
输入指令
scons --target=cmake
创建cmake工程
这一步可以在复制project文件夹前,在bsp目录下进行,然后将创建好cmake工程的文件夹复制过来,这样以后使用的时候可以省略这一步
完成后会发现工程中多了一个cmakelist
打开clion,打开该项目
配置工具链
工具链其实就是clion的嵌入式开发环境,前面的文章内有介绍
打开后点击右上角的小锤子进行构建
将编译用的cfg文件复制到工程目录中
stlink使用的cfg文件,前文有介绍
然后在clion中添加openocd
添加好后,即可使用stlink烧录工程到单片机上
修改模版工程
将工程移植完毕后,还需要修改一下芯片cubemx文件,因为战舰使用的是stm32f103ze,我这里使用的是stm32f103rc
打开board文件夹和CubeMX_Config文件夹,打开cubemx文件,这个路径很重要。
打开后查看project manager,记住这几个参数,等会儿修改完芯片后,新的工程需要添加这几个参数,一定要一致才能覆盖掉旧的工程
点击左上角修改芯片
这里需要开启一个串口,因为rt thread工程默认开启一个串口用于finsh组件,不开启串口的话,等会儿会报错
可以根据自己的板子打开led的gpio口,等会儿可以用于测试
在rt thread软件包内有seeger rtt软件包,使用后,可以将finsh组件以及打印通过jlink rtt显示
然后填写project manager,一定要和原来的参数移一致
路径一定要仔细查看,很容易出错
这里可以不用勾选,原来的bsp工程是没有勾选的,我个人习惯也建议大家勾选上,后面使用的时候会比较方便调用初始化函数
右上角点击生成,会提示有一个存在的工程,询问是否覆盖,选择是
完成后点击close,回到clion中
如果正确覆盖的话,工程文件内会出现gpio.c等相关外设源文件
在board文件夹下找到SConscript文件
如果没有勾选生成外设.c .h文件的话,可以跳过该步骤
打开SConscript,找到src路径,将外设gpio.c usart.c等添加进去
打开cmakelist.txt将外设文件路径添加进去,并点击右上角重新加载cmake
在上面的SConscript内添加好后,可以不用手动在cmakelist.txt中添加
可以通过env工具,再次scons生成一遍cmake工程即可
后续添加自己的代码文件夹时,会详细讲解这里的机制
打开cubemx生成的main,c文件,将其中引用的头文件和初始化函数复制到rt thread的main.c中
将cubemx中的main,c内的main函数和时钟函数,添加__weak修饰
如果不添加的话,会报错,时钟函数在board.c中已经包含有
完成后点击右上角的编译
测试
在main.c中添加LED闪烁代码
编译下载后,实现两个LED灯闪烁
menuconfig添加软件包
上面已经移植创建完成我们需要的工程了,但是如果只是这样开发的话,那就没有必要这样移植创建rt thread工程了,之所以要这么麻烦的从BSP移植工程,就是为了能够通过env工具添加rt thread的在线软件包。
而且通过env工具可以更加方便我们管理工程中的RT Thread,可以从容的裁切、管理rt thread
这里对于env工具不做过多介绍,仅测试添加在线软件包。
在项目工程下打开env工具,输入
menuconfig
随后会跳出menuconfig
选择第三项RT-Thread online packages
在这里可以找到所有的在线软件包,添加一个软件包测试一下,以seeger rtt为例
选中之后,按esc退出
选择yes保存
然后在env中输入
pkgs --update
输入后,env便会下载软件包到工程中
每次通过menuconfig添加或修改工程后,都需要重新生成一次cmake,这样才能更新cmakelist文件,否则编译时不会编译修改的内容
回到clion
找到seeger rtt中的帮助文档
这里可以看到该软件包的使用详情
根据readme.md中的提示完成配置
然后编译烧录程序
打开jlink rtt查看finsh组件是否正常显示
添加用户代码文件夹
当项目开发逐渐复杂之后,我们需要在项目中添加自己的用户代码,在工程内创建.c源文件和.h头文件后,将其添加到cmakelist.txt中才能使其参加编译。我们的rt thread工程的cmakelist,txt,文件是通过env工具由scons编译生成的。
如果我们手动添加到cmakelist中的话,在下一次scons编译后,手动添加的部分会全部被删除。
所以我们需要编写SConscript文件来管理我们的用户代码文件夹,以便进行scons编译时,能将用户代码添加到cmakelist中参加cmake编译构建。
方法很简单,在rt thread的官方文档中,有如何编写SConscript的说明
官方文档说明
大家可以参照官方文档来编写SConscript,也可以直接复制main.c所在文件夹内的SConsript文件。
总结
一 下载BSP源码 scons –dist创建工程模版
二 scons –target=cmake创建cmake工程
三 修改cubemx并修改SConscript
四 修改cmakelist
五 menuconfig修改RT Thread
六 pkgs –update scons –target=cmake
作者:注意沈题!