接触RT-Thread也是一次偶然的机会,之前认识了一群网友,他们都是深圳的,然后我们这群网友本来打算去参加RTT的一个比赛,所以就约出来交流,我对RTT一脸懵逼,虽然后面我没有加入去参加比赛,但是那天听他们说完,我很兴奋,打算自己也来搞一下,移植一下这个系统,这个系统是开源的,所以你想怎么搞就怎么搞。
搞他之前,你要先做好准备,作案工具必备不可缺。
一、硬件材料。
① stm32f103c8t6开发板一快(这个板子把我带入电子行业的坑)
② J-Link仿真器一个
二、软件工具
1.安装MDK5(下载链接:https://pan.baidu.com/s/11K-sYFalKa77eKMBLir7HQ,提取码:h2om)
2.env工具(https://www.rt-thread.org/page/download.html):Env工具包括配置器和包管理器,用来对内核和组件的功能进行配置,对组件进行自由裁剪,对线上软件包进行管理,使得系统以搭积木的方式进行构建,简单方便。
3.CubeMX工具(ST官网下载,提示:安装CubeMX需要安装java环境):ST公司推出的一种自动创建单片机工程及初始化代码的工具
CubeMX、java、Env我已经打包好:(下载路径:https://pan.baidu.com/s/1ItD19Q8fKHf1lzAspN-exQ,提取码:pusf)
三、制作stm32f103c8t6的 BSP
1. 从RT-Thread的github上clone下源码(git@github.com:RT-Thread/rt-thread.git)
2. 从源码路径:rt-threadbspstm32librariestemplates中,复制一份stm32f10x的模板到源码路径:rt-threadbspstm32,并修改其名字(我的修改为Rice_RT_Thread_stmf103c8t6)
3.打开Rice_RT_Thread_stmf103c8t6,将里面的内容删减剩下红框的内容
4. 双击boardCubeMX_Config下CubeMX_Config.ioc。
修改芯片类型,点击箭头指向的地方。
输入stm32f103c8,然后双击选择芯片
配置RCC,如图红框所致
配置SYS,如图红框所致
配置UART,如图红框所致
点击Clock Configuration,配置时钟,如图红框所示。
配置完后,点击Project Manager,配置如图红框所示,记得这篇文章的教程是基于KEIL 5,所以选择MDK-ARM V5。然后点击GENERATE COODE。等待完成。
将CubeMX_Config目录下删减剩下红框的内容,将Drivers和MDK-ARM删除
5.打开工程路径:rt-threadbspstm32Rice_RT_Thread_stmf103c8t6boardCubeMX_ConfigSrc的main.c,将SystemClock_Config函数,覆盖路径:rt-threadbspstm32Rice_RT_Thread_stmf103c8t6board的board.c的SystemClock_Config函数
6.打开工程路径:rt-threadbspstm32Rice_RT_Thread_stmf103c8t6board的board.h,其中stmf103c8t6的FLASH是64k,RAM是20k,然后将其配置到红框中。
7.打开工程路径:
rt-threadbspstm32Rice_RT_Thread_stmf103c8t6board的Kconfig,根据芯片,配置红框的内容。
8.打开工程路径:rt-threadbspstm32Rice_RT_Thread_stmf103c8t6board的SConscript,修改启动芯片和目标芯片,因为目录下rt-threadbspstm32librariesSTM32F1xx_HALCMSISDeviceSTSTM32F1xxSourceTemplatesarm和rt-threadbspstm32librariesSTM32F1xx_HALCMSISDeviceSTSTM32F1xxSourceTemplatesiar和rt-threadbspstm32librariesSTM32F1xx_HALCMSISDeviceSTSTM32F1xxSourceTemplatesgcc。没有startup_stm32f103x8.s的启动文件,所以选择startup_stm32f103xb.s。所以目标芯片也选择STM32F103XB
9.打开工程路径:rt-threadbspstm32Rice_RT_Thread_stmf103c8t6board,打开目录下的三个文件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__
link.lds修改flash和sram的LENGTH.
link.sct 修改flash和sram的大小。
10.打开工程路径:rt-threadbspstm32Rice_RT_Thread_stmf103c8t6的template.uvprojx,修改对应的芯片。
选择烧录方式:
插入J-Link出现如图所示,说明成功。
因为没有64k,所以选择128k。(苦逼)
11.打开env工具,首先进入工程所在的盘符,然后cd到自己的工程中。如图所示。
12.输入menuconfig,确认GPIO、UART是否打开。
13.输入scons –target=mdk5,重新生成工程
14.双击工程文件没打开工程。
15.打开main.c,因为我所用的板子上PC13接了一颗LED,所以修改一下代码。
点击编译
下载程序
烧录玩,板子的灯就一闪一闪亮晶晶。
16.以上的移植过程都是RT-Thread的源码上做的,太多文件夹了,如果你先将工程分离出来,输入scons –dist。等待。。。。。。
生成完之后,可以在工程路径下:rt-threadbspstm32Rice_RT_Thread_stmf103c8t6dist,将工程拷贝到任意位置。
这个系统强不强大,后续体验了再分享,唯一让我震撼的是,大学一直玩的这款stm32居然也能上系统。哈哈哈。以前知道的太少了。现在可以试下在stm32上跑多线程。