Rice我叫加饭? · 2020年11月03日

RT-Thread 如何移植RTT到stm32《Rice RT-Thread 学习开发》

首发: Rice 嵌入式开发技术分享
作者:RiceDIY

 接触RT-Thread也是一次偶然的机会,之前认识了一群网友,他们都是深圳的,然后我们这群网友本来打算去参加RTT的一个比赛,所以就约出来交流,我对RTT一脸懵逼,虽然后面我没有加入去参加比赛,但是那天听他们说完,我很兴奋,打算自己也来搞一下,移植一下这个系统,这个系统是开源的,所以你想怎么搞就怎么搞。

     搞他之前,你要先做好准备,作案工具必备不可缺。。

一、硬件材料。

①stm32f103c8t6开发板一快(这个板子把我带入电子行业的坑)

image.png

②J-Link仿真器一个

二、软件工具

1.安装MDK5(下载链接:https://pan.baidu.com/s/11K-s...,提取码:h2om)

image.png
2.env工具(https://www.rt-thread.org/pag...):Env工具包括配置器和包管理器,用来对内核和组件的功能进行配置,对组件进行自由裁剪,对线上软件包进行管理,使得系统以搭积木的方式进行构建,简单方便。

image.png

3.CubeMX工具(ST官网下载,提示:安装CubeMX需要安装java环境):ST公司推出的一种自动创建单片机工程及初始化代码的工具

image.png

CubeMX、java、Env我已经打包好:(下载路径:https://pan.baidu.com/s/1ItD1...,提取码:pusf)

三、制作stm32f103c8t6的 BSP

1.从RT-Thread的github上clone下源码(git@github.com:RT-Thread/rt-thread.git)

2.从源码路径:rt-thread\bsp\stm32\libraries\templates中,复制一份stm32f10x的模板到源码路径:rt-thread\bsp\stm32,并修改其名字(我的修改为Rice\_RT\_Thread\_stmf103c8t6)

image.png

3.打开Rice\_RT\_Thread\_stmf103c8t6,将里面的内容删减剩下红框的内容

image.png
4. 双击\board\CubeMX\_Config下CubeMX\_Config.ioc。

image.png

修改芯片类型,点击箭头指向的地方。

image.png

输入stm32f103c8,然后双击选择芯片

image.png

配置RCC,如图红框所致

image.png
配置SYS,如图红框所致

image.png

配置UART,如图红框所致

image.png

点击Clock Configuration,配置时钟,如图红框所示。

image.png

配置完后,点击Project Manager,配置如图红框所示,记得这篇文章的教程是基于KEIL 5,所以选择MDK-ARM V5。然后点击GENERATE COODE。等待完成。
image.png

将CubeMX\_Config目录下删减剩下红框的内容,将Drivers和MDK-ARM删除

image.png

5.打开工程路径:\rt-thread\bsp\stm32\Rice\_RT\_Thread\_stmf103c8t6\board\CubeMX\_Config\Src的main.c,将SystemClock\_Config函数,覆盖路径:\rt-thread\bsp\stm32\Rice\_RT\_Thread\_stmf103c8t6\board的board.c的SystemClock\_Config函数

image.png

6.打开工程路径:\rt-thread\bsp\stm32\Rice\_RT\_Thread\_stmf103c8t6\board的board.h,其中stmf103c8t6的FLASH是64k,RAM是20k,然后将其配置到红框中。

image.png

7.打开工程路径:

\rt-thread\bsp\stm32\Rice\_RT\_Thread\_stmf103c8t6\board的Kconfig,根据芯片,配置红框的内容。

image.png

8.打开工程路径:\rt-thread\bsp\stm32\Rice\_RT\_Thread\_stmf103c8t6\board的SConscript,修改启动芯片和目标芯片,因为目录下\rt-thread\bsp\stm32\libraries\STM32F1xx\_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm和\rt-thread\bsp\stm32\libraries\STM32F1xx\_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\iar和\rt-thread\bsp\stm32\libraries\STM32F1xx\_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\gcc。没有startup\_stm32f103x8.s的启动文件,所以选择startup\_stm32f103xb.s。所以目标芯片也选择STM32F103XB

image.png

9.打开工程路径:\rt-thread\bsp\stm32\Rice\_RT\_Thread\_stmf103c8t6\board,打开目录下的三个文件link.icf、link.lds、link.sct。根据芯片的flash个ram大小进行修改,stm32f103c8t6的flash是64k(0x00010000),ram是20k(0x00005000).

其中link.icf修改\_\_ICFEDIT\_region\_ROM\_end\_\_和\_\_ICFEDIT\_region\_RAM\_end\_\_

image.png
link.lds修改flash和sram的LENGTH.

image.png

link.sct 修改flash和sram的大小。

image.png

10.打开工程路径:\rt-thread\bsp\stm32\Rice\_RT\_Thread\_stmf103c8t6的template.uvprojx,修改对应的芯片。

image.png
选择烧录方式:

image.png

插入J-Link出现如图所示,说明成功。

image.png
因为没有64k,所以选择128k。(苦逼)

image.png

11.打开env工具,首先进入工程所在的盘符,然后cd到自己的工程中。如图所示。

image.png

12.输入menuconfig,确认GPIO、UART是否打开。

image.png
13.输入scons –target=mdk5,重新生成工程

image.png

14.双击工程文件没打开工程。

image.png    

15.打开main.c,因为我所用的板子上PC13接了一颗LED,所以修改一下代码。

image.png

点击编译

image.png

下载程序
image.png
烧录玩,板子的灯就一闪一闪亮晶晶。

image.png

16.以上的移植过程都是RT-Thread的源码上做的,太多文件夹了,如果你先将工程分离出来,输入scons –dist。等待。。。。。。

image.png

生成完之后,可以在工程路径下:\rt-thread\bsp\stm32\Rice\_RT\_Thread\_stmf103c8t6\dist,将工程拷贝到任意位置。

image.png
这个系统强不强大,后续体验了再分享,唯一让我震撼的是,大学一直玩的这款stm32居然也能上系统。哈哈哈。以前知道的太少了。现在可以试下在stm32上跑多线程。

UDP协议栈系列篇阅读

更多嵌入式技术干货请关注Rice 嵌入式开发技术分享
推荐阅读
关注数
1761
内容数
51
一个周末很无聊的嵌入式软件工程师,写写经验,写写总结。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息